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.
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.
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.
@@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.
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 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 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.
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!
@@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.
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.
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
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!
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.
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!
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.
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.
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.
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.
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!
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...
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.
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.
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.
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).
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 😅
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.
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.
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
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
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.
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)
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.
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.
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.
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!!
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.
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.
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.
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.
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++.
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.
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 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.
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
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 :)
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.
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.
@@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.)
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.
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.
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.
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 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).
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 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.
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.
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.
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 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!
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.
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.
Fortran 77 was the first programming language I learned in college because it was mandated by Engineering College. Except for the Waterloo Fortran compiler no other Fortran compiler was available for me to be able to write code in my dorm room on my IBM PC/XT clone! Then I discovered the Borland C IDE! What a glorious programming environment it was compared to the Waterloo compilers. Moreover there were aspects of Fortran 77 that I hated most notably the fact that it was not free form type. All instructions had to begin on column 7 of each line and columns 1-6 were reserved for symbols to designate positions for conditional jumps. As a freshman learning to write computer software for the first time in his life I cannot count the number of times this aspect of Fortran caused my code to not compile. During my first summer break from college I came home and convinced my Dad to buy me the Borland C IDE for IBM PC DOS/MS DOS. I think it was $99 or something like that. Throughout the entire summer I would stay up late at night converting the Fortran 77 programs I wrote the previous term on campus into C programs. By the time I got back to campus the following fall I felt confident enough to try my hand at an Assembly language programming course for the Motorola 68000 microprocessor taught by the computer science department. BIG MISTAKE!!!!!!!! It was orders of magnitude more difficult than C. Moreover the professor (a Greek citizen teaching my college) insisted that we write our first two programs in the actual machine code of the MC68000 microprocessor!!!!!! That was awful. It took me weeks to get a very basic machine program working on our primitive computer board. This class was crushing the time I had available for my other courses in Chemical Engineering which was my actual chosen major. So I decided to officially drop the class but I still went to every lecture and took notes. Those lectures gave me a deeper appreciation for the C language and how close it was to the actual assembler that had previously been used for operating system designs.
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.
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 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.
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 ;-)
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 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.
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 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..
I don't remember anymore, must have been early 80's that I larned C around my early teen years, just checked still have the 1st edition in my cabinet. My father worked for an airline company and brought it home from a trip to the US or that is what I think I remember. Never learned to talk about computers in my native language, since the native words was invented way after I learned about computers. I'm having trouble thinking of java, python and anything else as serious programming languages, they are useful tools that it takes me a few minutes to adjust to and start programming in when a situation needs them, they are just too easy to learn for me to take them seriously. I wouldn't recommend anyone learn C from the book. The book is almost older than me and C has evolved since then. The "hello, world" program gives me an allergic reaction as it breaks the rules of how to code cleanly in C. I'm fairly sure that "The C Programming Language Still Runs the World". Also C/C++/C# and some others is all C for me, the compilers can make programs out of the code in this book. The C derived languages can just do something extra, so you can't make a C program out of C++ code, but there is nothing to stop you from using C code in a C++ program.
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.
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
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.
@@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 think there are some other contenders for the title of the most famous computer programming book in the world. "The Art of Computer Programming" would be one. K&R's book introduce a new _language;_ Knuth's _magnum opus_ introduces and analises practically every algorithm a programmer will ever need.
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!
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 learned C by knowing the basics of programming (syntax) and how the hardware actually functions (the physical hardware analysis and the assembly language).
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.
I learnt C using Robert lafore book in university. Used C in my entire bachelor's education and that helped me a lot in understand the fundamental CS concepts
I also have an original Basic language operating system manual for the IMSAI 8080 which I replaced with an operating system that I wrote in Intel assembly language I called FDOS (Flexible Disk Operating System). I then replaced that with the CP/M operating system (author Gary Kildow). I have a wonderful analytic geometry book "Aircraft Analyric Geometry" by Apalategui and Adams published by McGraw-Hill 1944 I also have a copy of the original Intel assembly language and Intel machine code manual that I used in the 1970s for the IMSAI 8080. I'm 75 and still coding in ForTran (PG) for manufacturing engineering applications.
K&R's book was one of required textbooks in my Systems Software class over 3 decades ago in college. That book got a lot of use, and was among the big three in my personal library for years along with Bjorne Stroustrup's "The C++ Programming Language" and Stevens' book "Advanced Programming in the UNIX Environment".
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.
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 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.
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.
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.
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.
Good old memory. This book is still in my book case ever since.
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*.
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.
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.
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.
I still have my copy. It's about 40+ years old now.
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.
OLD SCHOOL!! YES!!
"A Book on C" ~ Al Kelley & Ira Pohl is another classic.
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 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!
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...
Also the best. It's short but explains everything the language has to offer with proper code examples.
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.
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.
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).
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 😅
OMG! Haven't seen that in YEARS! Brings back great memories of my early programming days. Thanks for this!
I know, the memories!
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.
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.
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
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
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🎉
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)
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.
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.
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.
This man is so humble, I wouldn't be surprised if he was unaware of how good his self-improvement skills are.
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!!
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.
Wow, I agree. I still have this book in my collection of software language books from the past.
Thanks for the video.
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.
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.
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.
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++.
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.
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 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.
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 ?
Interesting note that Brian Kernighan actually invented the hello world program but not in “C”, it was for the language “B”, great video!
Interesting!
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 ага! Коси и забивай :)
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.
I learned C from this book in 1996. This book has huge contribution to what I am today.
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.
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
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.
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 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!
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).
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 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.
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.
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.
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.
Can you do videos on the exercises in these books?
Sure that's a great idea!
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 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!
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.
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.
Fortran 77 was the first programming language I learned in college because it was mandated by Engineering College. Except for the Waterloo Fortran compiler no other Fortran compiler was available for me to be able to write code in my dorm room on my IBM PC/XT clone! Then I discovered the Borland C IDE! What a glorious programming environment it was compared to the Waterloo compilers. Moreover there were aspects of Fortran 77 that I hated most notably the fact that it was not free form type. All instructions had to begin on column 7 of each line and columns 1-6 were reserved for symbols to designate positions for conditional jumps. As a freshman learning to write computer software for the first time in his life I cannot count the number of times this aspect of Fortran caused my code to not compile. During my first summer break from college I came home and convinced my Dad to buy me the Borland C IDE for IBM PC DOS/MS DOS. I think it was $99 or something like that. Throughout the entire summer I would stay up late at night converting the Fortran 77 programs I wrote the previous term on campus into C programs. By the time I got back to campus the following fall I felt confident enough to try my hand at an Assembly language programming course for the Motorola 68000 microprocessor taught by the computer science department. BIG MISTAKE!!!!!!!! It was orders of magnitude more difficult than C. Moreover the professor (a Greek citizen teaching my college) insisted that we write our first two programs in the actual machine code of the MC68000 microprocessor!!!!!! That was awful. It took me weeks to get a very basic machine program working on our primitive computer board. This class was crushing the time I had available for my other courses in Chemical Engineering which was my actual chosen major. So I decided to officially drop the class but I still went to every lecture and took notes. Those lectures gave me a deeper appreciation for the C language and how close it was to the actual assembler that had previously been used for operating system designs.
It is a good way to get started, but certainly lacking in modern tips and tricks. I wish they updated it.
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.
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.
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 ;-)
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 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.
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
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 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..
FUN FACT:Ritchie, Kernighan and Thompson among others developed Unix. The precursor to and inspiration for the ever popular Linux. Respect.
I don't remember anymore, must have been early 80's that I larned C around my early teen years, just checked still have the 1st edition in my cabinet. My father worked for an airline company and brought it home from a trip to the US or that is what I think I remember. Never learned to talk about computers in my native language, since the native words was invented way after I learned about computers.
I'm having trouble thinking of java, python and anything else as serious programming languages, they are useful tools that it takes me a few minutes to adjust to and start programming in when a situation needs them, they are just too easy to learn for me to take them seriously.
I wouldn't recommend anyone learn C from the book. The book is almost older than me and C has evolved since then. The "hello, world" program gives me an allergic reaction as it breaks the rules of how to code cleanly in C.
I'm fairly sure that "The C Programming Language Still Runs the World". Also C/C++/C# and some others is all C for me, the compilers can make programs out of the code in this book. The C derived languages can just do something extra, so you can't make a C program out of C++ code, but there is nothing to stop you from using C code in a C++ program.
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.
Yes this is the book that essentially changed the world. This was required reading for graduate students back in the day.
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
I remember this book, memories of my compiler class are flooding back.
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 think there are some other contenders for the title of the most famous computer programming book in the world. "The Art of Computer Programming" would be one. K&R's book introduce a new _language;_ Knuth's _magnum opus_ introduces and analises practically every algorithm a programmer will ever need.
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'm very glad you reviewed this legendary book
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. 😊
Wow, seeing that book cover brought back a lot of memories!
Yeah so nostalgic for me too!!
Bought my first one in 78, stopped doing C in the 90's. Do C# now. I like your attitude, never went to college either.
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 learned C by knowing the basics of programming (syntax) and how the hardware actually functions (the physical hardware analysis and the assembly language).
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.
I learnt C using Robert lafore book in university. Used C in my entire bachelor's education and that helped me a lot in understand the fundamental CS concepts
A bood that really helped was "Debugging CC" by Ward Christensen.
I also have an original Basic language operating system manual for the IMSAI 8080 which I replaced with an operating system that I wrote in Intel assembly language I called FDOS (Flexible Disk Operating System). I then replaced that with the CP/M operating system (author Gary Kildow).
I have a wonderful analytic geometry book "Aircraft Analyric Geometry" by Apalategui and Adams published by McGraw-Hill 1944
I also have a copy of the original Intel assembly language and Intel machine code manual that I used in
the 1970s for the IMSAI 8080.
I'm 75 and still coding in ForTran (PG) for manufacturing engineering applications.
K&R's book was one of required textbooks in my Systems Software class over 3 decades ago in college. That book got a lot of use, and was among the big three in my personal library for years along with Bjorne Stroustrup's "The C++ Programming Language" and Stevens' book "Advanced Programming in the UNIX Environment".
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.
I used this book in my C programming language class, concise but complete.