The Most Famous Computer Programming Book In The World
Vložit
- čas přidán 9. 09. 2024
- In this video I will show you what is considered by many people to be the most famous computer programming book in the entire world. The book was written by Brian Kernighan and Dennis Ritchie and it is titled The C Programming Language.
The C Programming Language: amzn.to/3TGr3jo
Problem Solving and Programming Design in C: amzn.to/3W3q5iR
Steve Summit's book: amzn.to/3FkT246
(these are my affiliate links)
Steve Summit's home page: www.eskimo.com...
If you enjoyed this video please consider liking, sharing, and subscribing.
Udemy Courses Via My Website: mathsorcerer.com
Free Homework Help : mathsorcererfo...
My FaceBook Page: / themathsorcerer
There are several ways that you can help support my channel:)
Consider becoming a member of the channel: / @themathsorcerer
My GoFundMe Page: www.gofundme.c...
My Patreon Page: / themathsorcerer
Donate via PayPal: paypal.com/don...
***********Udemy Courses(Please Use These Links If You Sign Up!)************
Abstract Algebra Course
www.udemy.com/...
Advanced Calculus Course
www.udemy.com/...
Calculus 1 Course
www.udemy.com/...
Calculus 2 Course
www.udemy.com/...
Calculus 3 Course
www.udemy.com/...
Calculus 1 Lectures with Assignments and a Final Exam
www.udemy.com/...
Calculus Integration Insanity
www.udemy.com/...
Differential Equations Course
www.udemy.com/...
Differential Equations Lectures Course (Includes Assignments + Final Exam)
www.udemy.com/...
College Algebra Course
www.udemy.com/...
How to Write Proofs with Sets Course
www.udemy.com/...
How to Write Proofs with Functions Course
www.udemy.com/...
Trigonometry 1 Course
www.udemy.com/...
Trigonometry 2 Course
www.udemy.com/...
Statistics with StatCrunch Course
www.udemy.com/...
Math Graduate Programs, Applying, Advice, Motivation
www.udemy.com/...
Daily Devotionals for Motivation with The Math Sorcerer
www.udemy.com/...
Thank you:)
I was born in 1965. When I was 5 years old (in 1970) my mother was in hospital giving birth to my sister. My father took me to work with him for the week (he worked in a bank) and he sat me in the computer room (a very cold room, with a huge mainframe) and asked the programmers to look after me.
They had huge stacks of punched cards containing the software they wrote, and one of the programmers was very kind and let me punch holes on spare cards just for fun. I still remember his name: John Moore. He took my cards and fed them into the computer, and told me that my cards had a mistake on them, and the job of a programmer like him was to find mistakes and fix them.
It was so fascinating for me at five years old that I became obsessed with computers and with programming. So much so, that I went on to get a degree, a masters, and a PhD in computer science, worked as programmer for many years, and eventually ran my own software company, before selling it and retiring early. I often think back to those days spent with John Moore and how they very definitely shaped my life, and my career in programming.
wow
That’s a prime example of the butterfly effect.
I was born in 1963 and my father also used to work for a bank. He used to work Saturday mornings and sometimes took me into work. He showed me the IBM mainframe in the computer room. It looked like science fiction. The punch room where there punch girls worked. One of the rooms in which the programmers worked with a white board covered in flowcharts. I thought these programmers must be super intelligent to understand this and determined that one day I would be able to.
Your story is inspiring.it inspires me a lot.
When I was young I went to work in an office which had some very beautiful women. I learned that to be successful you needed to not tell anyone that you had been with someone in the office :-)
I focused on pleasure and respect and love.
I did not spend much time fiddling with machines.
I don't have a lot of money but I've had some wonderful lovers, and I'm still popular.
We each walk our own path.
I went through about 85% of the problems when I was 17, and it gave me so much independence as a programmer. This was a huge relief after 7 years of failing at programming.
Wow, thank you for sharing this:)
Wow Jesus changed his name to 'george allen'
You were programming since 10???????????
@@mayosmayo4738 Very poorly but trying my best. I only got the first page of a c++ tutorial copied line by line, and I don't remember it working as the book said it should. When my dad typed it out, it did work for him, but he said the book was not written very well and we both stopped.
Then at 11, I did some small micro-controller projects with LEDs. Very fun and simple stuff for a kid, but I was never at a place cognitively to handle real C++. I just didn't have the resources or focus. I tried to create a zork like game with only nested if statements because I didn't understand game loops yet. You could quickly see how that would get exponentially unmanageable without loops LOL. I gave up on micro-controllers because I could not get a distance sensor to work that I paid like $20-30 for. In hindsight this was probably because I bought the cheapest wires/breadboards and it can quickly grow frustrating putting even simple circuits together. I didn't even have a mr hands for soldering. As a kid that kind of money is a lot. This was during a time when my family was just getting past the financial crash in like 08/09.
@@georgeallen7487bruh ain't now way go play outside.
I learned C exclusively from the K&R book many decades ago. It is the best computer language reference book: clear, concise and complete.
Wow that is awesome. Thank you so much for sharing!!
I stand with Russia
Not many decades in my personal case, but it was my very first programming textbook. You don’t need a special beginner’s book, the Kernighan / Ritchie is enough to be your first master textbook in C.
I don’t stand with nns of kiev regime
@@sitting_nut thanks fed
I was working as a professional programmer before encountering C and UNIX (yes, I"m now old and retired). This book - and several others - lived on my nightstand and in my briefcase while I self-instructed into working-level competency. More than 30 years ago.
I learned C++ in highschool (C in college) when I was 15 years old, my teacher, to which I owe my programming career, was a very very good teacher. The way she explained everything so clearly, I actually understood everything from class and didn't need to study at home, I was just programming at home with the knowledge I had from class directly. Mrs Popescu S., if you are reading this, thank you!
Just so you know saying god bless her like that is an insult.
@@Anon.G how so?
@@southpaw9393 it's used when people do something dumb or rude.
@@Anon.G oh, didn't know that, thanks for the head's up, I corrected it!
@@southpaw9393 yeah no problem, we all knew what you meant.
I learned C programming language with this book 35 years ago, first edition. I still have it here in a very decent condition. I take care of it like a baby.
C enabled us to have the computing world as we know it today. It lies below everything we use today, from cell phones (the kernel) to servers, to switches, and everything in between. It is the first programming language I learned, and I still use it regularly today.
After graduating from the University of Liverpool with a degree in Computer Science it occured to me that I had never read a page of this book despite the fact it is considered the bible of the C programming language and the language itself is arguarbly the bridge between assembly and high-level languages such as C++, Java Python ect. I found a dusty first edition copy in the archived, still held together by cellotape, and read it front to back in a single day. Amazing book - if you can find the time to read it you will not regret!
P.S. such a fan of your channel and Udemy course on Group Theory!
Wow thank you so much for sharing this! Making this video brought back A LOT of memories so it's fun to read comments like yours:) Thank you!!!!!
While I agree with almost everything you said, they part about c being the bridge between c++ and assembly kinda stuck a nerve and would be my only issue with your comment.
While yes, without c, c++ would not exist... it's not that c++ was created with c. You are right that modern languages are bridged to assembly with c (or even c++ as a matter of fact, along with other lower level languages), but that does not extend to c++.
C++ was created as an extention of c. To keep everything compatible from c to c++, that meant the c++ language had to be directly written into the c language. C++ is written in whatever language c was written in (likely assembly of some type but I have not looked that deep into how c was written).
Imagine you clone a repository off github and add to the project making it your own (think of how Google made Chrome from the chromium browser). You wouldn't say Google Chrome built their browser using the chromium browser. They built it as an extention. If you remove Google's code, you'll find a fully functional version of the chromium browser underneath.
This is essentially what happened with c and c++. You can imagine the c language repository was cloned and that clone was extended upon to create c++ (this isn't how it actually happened because git wasn't around then, but it gets the idea across).
You read it in a single day? I think that doing the exercises is quite important for truly learning, and I don't see how it's possible for you to have done the exercises in a single day.
@@nollix Since he has a cs degree i'm sure he can already program, I'm sure he read it not because he wanted to know how to program but to get deeper insight to the language and to see why it's a good book.
@@ItsSupercat94 It's not about knowing "how to program", it's about knowing how to program in *C*.
This book has held up so well, it's incredible. Pretty much every book Brian Kernighan has authored/co-authored is absolute gold. I cannot recommend enough the following 3 books of his that pair extraordinarily well with this one, those being: The Practice of Programming (Kernighan & Pike), The Unix Programming Environment (Kernighan & Pike), and The AWK Programming Language (Aho, Kernighan, & Weinberger).
The first of these is an incredibly important book because it covers the kind of programming skills that one typically only learns though (painful) experience alone since it's not typically taught well (or even at all) in school but is definitely required to develop for maturity in the craft.
The second is incredible alone in that a book published in 1984 about using a computer system from > 40 years ago is still completely (well, almost, 90% of it at least) relevant today! That is unheard of for any system outside of UNIX, which drives home the point that they really hit it out of the park over at bell labs back in the day when they designed unix - which brings me to..
The last Kernighan book I'd like to recommend is some light reading about the history of UNIX, which if anyone is unaware of is INCREDIBLY fascinating and often doesn't get the credit it deserves for being the trailblazer it was, do make sure to check out his latest book UNIX: A history and a Memoir. There's an entire section on Doug McIlroy, the ideas man behind unix pipes and the ultimate chad programmer (who makes John Carmack look like a newbie) Anyway, this guy when he wanted to use a high level language in the early pre-c assembly only days of unix, he wrote a compiler in the language of the compiler he was writing, on paper, WITH A PEN EVEN, and fed that logic on paper onto itself and typed in the resulting assembly code to get the compiler up and running!! While legend has it there were no errors at all in the process, according to Ken Thompson there were some but shockingly few and he went on to cite this boot strapping process as the greatest feat of programming he has ever witnessed in his life
EDIT: Wanted to add the above story about McIlroy I don't recall it making it into the UNIX history book but it was mentioned in a talk at 2019 Vintage Computer Festival East w/both Kernighan and Thompson, which the book does make note of as being up on youtube and provides a direct link to in the text
tbh one of the biggest reasons its held up so well is because the language has barely changed, which is both good and bad.
I first learned to program using "Illustrating BASIC" by Donald Alcock, which I still have. I think I was about 13 or 14 years old back in 1978/79 and I completely devoured it. I learned all of the fundamentals of variables, loops, conditions, boolean logic etc from that amazing book. My copy of K&R is the second edition (1988) that I bought in 1991. I still use it as a reference to this day. I think most people use Stack Overflow these days!
thank you for sharing!
@@TheMathSorcerer 😀 Hmm, just had a look through my somewhat battered copy of Alcock. It doesn't have boolean logic explained in it. I must have learned that in the Computer Studies exam course I did at high school.
When I was learning in the early 1980's PASCAL was the language of choice. My first ever special order book was Niklaus Wirth's, "Algorithms + Data Structures = Programs". I've read it several times and it taught me a lot. When I learned C in the late 80's, K&R was the book I studied 1 summer while being an under-utilized intern. Both are still on my shelf, along with the ANSI update to K&R.
Until very recently, my job was 100% C for the Unix kernel, which is pretty much it's last bastion. Little if any new software is started in C. Go, Rust, Python and more are all preferred these days.
Very interesting! Thank you so much for this comment!!
Nowadays that is a very heated argument. The "programming community" is arguing every day about going either C++, Go, or Rust. What do you recommend the most out of those? I'd love to land my first job coding and I know none of those languages BUT I wouldn't want to take neither the Python, webdev or mobile roads.
@@juanandresnunez658 It is a challenge, for certain. On the one hand, "OO is a failed paradigm" is a growing idea, but C++/C#/Objective C/Java are still huge, especially in enterprise vertical applications. On the other hand, Kubernetes, Docker, and cloud infrastructure really run on python.
The good news is that almost all of these languages share similar syntax and structure with plain C. They are all part of the same syntactical family tree, as opposed to say, Lisp, Fortran, Pascal/Oberon, etc. They will all add a few new wrinkles and concepts, but the basics are all very similar.
My suggestion would be to look at some examples and tackle the one that suits your fancy first. Maybe pick an example program and write it in each new language to see the differences. Try basic I/O, networking, and threading, which are concepts on top of the language model.
As you grow as a programmer you will start to collect languages out of necessity . Some you may not even think about as languages: sh, sed, awk, perl, tcl, lua, etc. Even make is a language that requires a very different way of thinking.
Sorry for the wall of text. I hope you find something helpful in here.
@@juanandresnunez658 I was just like you when I started my CS journey. Fell in love with C language and it's uses. You can apply it on embedded systems / IoT and signal processing if that's your thing! And of course game dev if you REALLY are crazy in the head like me. Good luck!
@@juanandresnunez658 language means nothing compared to your interests. First figure out what you want to do, then the language to use will become more clear.
Take web development for example. Front end web development locks you into html, css and javascript. The backend give you more freedom, to a degree, but your still very limited. You'll be looking at javascript, Java, c# or python (others exist yes but these are by far the most popular).
If you want game development, then your going to have to learn c++ or c#, with a huge preference towards c++.
If you want to work on embedded systems, then your looking at c or c++. The same goes with operating systems, although those jobs are geared more towards c.
Learning a language for the sake of it does you no good at all. First figure out your interest then figure out what tools you need to achieve those goals. Programming languages are just a different type of tool, and every tool has its use cases.
While yes, any programming language can do just about anything, that doesn't mean it should be used in such a way. They are all better suited for different jobs.
I also recommend ignoring obscured languages like rust unless you specifically want to work at Google. Go is a little more widely used compared to rust, but again it's a Google product. Very few companies are likely currently using it outside of google (yes startups exist but thats like playing Russian roulette with your career. Startups fail far more then they succeed).
My introduction to C pointers was more or less jumping into the deep end. A college class called "Data Structures" used a fun book called "Data Structures Using C." Everything in that book used pointers, so you had to learn fast. Luckily I did, and it has been pretty useful at times.
Could it have been Van Wyk's "Data Structures and C Programs?"
I remember having a bunch of copied pages from a draft of that book stapled together when I first was learning C in the mid 70s. I was glad when the printed version became available.
lol, im in software engineering at my university second semester ever doing computer science anything. We're learning C right now and it kind of blew my mind how integral C is to every modern language and still plays critical roles in the foundational structures of operating systems
That book was always on my desk in my early C programming days. It's still on my bookshelf, though it's been years (decades) since I've done more than look at it and smile. Herbert Schildt's books were also super useful for C/C++. They taught me a lot.
For anyone who enjoyed the style of this book, I would recommend Kernighan’s more recent book, “The Go Programming Language.” It retains the same thread of showing the reader interesting and practical examples, rather than fluff to demonstrate the language. In many ways, Go is the natural successor to C (it was co-designed by Ken Thompson, the father of the Unix operating system, for whom Dennis Ritchie essentially designed C), though its garbage collector makes it impractical for some things C is particularly fit for.
cool didnt know he wrote another book !
Go is not the natural successor to C.
@@sotam8938 Go's first compiler was literally written by Ken Thompson, who created the B language, for which C was the direct successor. Ken Thompson and Dennis Ritchie sat next to each other while Ritchie was writing C; C was made because Thompson was writing Unix and needed a better language than B. I don't know how you can get closer to it being a natural successor ;) (BTW, if you read Thompson's opinions about C++, it's quite clear that he doesn't think C++ is C's successor.)
so youre a google shill
Rust seems to be the most logical successor to C. The Linux kernel is starting to accept code written in Rust as an alternative to C.
I remember this blog post from the Discord folks some months back. They had been using Go for their backend code, and they did some benchmarks with Rust, and found it offered much better performance. So they are switching their Go code to Rust.
I read 'C How To Program' at technical college. Learning how to incorporate & program the next generation of integrated circuits into my electronic projects👨🎓
My favourite book is “Memory as a Programming Concept in C and C++” by Frantisek Franck. The chapter on multidimensional arrays was very helpful for understanding pointers to pointers. I found the author’s style very enjoyable and informative.
C is a good foundational language to learn from the start. Many other programming languages are loosely based upon C syntax and structure, such as Java and Python, and MEL for Maya.
Pointers are an arcane concept at first, but once you get them it opens up a whole new world of possibilities, and they are important for understanding memory management.
I started programming learning Basic on a Timex/Sinclair. Then many years later that helped me to learn a scripting language for 3d graphics that used C syntax, and that helped me get a feel for C before I ever looked at it. Eventually I decided I wanted to get more serious about programming so I bought a C textbook by K.N.King, which was very good. That helped me with a lot of the concepts for delving into Objective C, and programming on Apple devices. Most people seem to want to learn programming to create games, and I discovered a great programming exercise was to write a text based version of 4 popular games : Hangman, Mastermind, Minesweeper, and Battleship - all with a graphical style output in a text console. Good luck!
Yes! I still have My original copy from uni 😁. This book is a classic. It contains everything that makes C unique and the fact that it is contained in such a relatively slim volume is testament to the beauty of its conciseness. Pointers are fundamental and to C and are its power. Master this, and you know C. It's an extremely expressive general purpose language and it can do in a line or two where other languages might take a dozen. It's sometimes been likened to a high level assembly language, but therein lies it's danger, it doesnt contain the modern protections ( such as ensuring your program isn't illegally accessing memory outside of an array bounds ) that stop an inexperienced programmer from crashing their program. As such, it compiles down to such efficient machine language that it allowed the UNIX operating system to be developed entirely in C, save for a tiny kernel that is specific to the machine it'd be running on. In fact that was why C was created, as a systems programming language for writing operating systems and compilers that need to be fast. C is also highly modular, it wastes no resources, if you need to print the results of a calculation to the screen or dump it in a file, you have to include libraries to do it. C is the syntactic precursor to many modern languages, C++, C#, Python, Java, etc. A word of warning to those wanting to learn C, this book is just a core fundamentals survey of the C programming language by its creators, it gives you the flavour of C. It will not teach you how to be a good programmer or give you a necessary understanding of those other very important aspects of programming; data structures and algorithms. Unlike other modern high level programming languages, it makes no concession to the modern ( and often castigated ) object oriented paradigm, it won't nanny you, restrict you or hold your hand. It's fundamental and raw and thats why I love it...! 😁
This book is written in "AT&T" style. There are NO spare words. Every byte is necessary for understanding.
We don't need no stinking C++.
Another light read is the Knuth Fundamental Algorithms series.
Yes brings back memories for me. I also used the Kernighan and Richie book to program in C in the 1980s. I think I still have it. The first book I used to learn programming at university though was called "Pascal For Students" by R Kemp. We needed to learn programming for the Numerical Analysis and Numerical Linear Algebra courses. After university I learned COBOL and IBM Assembler for work. Python seems to be the current most popular language.
Good old memory. This book is still in my book case ever since.
OLD SCHOOL!! YES!!
"A Book on C" ~ Al Kelley & Ira Pohl is another classic.
Took my first computer course at UCLA Summer School the summer of 1966, after I graduated high school and before I started at M.I.T. 7094 Macro Assembly Language. I majored in math but I took a few computer courses at M.I.T., including a short computer graphics course making movies on a Stromberg-Carlson 4020 in January, 1971.
By 1976 I was in my 3rd graduate school in math, but took one really useful course in programming called something like "A Survey of Programming Languages" where we studied how programming languages (compilers, interpreters, etc.) were designed and implemented. The object of the course was to get us comfortable jumping into programming in any language. We did projects in Pascal, Snobol, and APL. One of the most useful courses I ever took. Around that time I discovered Kernighan and Plauger's book Software Tools, which was a gentle introduction to building basic Unix-like utilities and a C-like language in Fortran. I amused myself by writing programs in APL to print out the Adem Relations.
In 1978 I got my first computer, a Technical Design Labs Xitan S100 Z80 machine. The S100 bus was not all that standard, so inevitably I ended up cutting traces and soldering jumpers to get my RAM and CPU cards from different manufacturers to play together and doing a lot of Z80 assembly language BIOS programming and burning of EPROMs to add a floppy disk controller. By 1980 I was making more money doing the odd contract programming building embedded systems and such than I was making as a teaching assistant and continuing education instructor in the math department. I amused myself by writing programs in SAM76 (a derivative of Calvin Mooers's TRAC language) to print out the Adem Relations.
Around 1981 or so I began playing around with BDS C on my Z80. About then was when I picked up K & R. C was probably about my 20th language by that time. In 1982 I started helping a friend of mine from the math department build S100 68000 Unix computers with sophisticated graphics. In mid-1983 he started a company and I dropped out of the Ph.D. program in math to go over to the dark side and officially become a software engineer as the first employee of his company. We built graphics arts and medical imaging workstations on S100 68000, and later VME 68020, machines running Unix. We programmed almost exclusively in C. I did most of the low-level libraries we used for direct access to the frame buffer memory, supplying basic graphic primitives. I also designed and built our multi-screen medical imaging workstations that were used for the offline review of MRI and CT images. This was pre-Windows, in fact pre-X-Windows, so we had to roll our own GUIs.
The main rule to be observed in those days in C was never to use primitive C types (int, char, etc.) in any applications you wanted to be portable. The primitive types were not standard across different implementations of C. Programming in C was similar to programming the Knuth's MIX computer, where you didn't know exactly how many bits were in a word. The trick was simply to include a standard header file tailored for the version of C you were running that did implement a standard set of types.
The other thing about C is that it is actually a very low level language. You have to know how to design and build programs from the ground up. You need to and how to instantiate variables and manage memory. The compiler is not going to help you. That's the bit that makes it no so suitable for beginners. There's nothing to stop you from making a mess very quickly. ("while fork();", I'm thinking of you.)
Anyway, that company went belly up in 1987. But I made a living doing mainly Unix / C programming for the next 10 years or so. About 5 years at Allen-Bradley supporting a development group with tools, processes, and software release procedures. Then on to consulting through a local company that was bought by Compuware in 1996 to become their Cleveland Professional Services Division. After 1996 my consulting gigs were more heavily into database programming, with occasional lapses into maintaining some legacy C++ factory automation applications.
I retired on my 66th birthday in 2014. So I program only to support whatever projects interest me now. But I'll still use whatever language I need to get the job done.
Enjoy the mental "purge" when you really retire and flush all that programming 'stress' from your life - just before DEMENTIA sets in.
Much respect🎉
They used the book to teach C in Moscow Institute of Physics and Technology in 2005-2011. That probably at least partially explains how I've ended up being a Solution Architect while holding a master degree in applied math and physics :)
МФТИ?
@@UshankaMaster ага! Коси и забивай :)
Also the best. It's short but explains everything the language has to offer with proper code examples.
I learned QBasic in '99 in high school, did nothing with programming for years, then through a series of weird events, I ended up in the NSA doing linguistics. My job was mind-numbingly repetitive so I learned how to code in VBA (the architecture underlying Excel, Word, PowerPoint, etc). Fast forward some years, I was doing graphic design work at a small arts & entertainment publication. I noticed Adobe InDesign (as well as Photoshop) had a coding section. I rolled up my sleeves, learned Vanilla JS and AppleScript then automated the majority of my job. Fast forward some more years... I'm a senior software engineer trying to make an integrated circuit in my kitchen 😅
I learned a lot about C 2 months ago when I started programming ESP32s for some fun little projects with the manufacturer environment. For starting out I'd probably say get some experience in with similar but easier languages like Go. Those translate fairly well into C. Using Micro controllers to start out gives a hold in the physical world for your learning journey which helped me a lot, but using something abstracted to hell like the Arduino IDE won't bring you any closer to the language because there is no real Contact to Problems like printing a byte binary data stored in an uint8 in binary to your serial console without a thousand libraries.
Thanks for this video. I used Kris Jamsa's 'Programming in C' book to first learn C language. Our professor used it to taught us an introduction to C language as part of the course Systems Programming II in final semester in 1991. I used Stephen Bourne's 'The UNIX System V Environment' book on my own in that semester as well. That book had a chapter about C language. I used Herbert Schildt's "Teach Yourself C" book later on my own to learn in detail comparatively also.
Yo tengo ese libro. Me lo regalaron. Muy complejo. Pero el mismo libro lo indica: no es para aprender a programar, es para entender el lenguaje C. Gracias maestro
te ayudo entender el C ?
As with some others here, I too learned C exclusively from this book, over a year before I gained access to a machine with a C compiler... which was a PDP 11/23 minicomputer. With those honking big 8" floppies, if I recall correctly. This book was brilliant.
Dennis Ritchie taught me C programming using this book! I was working for the Terminals Business Unit of Digital Equipment Corporation in the early 1980's. We were using assembler language and Bliss to write firmware for DEC terminals and printers but a new project would be written in C. None of us knew C so the company brought Dennis in to teach us a 1-week course.
I learned C from this very book many years ago. C is still the most important language in the world. Most other stuff still runs on top of platforms powered by C.
I learned C from Pascal and C++ before the internet became available for general use, we didn't have it at college.
K&R was it for C, Stroustrup and Lipmann for C++. Books, compiler manuals, and the course notes from my teachers were basically the only thing we had. Plus for the first semester 5 minutes of CPU time on the mainframe to see if what we came up with actually compiled and ran (yes, this was before PCs were used to teach programming).
OMG! Haven't seen that in YEARS! Brings back great memories of my early programming days. Thanks for this!
I know, the memories!
I own both a first edition of the original book as well as their ANSI C version, edition unknown. I was trained in UNIX at AT&T Bell Labs in Denver. One trick to learn C is to master AWK first because AWK is basically an interpreter version of C. That is how I learned it.
That's funny I am actually reading this book right now. I just finished Chapter 2. The exercises are fun and challenging. From what I understand C is still quite popular, and the amount of programs being written in C even surpasses C++.
My First Programming Language was C. It was so interesting, I never missed C programming class in University. I did get stuck at pointers. But it made a good base to jump into other programming languages.
The book that first introduced me to C back in 1991 was "The Waite Group's Turbo C Programming for the PC" by Robert Lafore, Revised Edition 1990. It covered 16 bit real mode, EGA monitors, binary mode and text mode and a host of topics now considered low level, closer to the hardware level to be clear about it. The book relied on Borland Turbo C 2.0. It runs to almost 700 pages.
The 'beauty' of Borland was its DEBUGGER
As a former TPF Systems Programmer when C support was introduced to TPF in the 80s we all needed to learn C and our employer provided this book for each of us. I would say it is not ideal for a beginner but was concise and pitched about right for a transitioning professional. Certainly a classic.
This is how I learned C back in the late 80's and I still have the book. It was so concise and the examples were perfect to convey the concepts. I learned pointers through this book which is why I feel I never had issues with it - the book did such a great job explaining the concept related to it.
I first learned how to program from the manuals that came with the C64 homecomputer. IIRC these were 2 books, one how to set up the computer in general and the other was a reference book of all the BASIC commands.
I bought my K&R at university because it was considered THE classic even back then. We didn't actually use it in our C course, the professor who gave the course had his own notes that we could buy at his institute for less than the cost of the K&R book and his notes also included other stuff we needed for the course (like how to use the vi editor and how to get around the unix system we used to learn C).
Good times.
This man is so humble, I wouldn't be surprised if he was unaware of how good his self-improvement skills are.
As a retired software engineer who worked mostly with C and C++, I always had the K&R book at my fingertips. My preference for this hard copy made me a relic in this online query dominated world. Thanks Brian and Dennis for publishing this masterpiece.
My first language was Algol68R and I attended a 10-week course doing a lot of examples, and some quite long programs (for example a Monopoly simulation). It was probably the best way imaginable to start programming. Next up (typically) Basic. Then I spent about 18 months writing 6502 assembly routines. And then (1983) I sent off for a C compiler and ordered “The C Programming Language” book. The most expensive book per-page I had ever bought, imported straight from the USA. But I nearly gave up on it after that because I couldn’t get the damn compiler to compile, or the linker to link or my “hello, world” program to run at all. That really was the biggest hurdle. After I saw those magic words “hello, world” on my computer screen, I just never stopped, and I was a C junkie for years!
By the way, my favourite thing in the book is exercise 1-22 which says “Write a program to check a C program for rudimentary syntax errors…” At the end of chapter one!!! I think I finally did that exercise at the end of chapter 4 or 5, but that just blew my mind away, to think that with the information from the introductory chapter you could actually DO that!!
Nowadays C is primarily used for low-level programming such as kernels of operating systems or writing code for microcontrollers. In those domains, C is still the most frequently used programming language because it's incredibly fast and it is better prepared for low-level work with hardware than most other programming languages. But I would say that C is not very popular in other domains anymore.
I would recommend learning C for everyone who wants to become a software developer even if one doesn't plan to use this language professionally because 1) when you know C, you start to much better understand computers due to the low-level nature of C; 2) C is a relatively compact programming language in comparison to such monstrosity as C++, for example, so learning C would not consume so much time and effort as learning C++.
I particularly like "C Primer Plus" by Stephen Prata.
I wish learnt it before starting with C#.
If you know the syntax of c. You know almost all the languages.
I actually go a step further by saying you should first learn assembly. Just create simple things like turning binary into hex, making upper case lower case functions.
So a little graphics programming. And then learn C. I never had a problem with understanding pointers because I came from assembly. All my class mates back in the early 90s tripped over the pointers - that was until the semester afterwards we got Z80 and 8086 assembly. Still believe that order of teaching was dead wrong.
@@arrrryyy I mean, what you learn in C# can help you with C. C pointers, for me, only clicked when i had to use object references in C#.
Ya I started with node which I think is a language. Then go lang but I’m gonna learn c and do a side project with it I agree with your point.
I bought this book about 40 years ago to learn C and remember reading it from cover to cover just like a suspence novel. A really wonderful book!
The examples in the book are so brilliantly clear. It takes skill to solve a problem well with code that looks so simple. I still have my copy. I'm sure there are easier books out there, and I'm all for that, but I would recommend a reading of K&R later on, so you can see how to solve problems with the least unnecessary fuss.
I took an C programming class in college (graduating soon) two years ago and I used my notes and this book for 90% of all issues. I still have mine with me now.
C-ing is believing :) There is something special about these old books, not only the content but layout and typeface too. It is as if writing the book has been so fun that it has been done meticulously, as if you can't find any grammar mistake or typo in it.
Yeah this book bring memories when i studied C for operating systems last year. Was a really good book i miss those days, cuz its so cleary and simply explained.
FUN FACT:Ritchie, Kernighan and Thompson among others developed Unix. The precursor to and inspiration for the ever popular Linux. Respect.
While I had worked on many programming languages in my teens, C was always the gold standard. When I wrote my very first "Hello World" example after reading thru this book (keep in mind I had years of programming in Fortran, Pascal and Assembler), it seemed like I had conquered a whole new dimension. To this day, I have this book in my book shelf along with its successor C++ by Bjarne Strostrup and Programming Perl by Larry Wall. Kids these days have the likes of Python which imho sucks and teaches you how to use someone else's work - not create.
I definitely used this book when I transitioned from mostly FORTRAN programming for structural analysis to C programming for data acquisition and control applications on DOS computers. Then transitioned to C++ when I needed to start programming on Windows. At that time I used C++ The Complete Reference by Herbert Schildt. About the first third of this book is about C. It uses this as the basis of C++. At the time I used this book I was a fairly experienced C programmer but I still learned new things about C while reading this section.
I've had my copy for 45 years. I joined Bell Labs in 1978, went into the hospital for surgery and read the book while in the hospital. I had already done some C programming. I am still programming in C to this day as a hobby. The book is in about as good a shape as it can be with no writing, except my name and no highlighting. I also have the later ANSI version of the book.
I had this book in my first programming class at Uni back in 1992. That was my first experience with C. I had previously done a bunch of programming in Pascal for PC and Basic for C64. I remember that the usage of pointers were very confusing for the longest time. I still got the book in the garage somewhere.
I bought this book as a hard cover in the 90's for about 3 or 4 dollars, used. It came in handy at my job and was a fortunate find when the book went to soft cover.
heck yeah, I've got that book! I've got way too many programming books now, but that's one that I don't "need", but I keep for historical value.
I still have my first print edition of The C Language on my book shelf. It is a true relic in my career and I still remember the day when my boss presented it to all of us as we were adapting C in our development. I use the language to this day.
Back in 1984 I found a C compiler on a HP station and a copy of K&R; and thus began a career of C/C++ programming. What impressed me the most about K&R is how thin and compact the book is; and it tells you much you need to know to begin programming C.
But even more important than what the book tells you is what the book doesn't tell you.
The book doesn't tell you, for example, the philosophy of C. Or how the compiler treats your code.
For me the best way to learn C (or any other language) is through the compiler.
If you have questions, just write a small piece of code and test it out. The compiler is my best teacher.
The other way to learn about C, or the philosophy of C, is through interview questions.
A good interviewer would ask a deep, thought provoking question, for example on the philosophy of C programming.
And I learned from them.
Finally, I write down my own notes, and use the notes to teach others, coworkers, family, kids, to program.
C is an amazing language in that it has withstood the test of time.
Other languages come and go; but the things I learned about C 40 years ago are still useful today.
C is the only language you ever need to know, even as a mathematician. Plus you can know this language in and out. I'm glad you reviewed this legendary book!
Don't get me wrong -- I love C -- but honestly I think it's one of the worst languages for a mathematician to learn...
I think functional languages like Scheme or Haskell are much better suited to someone with that kind of background.
Functional programming disagrees
LISP can be a great language for a mathematician, or at least a mathematically-inclined computer scientist.
Go through the _Structure And Interpretation Of Computer Programs_ book, and tell me if you agree.
I used the Hanly and Koffman book in 1st year university. I think we had to compute an integral for the project. There are a lot of good c books. I have the Schaums outline for C++, Wrox Press (Beginning C, Beginning C++, Visual C++, Visual Basic). Lots of good examples in those books and lots of opportunities to apply the math (whether it be Calculus, Linear Algebra, Diff Eqn/ Control Systems, or Numerical Methods)
This book is pretty much a meme (in a good way) in the internet programming community. I always wanted a copy and couldn't anywhere in my country. I'm glad I was able to recently get hold of a copy of this book with the ANSI C version. And yeah, it is a tough book. I unfortunately couldn't 100% it, but it is still great to own a copy. Every programmer should have a copy.
I have this book on the shelf at work. I work mainly as a c++ software engineer in the medical imaging research field and I am on the same job for more than 25 years as my hire date was May 19, 1997. I have not looked at it in more than a decade but I do have a copy..
In my case, I just want to see the real world of programming. I started with python and try to learn it on my iphone because I didn't have a computer at the time. Quit after the first 4 lessons because I didn't really like programming that much.
During the covid pandemic I got more into mathematics because I started learning Japanese and know that there's something that even I can do. To then got interested in learning programming because it's also a language.
If I think of something as a language then I can learn it. Didn't actually know which programming language to start because there are too many. So I start with C++.
Here I am today still trying to learn C++. I'm still an amateur when it comes to programming tho. But we'll see if I can do it until I can make a simulation of things in space using the law of physics because I learn programming for astrophysics.
Anyway that's my story(Since you said you're curious about everyone's story)
Seeing this book, is like remembering your first love! I went through the exercises (not all of them), and I also the Al's Kelley and Ira's Pohl Book: A Book on C. Good sources of information to learn C. But as you said... This language brings a lot of mixed opinions when it comes to learn it. A unique a "best" way to learn it, is difficult to find. The best... learn by doing! :)
I received my MSc in Computer Science in 1977 from Brussels Free University. At the time, I had acquired a solid grasp of Fortran, Cobol, PL/1, Algol 60, Pascal, Basic and several Assemblers as well as an understanding of a few more like Modula, Algol 68, Snobol, Lisp, APL and some more. All of that was on mainframes only. The most heated debate at the time was about how to get rid of the "goto" statement and promoting the so called "structured programming" style. Object-orientation was still in its infancy.
In the next few years, I could get my hands on my first personal computer and finally got access to a C compiler in 1983. I too learned the language by reading the K&R book in a few days as it was usual when I needed to learn a new language since there wasn't much material available at the time. To be honest, I found it pretty accessible and really didn't struggle to learn C but found it immensely useful to replace most of the assembly language coding I was doing at the time. One other book from Brian Kernighan that I found enlightening was is "Elements of Programming Style" which I highly recommend to anyone who wants to improve on their coding practices. I'm probably still (unconsciously) applying most of its principles even today.
More recently I have looked at Go which I found appealing but not convincing and at Rust. I fell in love with Rust and started switching to using it for my work. To be honest, the language has a very steep learning curve and you basically have to re-learn the way you reason about coding but after all these years this is probably the first language that brings original ideas into the mainstream.
Don't you just love the "Language-du-jour" proliferation of solving someone's (programming) problem "itch" !
@@technobubba4 Not at all actually. I have kind of been "forced" to learn some languages because it was the only one available on the particular environment I had to deal with although I found them to be ugly and cumbersome. Creating new languages for the sake of it is just a waste of time and energy but is probably a good way to satisfy someone ego.
I learned 'C' on the job at The Bell System Training Center in Dublin, OH. I transferred there to teach 1AESS 'hands on' courses and became involved in writing simulations in support of the 5ESS curriculum. I remember someone handing me the 'C' Programming Language book and saying, 'here it is. Have at it". 1980
I recall fond memories of reading through this book :)
My teacher had said, he has read it 16 times and now on his 17th run !
wow!
I have this book, though I mainly learned the language from "A Book on C".
Such a simple pure language, after first learning Pascal and MS Basic then the heavier SmallTalk and Ada.
I started taking cs50 by Harvard a few months ago and had little prior experience with coding. The way it jumped from Scratch in the first week to C immediately the next week was extremely daunting, but professor David J Malan made it simple enough to understand that it was actually interesting and somewhat fun, in a way (yes, the pointers still took a few days to wrap my head around, but a few rewatch of the lectures and I was kind of good to go to solve the problems sets they gave). I definitely recommend others to give the course a try (at week one to five as it is taught in C) and big props to prof David for being awesome.
I still have my copy. It's about 40+ years old now.
Still have my copy of K&R 2nd Edition. Cover is battered, filthy and coffee-stained, post-it notes stuck here, there, and everywhere, marginal notations in unmpteen colors of ink, pencil, and even sharpie marker, dog-eared almost to death... "Well used" would be one way of putting things. Taught me everything I ever dreamed of needing to know about the language, and some stuff I never would have guessed I needed to know...
Wow, seeing that book cover brought back a lot of memories!
Yeah so nostalgic for me too!!
You should check out Structure and Interpretation of Computer Programs by Harold Abelson, Gerald Jay Sussman. It is also a very famous CS book.
C is for handling a telecom switching system while Scheme is for reminding you how clever you are
Seeing that book brings me back to the 1980's. I worked for the Phillips Corporation as a Scientific Programmer. It was via this text that I learned C. Thanks for reminiscing.
I learned C back in the ‘80s for a music course, in which we had to create a music theory lesson. We had to write routines to draw the notes, staffs, etc. in pixel mode on a Commodore (I think) pc. No text book-just the instructor. I later relearned C using the K&R in the mid ‘90s. I was professional programmer by then. I wanted C to be my specialty. I was fascinated that this C book, and the language itself, was so tiny. Other languages were (and are) written in it. There are some C programs out there that still function because they were so well written. If you learn C well, then all of the other languages will be easy to learn.
Wow, I agree. I still have this book in my collection of software language books from the past.
Thanks for the video.
What I love about this book is that it doesn't treat you like an idiot. When I think back about the exercises some of them were crazy! It was my first contact with things like binary trees and parsing, back then I didn't even know that what I was writing in the exercises was basically a c parser.
I learned C using this book and back in 1979 at the University of California Santa Barbara. We all used this book it was considered the reference. A classic. I still have my original copy and it is copyrighted 1978. I did all my programming with this book on a Dec PDP 11/45.
I learned C with this book. There’s another one that I also recommend by Kernighan and Pike, The Practice of Programming, which is a great supplement to the Kernighan & Ritchie one.
Two other really good programming C books are Programming in C by Kochan and C Primer Plus. These two books provide more background context than K&R and are more IDE friendly.
Happy programming!
It's as you say, a hard book to read but one of the best programming language books ever. It demands a thought process and patience from the reader that is nowadays not very common.
This was the textbook at Purdue in the 80s for the C course. I like the book, as it was always considered the first authority on the language. When I became a professional, I relied on a much more helpful title "C: A Software Engineering Approach" by Darnell
My teacher in college is a master of C programming, he wanted us to understand the core programming with C before moving to anything else. C is interesting because it makes us work very close to the CPU. I started learning C in 2014 with said teacher and to this day I can't be more thankful to had started there. I used The C Programming Language book 2nd Edition by Kernighan and Ritchie and also C Programming by Sams Teach Yourself 7th Edition which is easier to read!
C is best language to start. All things considered, it is.
For example, you can learn C, and after that learn OOP + C++ to learn C++. With minimal effort you can switch to java or javascript. Or python. Or pretty much any language that is not from [purely] functional family.
That's Much MUCH better approach than, say, start with C++, and the books doesn't start with programming concepts like loops and functions, but starts with OOP. Way NOT to write beginner programming book.
@@UnworthyUnbeliever It's not that clear cut and it's a hotly debated approach, while it's a good way to start from C if you understand how it differs from modern languages, the way C++ is taught in school after C as extension of C is very often harmful because you develop a habit of writing code in an outdated way which often introduces issues. Many programmers these days prefer the top-down approach of learning higher level abstractions and breaking them down gradually into details. Which is precisly how programming complex software works, so it's a more natural approach and allows the evolution of languages to benefit beginners.
@@Murzinio
For the most part, i agree with you.
Since you opened this, now here is detailed version of what i believe:
If someone wants a 'quick money' and doesn't really want to learn programming 'from inside out', they will better distribute resources only on something like JS or python or whatever, and for the most part they will be fine. Knowing CS/CE Concepts, implementation internals, things that happen 'under the hood', etc. WOULD give them edge and make them better programmers, but it is not strictly necessary. (And additional resources requirements will possibly offset any gain they are going to see, specially if they spend their resources on the thing they are already working on, ie. learning JS frameworks more in-depth). College students fall in this group because they probably have very limited time. They should only focus on what their college teaches, be it Java, C, C++ or Haskell.
Any other programmer, should start with C, in my opinion. No exception, even if C is not ultimately the programming language they want to use. This includes Ace-programmers (those top programmers who have edge to other programmers because they are familiar with the working mechanism of compilers/interpreters, who are familiar with CS/CE concepts etc), self-learners (because i assume they already have interest in Computers and programming beforehand, and not considering programming to be ONLY about earning money), and so on.
Assuming someone already learned C, then they can easily map other languages to C in their head. (Like myself with python, everything i saw in python i could easily map that to some Imaginary C function), BUT, one cannot learn C and then learn only syntax of some other language and consider themselves programmers of said language. They PROBABLY going to need familiarity with OOP (that's where most job listings are) in addition to 'typing discipline' required for that language in professional environments.
This actually proves my point even further. ALL the books that I've read about some programming language that supported OOP, started the content with OOP. There is a reason for this, they want to teach OOP early on to make sure programmers get used to write in that language in specific discipline that professional programmers use. This has a downside, and that's OOP makes a horrific beginning point for someone who just started to learn programming. Better to teach them C first, which is a simple language* and doesn't take much time to learn, then once they are FULLY familiar with programming concepts, they can move to their programming language of choice.
* - being simple does not mean its easy. More so it doesn't mean its easy to master, but people who target other languages shouldn't spend to much time with C anyway, advanced C concept and learning memory footguns and alike is only necessary for those who professionally code in C.
I'm very glad you reviewed this legendary book
This book, "Code Complete" and "Writing Solid Code" helped get me started in my 2nd career as a software developer after I retired from the Army in '88. Yep, I'm that old, having retired from software development in 2019.
I remember this book, memories of my compiler class are flooding back.
I picked up the book by chance in a nobody knows new bookstore (bad location, didn’t last a year) I bumped into in Taichung, Taiwan, in the 80’s. That time, I wanted a “more modern” language, b/c I hated Pascal’s syntax, which was used to teach data structure at the time by local colleges. I hit the jackpot! Fast forward 20 odd years later, 20 programming languages later, and a ocean far. I was sent to a project to help, using Java. “But it’s over 20 years old!”, a French kid attempting to “review” code objected to me when I pointed out the “return rc;” statement came from K&R and rc stands for return code, exactly named for what it means. Not only he didn’t know what K&R is, he had no idea he was objecting to THE timeless legend, arguable the best written computer language book ever written, with a questionable non-reasoning. If I have learned one thing from this book, it’s be concise, clear, and consistent, especially in comparison to the brick sized The C++ Programming Language. And, don’t nitpick on coding “style”when reviewing other people’s code, it just pisses off everybody! These days, I just point out to the new programmers the code templates in Eclipse as the style “guide”, and tell them it’s from the K&R. We don’t invent nor enforce any “new” style. And, only lesser programmers “invent” their own coding styles, like the notorious Hungarian notation. Funny enough, pretty much everybody laughed at the Hungarian notation part.
I took an introductory scientific computation course where we wrote programs in C and Fortran, and this was one of the required books. I really liked it! It was not my intro to programming in general, though, as I had taken courses in Java programming and had used Python for assignments in a different course. I imagine it would have been over my head had I not had prior programming experience. I kept it for a while after, as I took other courses where we could program in whatever language we liked for assignments. Eventually, I loaned it to another student and forgot to ask for it back. I'm still a little sad about that!
I learned PHP about 20 years ago and it uses almost identical syntax to normal C and I just love it. I wish other languages were closer to C syntax. Looking at you javascript, applescript. I wish I had better technology role models when I was a teen so they could have guided me right to C without wasting time with other junk. With the right book, I would have been able to pick it up really fast.
I have an 19778 or 79 version of this book from my days in bell labs. I certainly consider it one of my praise possessions. I’m hoping to give and other early computer science books to a student who will treasure them and no sell them.
My first real experience in learning programming was when I was 15 and learn to build linked lists using C. :) Incredible experience to get it working and understand how linked lists worked.
to revisit the subject, briefly. i was a lab assistant in my masters program helping students with electronics simulation programs in the computing center, including SPICE. i was using VAX VMS and also SUN machines running UNIX and there was also a need to write scripts in some shell flavour to parse raw SPICE output into something useful by the plot tools available. all the man pages had intermixed shell commands with C commands and it was only natural, before long, that i bought the ANSI C version of the book (1989) and self-studied or better absorbed voraciously the contents like being madly in love ;-)
Yes this is the book that essentially changed the world. This was required reading for graduate students back in the day.
I'd say "Structure and Interpretation of Computer Programs" is more famous
I had just learned Pascal for my Intro to Programming course, and decided to pick up C since it was more compact and elegant. Picked up the first edition of K&R (there was no ANSI C back then), and talked to college friends who knew it... since there weren't web sites back then. 🙂
so nostalgic. As a teen in the 90s, I stole the ANSI stamped version from my brother. I carried it everywhere
☺️☺️☺️
Read it when it first came out. A great book for its time. Many of my peers tossed the book over time, but I saw it as a gem and still have my copy. 😊
A bood that really helped was "Debugging CC" by Ward Christensen.
I remember learning my first "real" programming language, C++, through a textbook and worrying about the topic of pointers because other people had said they were a very difficult topic.
When I finally got to them, and it was revealed that they were nothing more than memory addresses, I might as well have started laughing. They are a beautifully simple idea. The problems caused by pointers are entirely due to human error. Whenever I've had the chance to teach others basic programming in C/C++, I get pointers out of the way early on to demystify them and encourage people to think outside of the limitations other people imagine around them.
What topic of pointers? Isn't that based on which hardware you program
@@rabarebra The two broad categories of pointers are just ordinary memory locations and memory mapped hardware, but if you're learning C/C++ then chances are it's just ordinary memory locations. Of course if you have exotic hardware then things can get interesting haha.
@@prism223 You don't even use memory locations when programming assembly in a editor. Hardware pointers is something else. Of course in the very old days when only using a hex-assembler it was exactly that - what were they called? aeh, Monitor. Sys 49152 ($C000). LOL
@@rabarebra If you're referring to e.g. CPU protected mode or virtual memory then of course there might be layers of virtualization between a programmer's pointer and what the hardware is actually doing, but within the context of the stack of abstractions assumed to be present by a language like C/C++ the term "address" or "memory location" suffices.
@@rabarebra actually you do for hardware access. I did a video series on ARM64 last year and when it came to GPIO I had to put in the virtual base address to the Broadcom GPIO. But IO is the only exception. And you’d normally put it in a constant.