Congratulations! You did it!
If you have read through to the end of this book, have been diligently typing in every program, and have been performing the suggested experiments on those programs, you will have achieved a solid foundation in the fundamentals of C programming. Make some time to celebrate, even if only for a little bit or if on your own.
Take some time to review each of the programs. You may want to pick out some that you have found to be particularly useful for future reference. You may also want to revisit those programs that you had some difficulty mastering.
You are now ready to take the next steps in developing both your C skills and your programming skills. Everything you have learned in this book is applicable to most programming languages and environments. Here are some suggestions about what might be worthwhile next steps.
Even though C is often called a simple or concise programming language, it can take years to fully master some of the more advanced features of C programming. Not every feature of C has been covered in this book. The following is a list of those features, with an explanation of each feature and why it was left out of this book:
As you gain more skill and understanding of programming concepts and techniques, you will be exposed at some level to each of these features. As you can see, some of them are related to C but others are more related to the specific OS on which your programs will run.
Programming and solving problems with computers often involve much more than just being skilled at a programming language. Now that you have some programming knowledge and skill with C, you should strive to broaden your programming knowledge in the following areas:
Again, as you gain more skills and understanding of programming concepts and techniques, you will be exposed at some level to each of these areas of computing. Some of them are independent of any programming language. However, some are related to the specific operating system on which your programs will run.
Learning a programming language and a variety of useful algorithms is not enough to make you a complete programmer. To become a complete programmer, you must also have a solid understanding of how the computer works—how the CPU executes commands, how it accesses memory, and how it communicates with the rest of the system. For that, I can heartily recommend Modern Computer Architecture and Organization: Learn x86, ARM, and RISC-V architectures and the design of smartphones, PCs and cloud servers, 2nd Edition, by Jim Ledin. This book will provide deep insight into any of the types of computing devices you may write programs for.
One of the most effective ways to deepen your knowledge and skills in any area of endeavor is to pick a project for yourself and then complete that project. It could be a simple project that takes dealer.c, for instance, and uses that to create a more complete version of the Blackjack game given in Chapter 27, or another card game. To learn about GUI development, you might take your C Blackjack and make it into a full GUI-based game. Or, you might want to create a simple to-do list program using your knowledge of files and structures. It could also be an ambitious project that provides a screen to enter data that will be stored in a database on a remote server.
Regardless of the project, not only will you gain knowledge but you will also have learned how to acquire more knowledge to accomplish your project(s). And if you choose to make programming your vocation, you will have working programs to demonstrate your skills.
There are many books available for all levels of C programming skills. These can be found on the Stack Overflow website at https://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list.
Note
A note about Stack Overflow: I have found that most of the answers to questions available on the Stack Overflow website are often useful starting points; very rarely have I ever gotten a complete or totally correct answer from that site. It is useful, to be sure. Take what you find there and run the programs in your environment. Modify the solutions to your situation. But do not stop there. Most often, you will learn about something you had never considered—when that happens, keep questioning and experimenting for yourself.
On the other hand, I have also learned things from Stack Overflow that I’d never even considered before. So, it can be a rich and useful resource if approached carefully.
Another website worth exploring is comp.lang.c, Frequently Asked Questions (http://c-faq.com), where you will find common questions answered in generally useful ways.
A very good website for both C++ and C is https://cppreference.com. This site provides concise yet up-to-date information for each version of C++ and C.
As C has evolved, it is important to rely upon books that reflect that evolution; at a minimum, books in your library should be based on the C99 standard, although it is becoming more common to see books that focus on C11, C17, and even C23 standards.
It is also useful to join and participate in a local programming user group. Such groups meet at regular intervals and are often focused on a single technology. Likewise, there are many online chat and message boards focusing on a single technology. Beware though, as they can soon enough become time sinks.
3.135.246.193