serialShinobi wrote on 2024-05-01, 19:25:
I believe I will need a book about programming in C and it is the best way to get exposure to programming in C by topic. Am I right?
I'm of the strong opinion that a good book is the best way to learn something in detail, regardless of the latest trends or fads. If you really want to learn a subject inside out, there aren't many substitutes. If that's your goal, then I would look for a good book. However, if you want to get started quickly, you probably don't need to dive right in to a deep book, at least not as your main way of learning. I would either look for a more recent, concise book or for online tutorials (text ideally). The latter can be especially helpful if you want to copy and paste something (some books will come with code that you can download). A lot of people will recommend taking an online course from somewhere like Coursera or YouTube videos. While these can be helpful as an introduction, video as a medium often prevents the teacher from going into detail. I've worked with a number of people who taught themselves machine learning or statistics from an online course like Coursera, and, in my opinion, they often are unfamiliar with key concepts that would be covered in any competently written book. Another drawback is that video isn't great if you lose attention for a bit or don't quite understand something. It can be a bit of a hassle if you need to go back and rewind the video. Even if you're watching the video on a good computer that doesn't buffer much, it can still be hard to go back to a part if the teacher is just talking for awhile. You have to listen for whatever verbal queue you're searching for, but also limited to the speaker's talking speed. On the other hand, it's a lot easier to skim through a book or webpage if you need to go back to something. One exception would be if you need to do something like customize your IDE's GUI. It's often way quicker to watch someone demonstrate it on YouTube than reading the documentation that describes it.
Personally, I think that a good book will complement another, more concise approach. It's important to both read and get started with simple programming at the same time. That's similar to how many university courses are taught. You will have a book and will be required to read certain pages or chapters each week. At the same time, you will have computer labs where you will do programming assignments.
One thing that is often overlooked is the documentation for the language itself. A lot of books, courses, or tutorials will give you an introduction to a concept and provide a few examples. However, this doesn't do a great job of teaching someone how to look up for themselves how to do something. This is important because a tutorial might teach you 90% of what you need to know to create the program you're working on, but that remaining 10% is going to be the hardest part. It's extremely valuable to become comfortable looking up stuff in the official documentation. When you first start looking at the documentation after doing a few tutorials or a short course, actual documentation can seem overwhelming and the format may seem like nothing you saw in your lessons. Nonetheless, it is extremely helpful if you need to figure out what exactly you can do with certain data structures for example. I haven't touched C in nearly 20 years, but I use Python and R regularly. Here's what it looks for in Python:
https://docs.python.org/3/library/stdtypes.html#typesmapping
Here's the documentation for GNU C for example:
https://www.gnu.org/software/gnu-c-manual/gnu … al.html#Preface
serialShinobi wrote on 2024-05-01, 19:25:
Do I need to go to a school where an instructor assigns you a book and a project?
No, but a school program has two or three main advantages. First, you will have a teacher (and likely a teaching assistant) to ask for help. While valuable, there are plenty of knowledgeable people who will help answer questions online. Second, a school program gives you an organized schedule with goals and deadlines. I think this by far the most important advantage that a school program offers. Most people don't have the discipline to keep up with the work required to learn a programming language. They will typically do well at first, but work and life gets in the way. Obviously, there are many self-taught programmers, so it can be done, but you need to be very disciplined. With a school course, you will need to meet deadlines in order to pass. This means that you will need to put in the hours, even if you are tired and rather take the evening off. Personally, I had to do a bunch of all-nighters when I took my programming courses. I hate doing that, but with deadline approaching, you don't always have the option.
There could be a third advantage, depending on what you want to do with this. If it's for work, having credentials might matter for a potential employer. Some employers might be fine if you have an impressive portfolio, but other might expect credentials.
Apart from your questions, I think that having projects in mind is a huge motivator. Ideally, you would have some fun projects in mind that you could work on as you learn the language. This goes back to the motivation part of learning a language. Simply following tutorials can end up being a bit boring after awhile. However, having something fun to motivate make the difference between sticking with it or not. If you have no project in mind right now, you could look at some of the online projects that provide problems for you to tackle.
Here's a mathematical oriented one:
https://projecteuler.net/
If you're interested in biology, you could try these:
https://rosalind.info/problems/locations/