<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/i-taught-myself-c-by-rejecting-modern-tech-u1xioawwe" -->

---
title: I Taught Myself C By Rejecting Modern Tech | daily.dev
description: A self-taught programmer shares their journey learning C by deliberately imposing retro constraints — buying a vintage IBM 386 PC, running MS-DOS 5.0, and...
canonical: https://daily.dev/posts/i-taught-myself-c-by-rejecting-modern-tech-u1xioawwe
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: I Taught Myself C By Rejecting Modern Tech | daily.dev
og:description: A self-taught programmer shares their journey learning C by deliberately imposing retro constraints — buying a vintage IBM 386 PC, running MS-DOS 5.0, and...
og:url: https://daily.dev/posts/i-taught-myself-c-by-rejecting-modern-tech-u1xioawwe
og:image: https://api.daily.dev/og/posts/U1xIOAwWe.png
og:image:alt: I Taught Myself C By Rejecting Modern Tech
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# I Taught Myself C By Rejecting Modern Tech

**[YouTube](https://daily.dev/sources/youtube)** · 18 min read · 2 upvotes · 0 comments

## Summary

A self-taught programmer shares their journey learning C by deliberately imposing retro constraints — buying a vintage IBM 386 PC, running MS-DOS 5.0, and using Borland Turbo C instead of modern tools. After spending 2.5 months reading seven C books without writing a single line of code, they built 'Grit', a custom text editor in C featuring per-line horizontal scrolling, dynamic memory allocation with malloc, jagged arrays for text storage, and real-time keyboard input via conio.h. The post details the program's architecture including structs for file and screen data, buffer-based editing with execution flags, and nested switch statements for input handling. Known limitations include screen flickering due to conio.h system interrupts rather than direct video memory writes — a gap the author plans to fix by learning x86 assembly next.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://www.youtube.com/watch?v=I7CeqmFiWYY>

## Questions this post answers

### What is a jagged array and why use it for storing text lines in a C text editor?

A jagged array stores each line of text as a dynamically sized allocation rather than a fixed two-dimensional array, avoiding wasted space when lines vary in length. The technique allocates a large buffer first, fills it with a line of text, then uses malloc to allocate only the exact space that line needs in the main storage array.

_daily.dev surfaces deep dives like this for developers exploring low-level memory management in C._

### Why does conio.h cause screen flickering in a DOS text editor written in C?

Functions like gotoxy from conio.h cause flicker because they rely on system interrupts to move the cursor and update the screen. Older programmers avoided this by writing data directly to video adapter memory instead, bypassing interrupt-based display functions entirely for smoother rendering.

_Track low-level graphics and systems programming techniques like this on daily.dev._

### What causes a segmentation fault on old DOS machines with a segmented memory model?

A segmentation fault occurs when a program improperly accesses or corrupts memory outside what its own segment was allocated. Under the segmented memory model used on machines like an Intel 386 running MS-DOS, each program received its own memory segment and could only safely work within that boundary.

_daily.dev helps developers dig into memory management fundamentals like segmentation faults._

## Similar posts on daily.dev

- [Reject Modernity, Return To 80s, Learn C.](https://daily.dev/posts/reject-modernity-return-to-80s-learn-c--isjpcqmcw) · Hackaday · 1 upvotes · 0 comments
- [Diving into Retro Computing with the Amstrad PCW 8256](https://daily.dev/posts/diving-into-retro-computing-with-the-amstrad-pcw-8256-yksnkio8j) · Scott Logic · 0 upvotes · 0 comments
- [A desktop made for one](https://daily.dev/posts/a-desktop-made-for-one-a0rezjpzu) · Hacker News · 124 upvotes · 4 comments

---

Tags: [#c](https://daily.dev/tags/c)

[View this post on daily.dev](https://daily.dev/posts/i-taught-myself-c-by-rejecting-modern-tech-u1xioawwe)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"I Taught Myself C By Rejecting Modern Tech","url":"https://daily.dev/posts/i-taught-myself-c-by-rejecting-modern-tech-u1xioawwe","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/i-taught-myself-c-by-rejecting-modern-tech-u1xioawwe"},"datePublished":"2026-07-13T16:51:01.117Z","dateModified":"2026-09-14T06:25:14.621Z","description":"A self-taught programmer shares their journey learning C by deliberately imposing retro constraints — buying a vintage IBM 386 PC, running MS-DOS 5.0, and...","image":"https://i.ytimg.com/vi/I7CeqmFiWYY/sddefault.jpg","thumbnailUrl":"https://i.ytimg.com/vi/I7CeqmFiWYY/sddefault.jpg","isAccessibleForFree":true,"articleSection":"YouTube","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"YouTube","logo":"https://media.daily.dev/image/upload/s--W5zMumpP--/f_auto/v1725350181/logos/youtube","url":"https://daily.dev/sources/youtube"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/i-taught-myself-c-by-rejecting-modern-tech-u1xioawwe","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":2},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"c","timeRequired":"PT18M","video":{"@type":"VideoObject","name":"I Taught Myself C By Rejecting Modern Tech","description":"A self-taught programmer shares their journey learning C by deliberately imposing retro constraints — buying a vintage IBM 386 PC, running MS-DOS 5.0, and...","thumbnailUrl":"https://i.ytimg.com/vi/I7CeqmFiWYY/sddefault.jpg","uploadDate":"2026-07-13T16:51:01.117Z","duration":"PT18M","url":"https://api.daily.dev/r/U1xIOAwWe","embedUrl":"https://www.youtube.com/embed/I7CeqmFiWYY"}}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"YouTube","item":"https://daily.dev/sources/youtube"},{"@type":"ListItem","position":3,"name":"I Taught Myself C By Rejecting Modern Tech"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/i-taught-myself-c-by-rejecting-modern-tech-u1xioawwe#faq","mainEntity":[{"@type":"Question","name":"What is a jagged array and why use it for storing text lines in a C text editor?","acceptedAnswer":{"@type":"Answer","text":"A jagged array stores each line of text as a dynamically sized allocation rather than a fixed two-dimensional array, avoiding wasted space when lines vary in length. The technique allocates a large buffer first, fills it with a line of text, then uses malloc to allocate only the exact space that line needs in the main storage array. daily.dev surfaces deep dives like this for developers exploring low-level memory management in C."}},{"@type":"Question","name":"Why does conio.h cause screen flickering in a DOS text editor written in C?","acceptedAnswer":{"@type":"Answer","text":"Functions like gotoxy from conio.h cause flicker because they rely on system interrupts to move the cursor and update the screen. Older programmers avoided this by writing data directly to video adapter memory instead, bypassing interrupt-based display functions entirely for smoother rendering. Track low-level graphics and systems programming techniques like this on daily.dev."}},{"@type":"Question","name":"What causes a segmentation fault on old DOS machines with a segmented memory model?","acceptedAnswer":{"@type":"Answer","text":"A segmentation fault occurs when a program improperly accesses or corrupts memory outside what its own segment was allocated. Under the segmented memory model used on machines like an Intel 386 running MS-DOS, each program received its own memory segment and could only safely work within that boundary. daily.dev helps developers dig into memory management fundamentals like segmentation faults."}}]}
```

