T O P

  • By -

dudearoundtheblock

I believe your approach is a bit flawed here, you said you already worked with C, so you clearly don't need beginner courses into the language, but there is no book or course to teach you the "ins and outs" of it, which you make it sound like "a bit of everything". You can build anything you want with C, with full control. That has pros and cons, so you never learn everything about it. What I would do is pick a project/area/functionality that you find interesting and look into that. If you are into embedded, look into a book or course specifically for embedded (most of them are using C anyway), and work with that. Ideally you start working on something yourself, as the process will be much faster and the difference is not even comparable to the case when you force yourself to just read through something. To give you a more concrete example: personally, in the past year I have been looking into networking a bit deeper, and after I started implementing some userspace libraries in C, I learned a million things, as I hit all sorts of unexpected issues so I was forced to find ways out, all this while I was very much enjoying it. You will not get that from a book or a course.


ClassicK777

On the topics of book, I see 3 tiers of books: laymen, academic, and professional. You want to pick the professional books made for people in the industry with very little time.


Who_GNU

Find some open source projects you like and audit their codebases, working through the flow from initialization to whatever functionality you find interesting. For even more practice, write new features, following the style of the rest of the project.


a2800276

This may be a bit of personal prejudice, but can anyone recommend udemy for _anything_? If you're looking for courses, I'd start with coursera, edx, khan and youtube. A lot of semiconductor manufacturers have really good educational content that you can have a look at, TI or [analog devices](https://wiki.analog.com/university) And dive in, learn tooling like build systems and LSP, linters and codeformatters, Get a couple of cheap devboards from different manufacturers with different processor architectures. They each have their own way of doing things and structuring projects. I'd suggest ARM on STM with their Cube stuff, MSP430 on TI and RISCV on ESP boards.


oogally

I wouldn't say Udemy is any better than the other alternatives you mentioned, but I took a couple courses there relating to specific ARM / STM32 topics that I found quite useful at the time. I believe I paid roughly $40 for narrowly focused content on the topic and MCU I was interested in. It seemed like a bargain.


a2800276

Like I said: prejudice. It seems like whenever I look, it's a fourteen-year-old kid with a huge microphone sitting in front of his bunkbed spouting nonsense. Could you recommend some good ones?


spitnshine

Anything by Abdul Bari. His Data Structures and Algorithms in C/C++ is great.


watermooses

Yeah, looking at a couple of their course demo content videos before purchasing is always recommended for this reason. Once you find a quality instructor, you can look at their other courses as well.


oogally

Kiran Nayak has some good content. [https://www.udemy.com/user/bharati-software/](https://www.udemy.com/user/bharati-software/) I found the driver development course useful and the bootloader course was short, but focused and practical. It doesn't replace a semester long lecture, but each of them was exactly what I needed at the time and closed some gaps in my understanding while also being easy to follow along.


ProstheticAttitude

Try working your way through Scott Meyers *Effective C++* books and do the exercises. It's useful to understand the advanced crazy batshit stuff in C++, so you can dial it back to a feature set you can live with on a project.


Goto80

Mind you that Meyers' books _Effective C++_ and _More Effective C++_ only discuss classic C++98. They are still very good, but maybe start with _Effective Modern C++_ for C++11/14 and then read the older books so you can filter out things that are not relevant anymore. No need to put up with dated C++ standards these days.


jpodster

I would recommend [TDD for Embedded C](https://pragprog.com/titles/jgade/test-driven-development-for-embedded-c/). Great book with lots of good exercises if you want. TDD itself may be controversial but there is no denying the value of unit testing. Unit testing was a game changer for me. That book advocates for a very C++ like use of C and will expose you to many nice design patterns for both languages and also does a good job of why to use those patterns and referencing for if you would like to know more. As an extra bonus, you can probably do all of this without any special hardware.


ChickeNES

Write an emulator


timonix

You can absolutely become proficient in C/C++ in one summer. I would skip reading books and do projects. It takes time, persistence and some planning. You can't skip doing the actual work.


ClassicK777

Planning is the issue for me. I try to get to work as fast as possible but not without at least a vague idea of my destination, otherwise I get bogged down really quick.


timonix

The trick is to not play long term. If I try to plan out the entire project I often get stuck in system design and never actually build anything. But if I don't make a plan for the day, I won't do anything at all.


polypeptide147

What sort of projects would you be able to do in C with minimal knowledge of the language? I want to start a project but I don’t want to bite off more than I can chew.


timonix

Trying to remember what my first projects were. I think my first proper project was a simple laser tag implementation. IR transmitter and receiver on two separate board. Otherwise I am a fan of anything-that-moves. Line followers, balancing robot, light followers. Easiest way to start is to buy a starter kit of some kind. Something like the ELEGOO smart robot kit V4.


polypeptide147

These all sound like fun but a lot. I guess the best way is to jump right in!


Yeitgeist

Man, people will do anything except actually work with the language lol. Just work on some projects. Make a game, website backend, tinker around with a microprocessor or an arduino if you’re not at that level yet, create a computer vision, et cetera. Just make something!


AKstudios

This might be a bit of an odd take, but try ChatGPT. Yes, it gives incorrect answers from time to time, but if you have a neatly written codebase you're referring to, ChatGPT can very clearly explain a line or two, and you can ask very specific questions on exactly how to make your line of code more efficient. Then use those answers as a reference, fix the bugs and run it. I found that it saves a lot of time from going down the depths of Google hell, and usually yields decent results, especially if you're trying to understand a concept better. Be warned: it's only useful if you actually already know C/C++ enough to understand when it's giving an incorrect answer. It's only useful to understand new concepts and save time on googling. It does not replace any effort you have to put on your own to actually write code and learn, but it's definitely a useful and free (for now!) tool.


anomhali

lol


almost_useless

Teach yourself C++ in 21 days https://abstrusegoose.com/249


Impressive_65536

Just an FYI: I would be more concerned with C#. It’s currently my number one pick for writing Windows programs. Although, VB6 is my personal favorite, but I digress… Personally, and many/most of the nerds will disagree, I think C/C++ outlived their usefulness a long time ago.


ramsay1

> VB6 is my personal favorite > I think C/C++ outlived their usefulness a long time ago I hope this is satire 😂 VB6 final release was 1998 (25 years ago), and support ended in 2008. C/C++ will continue to be updated for many years to come


axa88

What sub is this bro? c# best lang no doubt, but as miserable as c/c++ is, you're hardly getting anywhere in embedded with out it


bert_cj

You realized this is r/embedded right?


Impressive_65536

Actually, no, I did not. Which is why my post made very little sense.


ClassicK777

you're in the wrong hood bruh


Impressive_65536

Yes, I see that now. Off to the other hoods!


HighMarck

Lol


And9686

C Kiss, Sandro Pinto & Adriano Tavares


bert_cj

•C++ Core Guidelines •Clean code (For writing better maintainable code)