[{"data":1,"prerenderedAt":878},["ShallowReactive",2],{"docs-navigation":3,"doc-\u002Fteaching\u002Fapps-dev\u002Fexercises\u002Fread-and-predict":186,"surround-\u002Fteaching\u002Fapps-dev\u002Fexercises\u002Fread-and-predict":725,"notes-index":730},[4,62,127,138,149,160,175],{"title":5,"path":6,"stem":7,"children":8},"Dev","\u002Fdev","1.dev",[9,12,26,36,46,52],{"title":10,"path":6,"stem":11},"Development","1.dev\u002Findex",{"title":13,"path":14,"stem":15,"children":16},"Laravel","\u002Fdev\u002Flaravel","1.dev\u002F1.laravel\u002Findex",[17,18,22],{"title":13,"path":14,"stem":15},{"title":19,"path":20,"stem":21},"Eloquent Relationships","\u002Fdev\u002Flaravel\u002Feloquent-relationships","1.dev\u002F1.laravel\u002F1.eloquent-relationships",{"title":23,"path":24,"stem":25},"Laravel Homestead","\u002Fdev\u002Flaravel\u002Flaravel-homestead","1.dev\u002F1.laravel\u002F2.laravel-homestead",{"title":27,"path":28,"stem":29,"children":30},"Bash","\u002Fdev\u002Fbash","1.dev\u002F13.bash\u002Findex",[31,32],{"title":27,"path":28,"stem":29},{"title":33,"path":34,"stem":35},"My Bash RC","\u002Fdev\u002Fbash\u002Fbash-rc","1.dev\u002F13.bash\u002F2.bash-rc",{"title":37,"path":38,"stem":39,"children":40},"Clean Code","\u002Fdev\u002Fclean-code","1.dev\u002F15.clean-code\u002Findex",[41,42],{"title":37,"path":38,"stem":39},{"title":43,"path":44,"stem":45},"Naming Things","\u002Fdev\u002Fclean-code\u002Fnaming-things","1.dev\u002F15.clean-code\u002F1.naming-things",{"title":47,"path":48,"stem":49,"children":50},"AI Prompting","\u002Fdev\u002Fai-prompting","1.dev\u002F17.ai-prompting\u002Findex",[51],{"title":47,"path":48,"stem":49},{"title":53,"path":54,"stem":55,"children":56},"Git","\u002Fdev\u002Fgit","1.dev\u002F9.git\u002Findex",[57,58],{"title":53,"path":54,"stem":55},{"title":59,"path":60,"stem":61},"Git Cheat Sheet","\u002Fdev\u002Fgit\u002Fgit-cheat-sheet","1.dev\u002F9.git\u002F1.git-cheat-sheet",{"title":63,"path":64,"stem":65,"children":66},"Teaching","\u002Fteaching","2.teaching",[67,69],{"title":63,"path":64,"stem":68},"2.teaching\u002Findex",{"title":70,"path":71,"stem":72,"children":73},"AppsDev","\u002Fteaching\u002Fapps-dev","2.teaching\u002F1.apps-dev\u002Findex",[74,75,93,107,117],{"title":70,"path":71,"stem":72},{"title":76,"path":77,"stem":78,"children":79},"Lesson Plans","\u002Fteaching\u002Fapps-dev\u002Flesson-plans","2.teaching\u002F1.apps-dev\u002F1.lesson-plans\u002Findex",[80,81,85,89],{"title":76,"path":77,"stem":78},{"title":82,"path":83,"stem":84},"Coding with AI","\u002Fteaching\u002Fapps-dev\u002Flesson-plans\u002Fcoding-with-ai","2.teaching\u002F1.apps-dev\u002F1.lesson-plans\u002F1.coding-with-ai",{"title":86,"path":87,"stem":88},"Coding with AI: Prompts & Reading JavaScript","\u002Fteaching\u002Fapps-dev\u002Flesson-plans\u002Fprompts-and-reading-js","2.teaching\u002F1.apps-dev\u002F1.lesson-plans\u002F2.prompts-and-reading-js",{"title":90,"path":91,"stem":92},"JavaScript for Beginners","\u002Fteaching\u002Fapps-dev\u002Flesson-plans\u002Fjavascript-for-beginners","2.teaching\u002F1.apps-dev\u002F1.lesson-plans\u002F3.javascript-for-beginners",{"title":94,"path":95,"stem":96,"children":97},"Activities","\u002Fteaching\u002Fapps-dev\u002Factivities","2.teaching\u002F1.apps-dev\u002F2.activities\u002Findex",[98,99,103],{"title":94,"path":95,"stem":96},{"title":100,"path":101,"stem":102},"Dynamic Portfolio Website","\u002Fteaching\u002Fapps-dev\u002Factivities\u002Fdynamic-portfolio-website","2.teaching\u002F1.apps-dev\u002F2.activities\u002F2.dynamic-portfolio-website",{"title":104,"path":105,"stem":106},"Mini Product Store","\u002Fteaching\u002Fapps-dev\u002Factivities\u002Fmini-product-store","2.teaching\u002F1.apps-dev\u002F2.activities\u002F3.mini-product-store",{"title":108,"path":109,"stem":110,"children":111},"Exercises","\u002Fteaching\u002Fapps-dev\u002Fexercises","2.teaching\u002F1.apps-dev\u002F4.exercises\u002Findex",[112,113],{"title":108,"path":109,"stem":110},{"title":114,"path":115,"stem":116},"Read & Predict","\u002Fteaching\u002Fapps-dev\u002Fexercises\u002Fread-and-predict","2.teaching\u002F1.apps-dev\u002F4.exercises\u002F1.read-and-predict",{"title":118,"path":119,"stem":120,"children":121},"AI Prompts","\u002Fteaching\u002Fapps-dev\u002Fai-prompts","2.teaching\u002F1.apps-dev\u002F7.ai-prompts\u002Findex",[122,123],{"title":118,"path":119,"stem":120},{"title":124,"path":125,"stem":126},"Prompt Flow","\u002Fteaching\u002Fapps-dev\u002Fai-prompts\u002Fbasic-prompting","2.teaching\u002F1.apps-dev\u002F7.ai-prompts\u002F1.basic-prompting",{"title":128,"path":129,"stem":130,"children":131},"Snippets","\u002Fsnippets","3.snippets",[132,134],{"title":128,"path":129,"stem":133},"3.snippets\u002Findex",{"title":135,"path":136,"stem":137},"Debounce and Throttle","\u002Fsnippets\u002Fdebounce-and-throttle","3.snippets\u002F1.debounce-and-throttle",{"title":139,"path":140,"stem":141,"children":142},"Cheat Sheets","\u002Fcheat-sheets","4.cheat-sheets",[143,145],{"title":139,"path":140,"stem":144},"4.cheat-sheets\u002Findex",{"title":146,"path":147,"stem":148},"Vim Cheat Sheet","\u002Fcheat-sheets\u002Fvim-cheat-sheet","4.cheat-sheets\u002F1.vim-cheat-sheet",{"title":150,"path":151,"stem":152,"children":153},"Templates","\u002Ftemplates","5.templates",[154,156],{"title":150,"path":151,"stem":155},"5.templates\u002Findex",{"title":157,"path":158,"stem":159},"Pull Request Template","\u002Ftemplates\u002Fpull-request-template","5.templates\u002F1.pull-request-template",{"title":161,"path":162,"stem":163,"children":164},"Meta","\u002Fmeta","6.meta",[165,167,171],{"title":161,"path":162,"stem":166},"6.meta\u002Findex",{"title":168,"path":169,"stem":170},"Authoring Guide","\u002Fmeta\u002Fauthoring-guide","6.meta\u002F1.authoring-guide",{"title":172,"path":173,"stem":174},"Markdown Showcase","\u002Fmeta\u002Fmarkdown-showcase","6.meta\u002F2.markdown-showcase",{"title":176,"path":177,"stem":178,"children":179},"Troubleshooting","\u002Ftroubleshooting","7.troubleshooting",[180,182],{"title":176,"path":177,"stem":181},"7.troubleshooting\u002Findex",{"title":183,"path":184,"stem":185},"Fixing CORS Errors","\u002Ftroubleshooting\u002Fcors-errors","7.troubleshooting\u002F1.cors-errors",{"id":187,"title":114,"body":188,"category":94,"createdAt":706,"description":707,"draft":708,"extension":709,"featured":708,"keywords":710,"links":715,"meta":716,"navigation":363,"path":115,"readingTime":309,"seo":717,"stem":116,"tags":718,"updatedAt":706,"__hash__":724},"docs\u002F2.teaching\u002F1.apps-dev\u002F4.exercises\u002F1.read-and-predict.md",{"type":189,"value":190,"toc":691},"minimark",[191,200,203,208,211,235,239,261,265,451,455,499,503,506,549,553,556,567,576,580,583,594,598,601,612,616,679,687],[192,193,194,195,199],"p",{},"One of the most important programming skills is being able to ",[196,197,198],"strong",{},"read code before\nwriting code",". Professional developers spend much more time reading code than\ntyping it.",[192,201,202],{},"In this activity, you will analyze a JavaScript function, predict what it does,\nand then verify whether your prediction was correct.",[204,205,207],"h2",{"id":206},"learning-objectives","Learning Objectives",[192,209,210],{},"By the end of this activity, you should be able to:",[212,213,214,218,226,229,232],"ul",{},[215,216,217],"li",{},"Read a JavaScript function from top to bottom.",[215,219,220,221,225],{},"Identify the purpose of an ",[222,223,224],"code",{},"if"," statement.",[215,227,228],{},"Follow the flow of execution.",[215,230,231],{},"Predict a function's return value.",[215,233,234],{},"Verify your prediction by running the code.",[204,236,238],{"id":237},"the-big-idea","The Big Idea",[240,241,242,249,252,258],"note",{},[192,243,244,245,248],{},"Do ",[196,246,247],{},"not"," run the code immediately.",[192,250,251],{},"Good programmers first ask:",[253,254,255],"blockquote",{},[192,256,257],{},"\"What do I think this code will do?\"",[192,259,260],{},"Only after making a prediction should you execute the program to check your\nunderstanding.",[204,262,264],{"id":263},"code-to-analyze","Code to Analyze",[266,267,272],"pre",{"className":268,"code":269,"language":270,"meta":271,"style":271},"language-javascript shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","function calculateTotal(bill, tipPercent) {\n    if (bill \u003C 0) {\n        return \"Invalid bill\";\n    }\n\n    let tip = bill * (tipPercent \u002F 100);\n\n    return bill + tip;\n}\n\ncalculateTotal(100, 10);\n","javascript","",[222,273,274,307,332,352,358,365,399,404,419,425,430],{"__ignoreMap":271},[275,276,279,283,287,291,295,298,301,304],"span",{"class":277,"line":278},"line",1,[275,280,282],{"class":281},"s5Kfy","function",[275,284,286],{"class":285},"sljsM"," calculateTotal",[275,288,290],{"class":289},"soVBu","(",[275,292,294],{"class":293},"sqOPj","bill",[275,296,297],{"class":289},",",[275,299,300],{"class":293}," tipPercent",[275,302,303],{"class":289},")",[275,305,306],{"class":289}," {\n",[275,308,310,314,318,321,324,328,330],{"class":277,"line":309},2,[275,311,313],{"class":312},"siDh9","    if",[275,315,317],{"class":316},"sLdnO"," (",[275,319,294],{"class":320},"sSC40",[275,322,323],{"class":289}," \u003C",[275,325,327],{"class":326},"s7CZa"," 0",[275,329,303],{"class":316},[275,331,306],{"class":289},[275,333,335,338,342,346,349],{"class":277,"line":334},3,[275,336,337],{"class":312},"        return",[275,339,341],{"class":340},"sbYkP"," \"",[275,343,345],{"class":344},"sTbE_","Invalid bill",[275,347,348],{"class":340},"\"",[275,350,351],{"class":289},";\n",[275,353,355],{"class":277,"line":354},4,[275,356,357],{"class":289},"    }\n",[275,359,361],{"class":277,"line":360},5,[275,362,364],{"emptyLinePlaceholder":363},true,"\n",[275,366,368,371,374,377,380,384,386,389,392,395,397],{"class":277,"line":367},6,[275,369,370],{"class":281},"    let",[275,372,373],{"class":320}," tip",[275,375,376],{"class":289}," =",[275,378,379],{"class":320}," bill",[275,381,383],{"class":382},"sVsLi"," *",[275,385,317],{"class":316},[275,387,388],{"class":320},"tipPercent",[275,390,391],{"class":382}," \u002F",[275,393,394],{"class":326}," 100",[275,396,303],{"class":316},[275,398,351],{"class":289},[275,400,402],{"class":277,"line":401},7,[275,403,364],{"emptyLinePlaceholder":363},[275,405,407,410,412,415,417],{"class":277,"line":406},8,[275,408,409],{"class":312},"    return",[275,411,379],{"class":320},[275,413,414],{"class":382}," +",[275,416,373],{"class":320},[275,418,351],{"class":289},[275,420,422],{"class":277,"line":421},9,[275,423,424],{"class":289},"}\n",[275,426,428],{"class":277,"line":427},10,[275,429,364],{"emptyLinePlaceholder":363},[275,431,433,436,439,442,444,447,449],{"class":277,"line":432},11,[275,434,435],{"class":285},"calculateTotal",[275,437,290],{"class":438},"snCua",[275,440,441],{"class":326},"100",[275,443,297],{"class":289},[275,445,446],{"class":326}," 10",[275,448,303],{"class":438},[275,450,351],{"class":289},[204,452,454],{"id":453},"instructions","Instructions",[456,457,459,464,467,472,476,479,482,486,489,492],"steps",{"level":458},"3",[460,461,463],"h3",{"id":462},"read-the-code","Read the Code",[192,465,466],{},"As a group, read the function from top to bottom.",[192,468,244,469,471],{},[196,470,247],{}," run it yet.",[460,473,475],{"id":474},"make-your-predictions","Make Your Predictions",[192,477,478],{},"Write your answers in your activity log before checking the result.",[192,480,481],{},"Answer the questions below.",[460,483,485],{"id":484},"verify-your-answers","Verify Your Answers",[192,487,488],{},"Paste the code into your editor or use an AI assistant to execute it.",[192,490,491],{},"Compare the actual output with your prediction.",[192,493,494,495,498],{},"If you were wrong, explain ",[196,496,497],{},"why",".",[204,500,502],{"id":501},"questions","Questions",[192,504,505],{},"Answer the following before running the program.",[507,508,509,516,526,529],"ol",{},[215,510,511,512,515],{},"What value does ",[222,513,514],{},"calculateTotal(100, 10)"," return?",[215,517,518,519,521,522,525],{},"What happens if ",[222,520,294],{}," is ",[222,523,524],{},"-5","?",[215,527,528],{},"Which line prevents invalid bills?",[215,530,531,532],{},"Identify:\n",[212,533,534,537,543,546],{},[215,535,536],{},"the function",[215,538,539,540,542],{},"the ",[222,541,224],{}," statement",[215,544,545],{},"the variable",[215,547,548],{},"the mathematical calculation",[204,550,552],{"id":551},"reflection","Reflection",[192,554,555],{},"After verifying your answers, write a short reflection.",[212,557,558,561,564],{},[215,559,560],{},"Were your predictions correct?",[215,562,563],{},"What surprised you?",[215,565,566],{},"What did you learn about how JavaScript functions execute?",[568,569,570,573],"tip",{},[192,571,572],{},"Don't skip the prediction step.",[192,574,575],{},"The goal is not simply getting the correct answer. The goal is training your\nbrain to trace code logically before relying on the computer.",[204,577,579],{"id":578},"expected-output","Expected Output",[192,581,582],{},"By the end of the activity, you should have:",[212,584,585,588,591],{},[215,586,587],{},"A completed prediction log.",[215,589,590],{},"Verified answers after running the code.",[215,592,593],{},"A short reflection explaining what you learned.",[204,595,597],{"id":596},"submission","Submission",[192,599,600],{},"Submit a document containing:",[507,602,603,606,609],{},[215,604,605],{},"Your answers to the four questions.",[215,607,608],{},"The actual output after running the program.",[215,610,611],{},"Your reflection describing whether your prediction was correct.",[204,613,615],{"id":614},"grading-rubric","Grading Rubric",[617,618,619,633],"table",{},[620,621,622],"thead",{},[623,624,625,629],"tr",{},[626,627,628],"th",{},"Category",[626,630,632],{"align":631},"right","Points",[634,635,636,645,653,660,668],"tbody",{},[623,637,638,642],{},[639,640,641],"td",{},"Correct Predictions",[639,643,644],{"align":631},"30",[623,646,647,650],{},[639,648,649],{},"Code Identification",[639,651,652],{"align":631},"25",[623,654,655,658],{},[639,656,657],{},"Reflection & Explanation",[639,659,652],{"align":631},[623,661,662,665],{},[639,663,664],{},"Participation & Completion",[639,666,667],{"align":631},"20",[623,669,670,675],{},[639,671,672],{},[196,673,674],{},"Total",[639,676,677],{"align":631},[196,678,441],{},[240,680,681,684],{},[192,682,683],{},"Reading code is a skill that improves with practice.",[192,685,686],{},"Every time you predict what code will do before running it, you strengthen your\nability to debug programs, understand existing codebases, and write better\nsoftware.",[688,689,690],"style",{},"html pre.shiki code .s5Kfy, html code.shiki .s5Kfy{--shiki-light:#9C3EDA;--shiki-default:#AB5959;--shiki-dark:#CB7676}html pre.shiki code .sljsM, html code.shiki .sljsM{--shiki-light:#6182B8;--shiki-default:#59873A;--shiki-dark:#80A665}html pre.shiki code .soVBu, html code.shiki .soVBu{--shiki-light:#39ADB5;--shiki-default:#999999;--shiki-dark:#666666}html pre.shiki code .sqOPj, html code.shiki .sqOPj{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#B07D48;--shiki-default-font-style:inherit;--shiki-dark:#BD976A;--shiki-dark-font-style:inherit}html pre.shiki code .siDh9, html code.shiki .siDh9{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#1E754F;--shiki-default-font-style:inherit;--shiki-dark:#4D9375;--shiki-dark-font-style:inherit}html pre.shiki code .sLdnO, html code.shiki .sLdnO{--shiki-light:#E53935;--shiki-default:#999999;--shiki-dark:#666666}html pre.shiki code .sSC40, html code.shiki .sSC40{--shiki-light:#90A4AE;--shiki-default:#B07D48;--shiki-dark:#BD976A}html pre.shiki code .s7CZa, html code.shiki .s7CZa{--shiki-light:#F76D47;--shiki-default:#2F798A;--shiki-dark:#4C9A91}html pre.shiki code .sbYkP, html code.shiki .sbYkP{--shiki-light:#39ADB5;--shiki-default:#B5695977;--shiki-dark:#C98A7D77}html pre.shiki code .sTbE_, html code.shiki .sTbE_{--shiki-light:#91B859;--shiki-default:#B56959;--shiki-dark:#C98A7D}html pre.shiki code .sVsLi, html code.shiki .sVsLi{--shiki-light:#39ADB5;--shiki-default:#AB5959;--shiki-dark:#CB7676}html pre.shiki code .snCua, html code.shiki .snCua{--shiki-light:#90A4AE;--shiki-default:#999999;--shiki-dark:#666666}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":271,"searchDepth":334,"depth":334,"links":692},[693,694,695,696,701,702,703,704,705],{"id":206,"depth":309,"text":207},{"id":237,"depth":309,"text":238},{"id":263,"depth":309,"text":264},{"id":453,"depth":309,"text":454,"children":697},[698,699,700],{"id":462,"depth":334,"text":463},{"id":474,"depth":334,"text":475},{"id":484,"depth":334,"text":485},{"id":501,"depth":309,"text":502},{"id":551,"depth":309,"text":552},{"id":578,"depth":309,"text":579},{"id":596,"depth":309,"text":597},{"id":614,"depth":309,"text":615},"2026-07-17","Practice reading JavaScript code, predicting its output, and verifying your understanding before running the program.",false,"md",[711,712,713,714],"code reading","predict output","javascript functions","if statement",[],{},{"title":114,"description":707},[719,720,270,721,722,723],"teaching","activity","functions","if-statement","debugging","QGF-9wRfjaghXopxWIXCWGqJh50LVsZda10Ot1Fuv4I",[726,728],{"title":108,"path":109,"stem":110,"description":727,"children":-1},"Practice problems that build skill through repetition.",{"title":118,"path":119,"stem":120,"description":729,"children":-1},"Prompt templates for teaching with and about AI.",[731,738,744,747,753,756,763,766,769,776,779,782,789,792,797,800,806,810,813,815,817,821,823,826,828,834,837,842,845,851,854,861,866,869,875],{"path":20,"title":19,"description":732,"tags":733,"category":13,"featured":708,"updatedAt":706,"createdAt":706,"readingTime":278,"draft":708},"The core Eloquent relationship types with examples and the N+1 trap to avoid.",[734,735,736,737],"laravel","eloquent","database","orm",{"path":24,"title":23,"description":739,"tags":740,"category":13,"featured":708,"updatedAt":706,"createdAt":706,"readingTime":278,"draft":708},"My quick reference for setting up and using Laravel Homestead during development.",[734,741,742,743],"homestead","vagrant","virtualbox",{"path":14,"title":13,"description":745,"tags":746,"category":13,"featured":708,"updatedAt":706,"createdAt":706,"readingTime":278,"draft":708},"The PHP framework for web artisans — Eloquent, routing, queues and more.",[],{"path":34,"title":33,"description":748,"tags":749,"category":27,"featured":708,"updatedAt":706,"createdAt":706,"readingTime":309,"draft":708},"Personal Bash aliases and helper functions that streamline my Laravel and Homestead development workflow.",[750,751,752,741,734],"bash","bashrc","git bash",{"path":28,"title":27,"description":754,"tags":755,"category":27,"featured":708,"updatedAt":706,"createdAt":706,"readingTime":278,"draft":708},"Shell scripting and a faster life on the command line.",[],{"path":44,"title":43,"description":757,"tags":758,"category":37,"featured":363,"updatedAt":706,"createdAt":706,"readingTime":278,"draft":708},"Practical rules for naming variables, functions and types so code reads like prose.",[759,760,761,762],"clean-code","naming","readability","craft",{"path":38,"title":37,"description":764,"tags":765,"category":37,"featured":708,"updatedAt":706,"createdAt":706,"readingTime":278,"draft":708},"Writing code that other people (and future you) can read.",[],{"path":48,"title":47,"description":767,"tags":768,"category":47,"featured":708,"updatedAt":706,"createdAt":706,"readingTime":278,"draft":708},"Getting reliable, useful results out of language models.",[],{"path":60,"title":59,"description":770,"tags":771,"category":53,"featured":363,"updatedAt":706,"createdAt":706,"readingTime":309,"draft":708},"The Git commands I actually use day to day, plus how to undo things safely.",[772,773,774,775],"git","cli","version-control","cheat-sheet",{"path":54,"title":53,"description":777,"tags":778,"category":53,"featured":708,"updatedAt":706,"createdAt":706,"readingTime":278,"draft":708},"Version control — everyday commands and getting out of trouble.",[],{"path":6,"title":10,"description":780,"tags":781,"category":10,"featured":708,"updatedAt":706,"createdAt":706,"readingTime":278,"draft":708},"Languages, frameworks and the craft of building software.",[],{"path":83,"title":82,"description":783,"tags":784,"category":63,"featured":708,"updatedAt":706,"createdAt":706,"readingTime":354,"draft":708},"An introduction to AI-assisted software development, modern development workflows, and the mindset needed to use AI responsibly throughout the course.",[785,786,787,788],"ai","software development","prompt engineering","beginners",{"path":87,"title":86,"description":790,"tags":791,"category":63,"featured":708,"updatedAt":706,"createdAt":706,"readingTime":354,"draft":708},"Learn how to write effective AI prompts and read JavaScript code confidently. This lesson teaches students how to direct AI instead of blindly copying its output.",[785,270,787,788],{"path":91,"title":90,"description":793,"tags":794,"category":63,"featured":708,"updatedAt":706,"createdAt":706,"readingTime":334,"draft":708},"Introduction to the fundamentals of JavaScript, from variables and functions to loops, DOM manipulation, and events. This lesson prepares students for the Mini Product Store activity.",[270,788,795,796],"programming","web development",{"path":77,"title":76,"description":798,"tags":799,"category":76,"featured":708,"updatedAt":706,"createdAt":706,"readingTime":278,"draft":708},"Session-by-session plans with objectives, timing and materials.",[],{"path":101,"title":100,"description":801,"tags":802,"category":94,"featured":708,"updatedAt":706,"createdAt":706,"readingTime":334,"draft":708},"Build a personal portfolio website using JavaScript arrays, loops, and DOM manipulation instead of hardcoded HTML.",[719,720,270,803,804,805],"portfolio","dom","loops",{"path":105,"title":104,"description":807,"tags":808,"category":94,"featured":708,"updatedAt":706,"createdAt":706,"readingTime":334,"draft":708},"A JavaScript activity where students build a simple product store using arrays, loops, functions, DOM manipulation, and event listeners.",[719,720,270,804,809,805],"arrays",{"path":95,"title":94,"description":811,"tags":812,"category":94,"featured":708,"updatedAt":706,"createdAt":706,"readingTime":278,"draft":708},"In-class activities that get students doing, not just listening.",[],{"path":115,"title":114,"description":707,"tags":814,"category":94,"featured":708,"updatedAt":706,"createdAt":706,"readingTime":309,"draft":708},[719,720,270,721,722,723],{"path":109,"title":108,"description":727,"tags":816,"category":108,"featured":708,"updatedAt":706,"createdAt":706,"readingTime":278,"draft":708},[],{"path":125,"title":124,"description":818,"tags":819,"category":118,"featured":708,"updatedAt":706,"createdAt":706,"readingTime":354,"draft":708},"A structured workflow for working with AI that emphasizes planning, review, and understanding before implementation.",[785,787,820],"workflow",{"path":119,"title":118,"description":729,"tags":822,"category":118,"featured":708,"updatedAt":706,"createdAt":706,"readingTime":278,"draft":708},[],{"path":71,"title":70,"description":824,"tags":825,"category":63,"featured":708,"updatedAt":706,"createdAt":706,"readingTime":278,"draft":708},"Lesson plans, activities, rubrics and student references.",[],{"path":64,"title":63,"description":824,"tags":827,"category":63,"featured":708,"updatedAt":706,"createdAt":706,"readingTime":278,"draft":708},[],{"path":136,"title":135,"description":829,"tags":830,"category":128,"featured":708,"updatedAt":706,"createdAt":706,"readingTime":278,"draft":708},"Two tiny functions to control how often a handler runs — with the difference explained.",[270,831,832,833],"performance","snippets","events",{"path":129,"title":128,"description":835,"tags":836,"category":128,"featured":708,"updatedAt":706,"createdAt":706,"readingTime":278,"draft":708},"Small, copy-ready fragments you reach for again and again.",[],{"path":147,"title":146,"description":838,"tags":839,"category":139,"featured":708,"updatedAt":706,"createdAt":706,"readingTime":278,"draft":708},"The essential Vim motions and commands to get productive and get out.",[840,841,775,773],"vim","editor",{"path":140,"title":139,"description":843,"tags":844,"category":139,"featured":708,"updatedAt":706,"createdAt":706,"readingTime":278,"draft":708},"Dense, scannable references for commands and syntax.",[],{"path":158,"title":157,"description":846,"tags":847,"category":150,"featured":708,"updatedAt":706,"createdAt":706,"readingTime":278,"draft":708},"A reusable PR description template that makes reviews faster and kinder.",[772,848,849,850],"github","template","collaboration",{"path":151,"title":150,"description":852,"tags":853,"category":150,"featured":708,"updatedAt":706,"createdAt":706,"readingTime":278,"draft":708},"Reusable starting points for files, configs and docs.",[],{"path":169,"title":168,"description":855,"tags":856,"category":161,"featured":708,"updatedAt":706,"createdAt":706,"readingTime":309,"draft":708},"The frontmatter and markdown conventions every note in this knowledge base follows.",[857,858,859,860],"meta","conventions","markdown","authoring",{"path":173,"title":172,"description":862,"tags":863,"category":161,"featured":708,"updatedAt":706,"createdAt":706,"readingTime":309,"draft":708},"Every formatting feature this knowledge base supports, on one page — a living reference and rendering test.",[859,864,865],"mdc","reference",{"path":162,"title":161,"description":867,"tags":868,"category":161,"featured":708,"updatedAt":706,"createdAt":706,"readingTime":278,"draft":708},"How this knowledge base itself is built and maintained.",[],{"path":184,"title":183,"description":870,"tags":871,"category":176,"featured":708,"updatedAt":706,"createdAt":706,"readingTime":278,"draft":708},"What a CORS error actually means and how to fix it — on the server, where it belongs.",[872,873,874,723],"cors","http","apis",{"path":177,"title":176,"description":876,"tags":877,"category":176,"featured":708,"updatedAt":706,"createdAt":706,"readingTime":278,"draft":708},"Symptoms, causes and fixes for problems worth remembering.",[],1784276795011]