<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Confessions of a Code Addict: Courses]]></title><description><![CDATA[Course announcement and related news]]></description><link>https://blog.codingconfessions.com/s/courses</link><image><url>https://substackcdn.com/image/fetch/$s_!lstI!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe440a724-cff0-437a-8361-d7699406ac22_500x500.png</url><title>Confessions of a Code Addict: Courses</title><link>https://blog.codingconfessions.com/s/courses</link></image><generator>Substack</generator><lastBuildDate>Wed, 22 Apr 2026 16:11:36 GMT</lastBuildDate><atom:link href="https://blog.codingconfessions.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Abhinav Upadhyay]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[codeconfessions@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[codeconfessions@substack.com]]></itunes:email><itunes:name><![CDATA[Abhinav Upadhyay]]></itunes:name></itunes:owner><itunes:author><![CDATA[Abhinav Upadhyay]]></itunes:author><googleplay:owner><![CDATA[codeconfessions@substack.com]]></googleplay:owner><googleplay:email><![CDATA[codeconfessions@substack.com]]></googleplay:email><googleplay:author><![CDATA[Abhinav Upadhyay]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[[Course Launch] Hands-on Introduction to X86 Assembly]]></title><description><![CDATA[A Live, Interactive Course for Systems Engineers]]></description><link>https://blog.codingconfessions.com/p/course-launch-hands-on-introduction</link><guid isPermaLink="false">https://blog.codingconfessions.com/p/course-launch-hands-on-introduction</guid><dc:creator><![CDATA[Abhinav Upadhyay]]></dc:creator><pubDate>Sat, 22 Feb 2025 16:52:11 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!vzZu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14f2e36b-dfdb-4235-bb2c-6b5ee5a1032a_1472x832.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div><hr></div><blockquote><h5>All the seats are filled now, most of them were taken up by the paid subscribers who were given early access.  I will plan and announce another one soon.</h5><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.codingconfessions.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.codingconfessions.com/subscribe?"><span>Subscribe now</span></a></p></blockquote><div><hr></div><p>Recently I announced that we will have some <a href="https://blog.codingconfessions.com/p/launching-live-courses">live courses</a> soon, and this is the first course in that line: <strong>Hands-on Introduction to X86 Assembly</strong>. I&#8217;m starting with assembly because this is the foundation and everything in systems engineering builds on top of it, and even the future courses I want to do build on top of this.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vzZu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14f2e36b-dfdb-4235-bb2c-6b5ee5a1032a_1472x832.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vzZu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14f2e36b-dfdb-4235-bb2c-6b5ee5a1032a_1472x832.jpeg 424w, https://substackcdn.com/image/fetch/$s_!vzZu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14f2e36b-dfdb-4235-bb2c-6b5ee5a1032a_1472x832.jpeg 848w, https://substackcdn.com/image/fetch/$s_!vzZu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14f2e36b-dfdb-4235-bb2c-6b5ee5a1032a_1472x832.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!vzZu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14f2e36b-dfdb-4235-bb2c-6b5ee5a1032a_1472x832.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vzZu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14f2e36b-dfdb-4235-bb2c-6b5ee5a1032a_1472x832.jpeg" width="1456" height="823" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/14f2e36b-dfdb-4235-bb2c-6b5ee5a1032a_1472x832.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:823,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:72644,&quot;alt&quot;:&quot;AI's imagination of an assembly program&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.codingconfessions.com/i/155517930?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14f2e36b-dfdb-4235-bb2c-6b5ee5a1032a_1472x832.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="AI's imagination of an assembly program" title="AI's imagination of an assembly program" srcset="https://substackcdn.com/image/fetch/$s_!vzZu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14f2e36b-dfdb-4235-bb2c-6b5ee5a1032a_1472x832.jpeg 424w, https://substackcdn.com/image/fetch/$s_!vzZu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14f2e36b-dfdb-4235-bb2c-6b5ee5a1032a_1472x832.jpeg 848w, https://substackcdn.com/image/fetch/$s_!vzZu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14f2e36b-dfdb-4235-bb2c-6b5ee5a1032a_1472x832.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!vzZu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F14f2e36b-dfdb-4235-bb2c-6b5ee5a1032a_1472x832.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"></figcaption></figure></div><h2>Overview of the Course</h2><p>This will be an introductory course on assembly programming for the X64 hardware for experienced software engineers with expertise in one or more high level programming languages such as C, C++, Rust, Go, Java, C#, Python, JavaScript etc. </p><p>The objective of the course is to introduce you to the X86 hardware architecture and the instruction set to a level where you can start to think at assembly level when you read or write code written in a high level language. </p><p>This sets up the foundation for you to dive into more advanced topics in systems engineering and will accelerate your learning.</p><h2>Target Audience</h2><p>You don&#8217;t need to know computer architecture or any other prior familiarity with assembly programming. </p><p>But you should be an experienced programmer who is really comfortable solving problems in a high level language. Specifically, you should be:</p><ul><li><p>comfortable writing code in a high level language, such as C, C++, Rust, Java, Python etc. </p></li><li><p>able to write your own implementation of common data structures, such as linked lists and hash tables in a language of your choice.</p></li><li><p>know the difference between a value and a reference</p></li><li><p>comfortable with the idea of recursion. </p></li></ul><p>Last but not the least, you should have curiosity of understanding how code really executes on the hardware.</p><h2>Course Format</h2><p>The format will be completely hands-on where you and I will spend most of the time writing and discussing code. Each session will have a structured format:</p><ol><li><p>Concept introduction with practical examples</p></li><li><p>Pair programming exercises in breakout rooms</p></li><li><p>Discussions and Q&amp;A</p></li></ol><h2>Syllabus</h2><h3>Section 1: Foundations &amp; Basic Operations</h3><ul><li><p>Computer architecture essentials: memory hierarchy, registers, addressing modes</p></li><li><p>Intro to your development environment (assembler, Make, GDB)</p></li><li><p>Writing your first assembly program</p></li><li><p>Automating builds using Makefiles</p></li><li><p>Making system calls</p></li></ul><h3>Section 2: Control Flow &amp; Functions</h3><ul><li><p>Implementing conditional branches</p></li><li><p>Building loops in assembly</p></li><li><p>Function implementation and calling conventions</p></li><li><p>Understanding the stack frame</p></li><li><p>Tutorial on debugging assembly programs using GDB/LLDB</p></li><li><p>Different ways of implementing switch cases</p></li></ul><h3>Section 3: Memory &amp; Libraries</h3><ul><li><p>Deep dive into memory segments (data, bss, text, stack, heap)</p></li><li><p>Static vs dynamic memory allocation</p></li><li><p>Creating and using libraries</p></li><li><p>Interfacing assembly with C</p></li><li><p>Understanding linking (static vs dynamic)</p></li><li><p>Hands-on: Building and using a simple library</p></li><li><p>Using valgrind to debug memory leaks</p></li></ul><h3>Section 4: Real-world Applications</h3><ul><li><p>Reading and understanding compiler output</p></li><li><p>Common compiler optimizations:</p><ul><li><p>Loop unrolling</p></li><li><p>Function inlining</p></li><li><p>Register allocation</p></li></ul></li><li><p>Analyzing C/Rust code through its assembly</p><ul><li><p>We will look at C and Rust programs and analyze the compiler generated assembly for them.</p></li></ul></li><li><p>Take home final project</p></li></ul><h2>Learning Outcomes</h2><p>After completing this course, you will be able to:</p><ol><li><p><strong>Read and Write Assembly</strong></p><ol><li><p>Understand X86 assembly syntax and structure</p></li><li><p>Read and comprehend compiler-generated assembly</p></li><li><p>Debug assembly code using GDB</p></li></ol></li></ol><ol start="2"><li><p><strong>Understand Systems Better</strong></p><ol><li><p>Visualize how high-level code maps to machine instructions</p></li><li><p>Make informed decisions about performance tradeoffs</p></li><li><p>Debug issues at the machine level</p></li></ol></li></ol><ol start="3"><li><p><strong>Build Practical Skills</strong></p><ol><li><p>Interface assembly code with C programs</p></li><li><p>Create and use shared libraries</p></li><li><p>Build familiarity with systems programming tools (assembler, linker, debugger)</p></li></ol></li></ol><ol start="4"><li><p><strong>Gain Foundation for Advanced Topics</strong></p><ol><li><p>Compiler development</p></li><li><p>Systems programming</p></li><li><p>Performance optimization</p></li><li><p>Security analysis</p></li></ol></li></ol><div><hr></div><h2>Course Details &amp; Founding Batch Benefits</h2><p>As this is the first batch, I&#8217;m offering special arrangements and benefits:</p><p><strong>Course Structure</strong></p><ul><li><p><strong>Duration</strong>: 3-4 sessions, each 3 hours long</p></li><li><p><strong>Dates</strong>:</p><ul><li><p>19th-20th April (first two sessions)</p></li><li><p>26th-27th April (3rd and if required the 4th session)</p></li></ul></li><li><p><strong>Batch Size</strong>: Limited to 20 students (<em>all seats filled now</em>)</p></li><li><p><strong>Recordings</strong>: Full access to session recordings</p></li><li><p><strong>Free access</strong> to future runs of this course</p></li></ul><p><strong>Founding Batch Pricing</strong></p><ul><li><p>Regular Price: $99 (may go up in future runs)</p></li><li><p>Annual/Long-term Subscribers (8+ months): $59 (40% discount)</p></li><li><p>Monthly Subscribers: $74 (25% discount)</p></li></ul><p><strong>Note</strong>: As this is the first batch, I&#8217;m offering higher subscriber discounts than originally planned. Future courses will follow the standard discount structure (30%/20%).</p><h2>Interested? Sign Up</h2><p>As the seats are limited to 20, the registration is on a first-come-first-serve basis. Please submit your details by filling up the following Google form and I will reach out with a payment link to confirm your registration.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://forms.gle/VASEBXtPyUMunHvF7&quot;,&quot;text&quot;:&quot;I'm Interested&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://forms.gle/VASEBXtPyUMunHvF7"><span>I'm Interested</span></a></p><div><hr></div><p>If you are not quite sure why learning assembly is important, let me make a case.</p><h2>Why Learn Assembly in 2025?</h2><p>That&#8217;s a great question to ask. I think the knowhow of assembly programming is even more vital today than it was ten years back. With the arrival of advanced AI models, the exciting opportunities are gravitating towards two extremes:</p><ul><li><p>Research and development of advanced AI models themselves</p></li><li><p>Then, development of the rest of the systems to power the training, and inference of these models.</p></li></ul><p>This latter category is resulting in the creation of new chips, compilers, runtimes, databases, and large scale distributed systems for training/inference and model serving APIs. Even training these models requires low level knowledge of the GPU architecture, e.g. the DeepSeek engineers went below the CUDA layer and worked with the PTX code (which is a lower level instruction set that CUDA abstracts) to train their latest model.</p><h2>But No One Writes Assembly? </h2><p>Yes, most likely you will not have to write assembly by hand. But you still need to think at that level for several reasons:</p><ul><li><p>Reason about the memory layout of your objects and their impact on the CPU cache</p></li><li><p>When doing performance optimizations, you will need to look at the compiler generated assembly to see where the bottlenecks are</p></li><li><p>Often when working with existing systems, they already have many optimizations in place. To understand those codebases you need a handle on assembly and CPU microarchitecture details.</p></li><li><p>You want to write a compiler? First you need to know how to write programs in assembly before you can write a compiler to automate the generation of assembly code. You will appreciate your high level languages even more after this.</p></li></ul><p>Don&#8217;t take my word for it, even <a href="https://en.wikipedia.org/wiki/George_Hotz">George Hotz</a> says this:</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;a6651974-e440-4d4e-b123-07cf02ee9c86&quot;,&quot;duration&quot;:null}"></div><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://forms.gle/8x91Yg6qJU58Z3Qi7&quot;,&quot;text&quot;:&quot;Sign me up!&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://forms.gle/8x91Yg6qJU58Z3Qi7"><span>Sign me up!</span></a></p><div><hr></div><h2>Frequently Asked Questions</h2><p><strong>Q: What level of experience do I need?</strong></p><p>A: While familiarity with a systems language such as C/C++/Rust etc is useful but not required. The most important requirement is that you should really be comfortable writing production quality code in a language of your choice. </p><p><strong>Q: I can&#8217;t attend all sessions live. Will recordings be available?</strong></p><p>A: Yes, recordings will be available. However, we strongly recommend attending live sessions as the hands-on exercises and peer programming are crucial parts of the learning experience.</p><p><strong>Q: How much time should I allocate outside the sessions?</strong></p><p>A: Plan for 2-3 hours between sessions to review materials and practice concepts. The more you practice, the more you&#8217;ll benefit from the course.</p><p><strong>Q: Will we be writing a lot of assembly code by hand?</strong></p><p>A: Yes! This is a hands-on course. While in real life you rarely write assembly by hand, writing it is the best way to understand it. This knowledge will help you read and understand compiler-generated assembly.</p><p><strong>Q: I use Windows/MacOS. Can I take this course?</strong></p><p>A: Yes, but you&#8217;ll need to set up a Linux environment (either dual-boot or VM). We&#8217;ll provide setup instructions before the course begins.</p><p><strong>Q: What happens if I miss a session?</strong></p><p>A: While you can catch up using recordings, we recommend attending all sessions live due to the interactive nature of the course. You&#8217;ll have access to future iterations of the course if you need to revisit topics.</p><p><strong>Q: Will this help me with my day job?</strong></p><p>A: If you work in systems programming, performance optimization, debugging, or are interested in compiler development, absolutely! Even if you don&#8217;t, understanding assembly deepens your programming knowledge and helps make better architectural decisions.</p><p><strong>Q: Do you offer refunds?</strong></p><p>A: The syllabus and the learning outcomes are provided above. If after attending the planned sessions and doing the activities, you feel the course did not deliver on those, I will be happy to give you a 100% refund.</p><p><strong>Q: I Paid for the course but something came up and I cannot attend the sessions</strong></p><p>A: Don&#8217;t worry. You can attend any future version of this course free of cost.</p><p><strong>Q: What will be the timings of the sessions?</strong></p><p>A: I&#8217;ve yet to decide. But because I&#8217;m based in India (UTC + 5:30), it will most likely be my morning time (e.g. 8 am to 11 am) or night time (10 pm to 1 pm).</p><p>If you have any other questions, feel free to reach out to me!</p><p></p><p></p>]]></content:encoded></item></channel></rss>