It took me 4 years to get to a point where I could understand C language enough to be able to give meaningful review comments, propose design changes, and independently work on a project. I was finally of some use to my team...

C Pointers had blocked all the progress!

Please learn it as soon as possible. It enables impactful contributions!

I had learned everything else in the meantime but the concept of pointers was always in the way. Making me doubt myself and fracturing my self-esteem over and over, again and again! There was always something about it that I did not know, which killed my confidence!

☠️
function pointers were so confusing at first. It took me an additional two years to nail it. And by nail it, I mean - me being able to reason about it at the machine level!

I studied everything slowly over the years. Did not have any senior with whom I could sit down, be vulnerable, and learn it in depth. No mentor. No nothing!

🫂
I know how it is to be a lost soul in the land of lower-level programming! Scrolling up and down the source code and not being able to understand a thing. I hated it!

But, the love for embedded kept me going.

Interviewing at other companies was so difficult, I faced so many rejections! Everything would go great and then there would be one or the other thing about how pointers worked that made the interviewer rate me negatively. This went on to the point, I felt I should try something else... And, thanks to my Electrical Engineering background, and the lack of programming skills, trying pure software was not possible at all! I felt stuck!! IT SUCKED!

To my surprise, once I nailed the function pointers (by spending countless days searching the details on the internet), things started to change very rapidly. I could add meaningful review comments and guide my juniors. I was trusted with opportunities (more than I could handle) to have more impact by contributing to the `C` based source code.

Looking back, had I known how C pointers worked, I would have saved 4 years and progressed up the ladder, faster. Not to mention - saved my self-esteem!

Just so you too don't let pointers cripple your career growth, we decided to sit down and design a course on just the C Pointers! Everything about pointers that -

  1. Enabled me to review code meaningfully.
  2. Empowered me - to not sneak away from complex debug sessions.
  3. Not just question, but debate with my seniors (challenge the status quo).
  4. Defend my code and design.
  5. Empowered me to help a fellow Junior engineer.
  6. Enabled me to mentor others.
  7. Relaxed me when dealing with an anxiety-inducing unresolved "pointer" related bug.
  8. Become, the teammate who could accurately report in the status meetings.
  9. To become a dependable teammate!
  10. Made me the GOTO for C language in my clan!
  11. Made me a Tech-lead!

I've poured my heart and soul into making this course as useful for you as possible. Not knowing pointers sapped my confidence! You don't have to go through that feeling of being useless...

Enable your career growth!

don't experiment with your career!

Learn the C pointer secrets!

I explain my career progression and more about the course in the video below

my career progression and how critical knowing pointers was!

Teaching juniors

The horrible feeling of being that on-looker (and almost a useless on-looker) on the side while seniors were having a discussion or a whiteboard session on design faded away! Everything started to make sense.

💡
C is the easiest language! Only 32 keywords, and represent the machine most accurately!

Trust me, there is just a way to look at the code. Everything unlocked obviously - after I understood the significance of C pointers!

I have since then (after nailing C and C pointers) had the wonderful opportunity to guide and mentor many juniors, directly or indirectly (they were on a different sibling team and would reach out to me) I have mentored more than 45 college graduates and early career engineers. I exactly know what one needs to know to be able to nail the C language and especially pointers to punch at the level of a senior engineer! I've witnessed each one of them rise up the ladder very quickly, many of whom I continue to work with even today. All of it just proved how critical understanding C pointers are!

One of the key differences between a novice and a seasoned embedded software or systems engineer is their understanding of pointers in C and the ability to use them in software design. Aspiring engineers often find their career growth limited due to a lack of intuitive understanding of how C pointers work. Embedded and operating system code (like Linux... more on this below!) rely heavily on pointers, making it impossible to avoid them altogether.

We designed this course to cover the topics that usual C courses don't! This course will equip you to think and use pointers like a highly experienced senior/staff engineer within approximately 6 hours. You'll learn to visualize, think, reason, and design using pointers like the experts. I wish someone had created this course when I was starting. It could have saved me four years of struggle with pointers.

Course Contents!

We have been constantly getting requests through different channels to create a course that specifically provides clarity on the concepts of C pointers! Everything else in the C language is easy to learn and pretty much can be learned by following tutorials and videos.

Pointers are a different ball game! You need to understand some internals of the system and have to discover the way to image and think about them, the course is structured as follows:

Mental Models, Motivation, and Reasoning about pointers (7 lectures | 26 mins)

  • What to Imagine? (8:40)
  • Assignment - 1 
  • IMPORTANT: Checking results of the assignments (Resources (2) | 2:11)
  • What is a pointer? (7:00)
  • Assignment - 2 
  • Why pointers? (8:25)
  • Assignment - 3 

Pointers: Syntax and Code (7 lectures | 25 mins)

  • Environment Setup (5:47)
  • Declaring/Defining a Pointer (9:51)
  • Assignment - 4 
  • Pointer Variable and Address (1:32)
  • * and & in relation to pointer variable (4:17)
  • Declaration and Definition (4:02)
  • Assignment - 5 

Multi-level Pointers (12 lectures | 1 hr 23 mins)

  • Use of `*` and & (Resources (1) | 23:38)
  • Assignment - 6 
  • Array and Pointers - Similarity and Differences (Resources (1) | 20:42)
  • Assignment - 7 
  • Many *s and Many &s (Resources (1) | 4:39)
  • Assignment - 8 
  • pointer to pointer (Resources (1) | 13:05)
  • Assignment - 9 
  • Array of pointers (Resources (1) | 13:05)
  • Assignment - 10 
  • Different types of Pointers (7:51)
  • Assignment - 11 

Pointer to Data (7 lectures | 40 mins)

  • Pointing to data with a Datatype (Resources (1) | 7:08)
  • Assignment - 12 
  • Pointer to a struct, *, . and -> (Resources (1) | 12:28)
  • Assignment - 13 
  • Pointer Arithmetic (Resources (1) | 16:37)
  • Memory model and pointer to data (4:27)
  • Assignment - 14 

Pointer to code - Function pointers or Callback (7 lectures | 39 mins)

  • What is a function pointer? (11:57)
  • function pointers syntax (Resources (1) | 10:46)
  • Assignment - 15 
  • typedef and function pointers (Resources (1) | 9:44)
  • Assignment - 16 
  • Example - function pointer array (Resources (1) | 6:44)
  • Assignment - 17

Void Pointer (5 lectures | 39 mins)

Pointers, Dynamic allocation, and problems (11 lectures | 52 mins)

  • heap: malloc() and free() (Resources (1) | 13:19)
  • Allocation failure (Resources (1) | 13:44)
  • Assignment - 20 
  • Memory Leak (1:21)
  • Assignment - 21 
  • Dangling Pointer (6:00)
  • Assignment - 22 
  • Double free() (10:09)
  • Assignment - 23 
  • pointer manipulation and unowned memory (7:29)
  • Assignment - 24 

Open Source code and Pointers (3 lectures | 17 mins)

  • Baremetal Code (9:04)
  • FreeRTOS (5:42)
  • Linux (2:54)

8 sections | 59 lectures | ~5.5hrs

Don't make the mistake of impeding your own progress!

Learn the C pointer secrets!

void pointers , Linux kernel, and displaying pictures on screen!

`void` pointers are heavily used in the Linux source code. The video below is from the course. The scenario we try to wrap our head around is that of - taking a picture from a 4k camera, running image processing as part of a user application, modifying, and displaying it on the 1080p screen!

The video explains the setup and how the void pointers help -

Section 6: void pointers in - Linux source code (14:44)

If you loved the example above, you'll love the build-up to this and the bliss and freedom of knowing C pointers! This video is from the 6th Section!

Screenshots from the Course

Here are some screenshots from the course material. You'll notice how each topic builds on top of another until towards the end - we are diving into the open-source C code to look for how extensively pointers are used!

I am convinced that the insights you will learn will make you a very sound Embedded/Systems engineer!

Discount

While, there is a 25% (for the existing inpyjama members) discount coupon at the top of the email version of this post (inpyjama mailing list). If you did/could not avail it before 10th March 2024, no worries!

See if the 15% discount coupon below works! Join the community! 🙃

NEWINPYJAMA15

Hope you enjoy the course as much as we loved making it!