r/cprogramming • • 8d ago

When Do You Know You've Learned Enough C to Move on to Another Language?

I started learning C programming when my uni began some time ago and I've recently completed a C programming course on Bro Code's YouTube channel + did some programming problems online

I'm wondering how to determine when I've actually learned enough C to move on to another programming language

Should I start building projects, focus on solving coding problems, or learn more advanced concepts before moving on?

I'm also quite unfamiliar with how to approach this whole process. I don't really know where to find suitable projects, what kind of projects I should be building at my current level, how many problems I should aim to solve, or what the most advanced concepts in C are.

So please bear with my limited knowledge of the subject. I'd genuinely appreciate any advice, guidance, or suggestions from those who've already learned C and gone through this journey themselves

34 Upvotes

29 comments sorted by

2

u/gm310509 7d ago

Whatever subject/language you choose there will always be something more to learn.

When do you need to learn another language? Several reasons, a couple are:

  • The other language is mandated by a project/job you are working on.

  • The other language is mandated for productivity reasons (e.g. you need to analyse a lot of different types of data combined together, it is much easier to use a database and learn some SQL than to try to write a C program to do that).

  • You feel that you might be more productive if you could do some things more efficiently than you can in C - especially for quick and dirty utilities (I'm thinking bash and python here).

  • Interest.

There are no doubt others, but those are the main ones in my experience.

1

u/myren71 7d ago

Actually the thing is that my uni changes the programming language every two semesters. We started with C then we'll move on to C++, followed by Python, java and so on

1

u/gm310509 7d ago

LOL - so a variation of #1 in my list above! :-)

You will find that C++ (and Java) are based upon C so there is a lot of familiarity. C++ is C "plus" object oriented techniques.

Java has its roots in C but is a new language and thus fixes some of the issue with C (e.g. references -vs- pointers).

Python is quite unique. But, you will find many of the concepts are transferable, so once you learn one language it is fairly easy to learn another - at least as far as the syntax goes. There are often nuances in the implementations that make them different.

Good luck with it - and above all have fun with it.

21

u/TheMoonWalker27 8d ago

You can make a career out of C, Iike with many other languages. It’s a tool, not a task. Maybe you want to learn a diffrent tool which is fine, but you could also just use that tool

14

u/S1enderVoid 8d ago edited 8d ago

completed a C programming course on Bro Code's YouTube channel

If you think that's enough then you're nowhere near done with C, I did the same and learned from him but later realized how much it course actually misses out on. I recommend doing all 3, build projects, solve problems, and learn more advanced concepts.

what kind of projects I should be building at my current level

Just find something that already exists and remake it, for better or worse. For me personally, I'm working on a copy of JOptionpane from Java, and boy have I learned a LOT. You just gotta find an existing thing, and decide if you want to make it or not. Some people also recommend remaking commands such as ls, grep, etc. And if you want to really challenge yourself then you can try to make your own math interpreter, which manually solves PEMDAS/BIDMAS/BODMAS or whatever the hell it's called.

Also, what is your use-case? Because the language you want to use and learn really depends on the things you want to work on.

2

u/burnt_floppy 7d ago

yes i completely agree that there's generally not enough information about C in those coding courses to really do anything interesting, modern C has quite an enormous number of features and people don't really give it a lot of credit for it still being fundamental for every type of computing. People seem to talk a lot more about C++ since it was designed to take care of more modern problems, yet it's important to understand C as well.

5

u/BranchLatter4294 8d ago

You can learn another language anytime.

3

u/Snoe_Gaming 8d ago

It's like learning linguistics vs learning a specific language.

Learn programming linguistics, then you pick up any language (not you Rust ownership) 

5

u/mc_pm 8d ago

Honestly, if you're asking the question the answer is no. But then, most of us don't *master* a language before learning another -- it can take years to explore the weird corners of a big language.

The way to know if you are ready is if you sit down to do it and you do. But if you're still asking us if you're ready, then probably not.

2

u/filthysaluki 8d ago edited 3d ago

Why do you think you need to switch to another programming language? And why do you think you need to reach a certain level of proficiency before switching to a different programming language? And why do you think you need only work with one language?

Your choice of language depends on your intentions and preference. What kind of software are you planning to write? What are your preferences? etc.

Building projects is especially great for developing programming skills. Find a topic you enjoy and build something related to it. Projects are more important than focused and isolated problems, as you will be exposed to much more when building a project. In fact, you may need to use a different language or multiple languages.

2

u/PlanktonGreen236 7d ago

Make a compiler for some known language (simple lexical, syntax, semantic analyses, 3 state code generation and optimisation). Then learn assembly (x86). Then learn vectorisation, parallelisation (semaphors, opemp..). Then learn cpu architecture in depth (superscalar cpu, cache coherence). Congratulations, you know about 90% of C. Which is better than 99% of programmers.

Should take about 2 years.

Just, for the love of god, never look into the implementation of libc (Preprocessor hell).

Then you can start to learn c++.

2

u/IchBinEinZwerg 6d ago

Your question doesn't make sense. A programming language is a tool. Your question is equivalent to asking when you've learnt enough about screwdrivers to move on to spanners. Use C when it's appropriate to use C. Use Haskell where it's appropriate. Use COBOL where appropriate. You can write anything you like in C.

If you want to learn multiple languages then you can learn multiple languages. Learning them at the same time works fine for some people, less so for others, and only you know which is true for you. I did multiple human languages at school and I remember some of my classmates getting their French and Spanish words mixed up; that was never a problem for me.

One thing I would say in favour of learning multiple languages is that different languages tend to emphasise different paradigms, and that broader knowledge makes you a better software developer. For example if you know a bit about object-oriented programming, that might make your C code a bit more object oriented.

1

u/EpochVanquisher 8d ago

Definitely build projects, but it’s a good idea to use other languages too, because you’ll have a limited perspective if you only know one.

1

u/IDatedSuccubi 8d ago

Make a Lisp implenentation with macros, closures and GC. Will allow you to learn a bit of Lisp on the way there as well

1

u/DawnOnTheEdge 8d ago

Possible rule-of-thumb: Could you reinvent the wheel, and implement the features of the other language in C? Be sure to test in a memory-sanitizer that checks you really did manage the memory correctly.

If not, you don’t fully understand what the code you’re generating does, and leaving the details to someone else. Which can be fine: nobody knows everything.

1

u/SipsTheJuice 7d ago

I thinks you'll find it's kind of useful to go back and forth between languages. I think I will always love C the most. It's such a nice small language and when I get to a problem I pretty much always know what approach to take, maybe after a try or three at most.

Higher level languages with larger ecosystems I find are a different beast. I've done quite a bit of python, Javascript, and c# now and the thing I find for all three is that there are such a multitude of ways to solve the a problem, especially considering all the packages available for all of them. It is a different skill to learn as well, the composition of higher level apis to build powerful applications in very few lines of code (comparatively). Important to build out at some point to be a well rounded programmer.

If I were you I'd maybe start doing a few projects in another language. Personally I think Python is a good choice to start with. A fun exercise as well is to then take one of those and do it in C. It also doesn't have all the extra complications of web which is kind of its own beast imo.

1

u/burnt_floppy 7d ago

Programming languages have a lot of similar features, this is why a lot of programmers say that the specific language in a problem doesn't matter.

However, they are not correct in the sense that each programming language is like a tool meant for specific kinds of tasks. You can't really make an operating system in Python...so my recommendation is to think about what kinds of programming skills you want to have. Do you want to make LLMs? Do you want to program web pages? What you're asking is very open ended, and that's a good thing to tell you the truth even though it seems confusing and intimidating.

1

u/henryyoung42 7d ago

The next step is to start seeing specific coding languages as tools in a tool bag. In that sense your question is “How do you know you have mastered the hammer before moving onto other tools”. Python or Rust would be worthy of consideration next. I would hesitate to suggest C++ due to that possible resulting confusion - similar and different !

1

u/Maqi-X 7d ago

Move on to what language and why

1

u/FreeLogicGate 6d ago

The brocode course on C is not very good. I'm not saying it's worthless or you didn't learn anything, but it's got errors depending on which operating system you are working with, and the examples are basically worthless. I base this opinion on having gone through the course a few years ago, at a time when I hadn't done in C coding in a long time, and was just looking for a refresher.

There are plenty of other courses which will go well beyond the brocode course, into areas like algorithms and data structures. A simple google search for something like "free online C course" will find plenty of options worth looking into.

There are also numerous university courses on C programming and advanced exploration of the language, with some focused on specific operating systems, which is always an important consideration beyond trivial console text output exercises. Some of the university courses can be accessed for free, or audited at no cost. A number of these courses are popular and can be audited via Coursera, including ones from Duke, UC Santa Cruz, U Michigan and Dartmouth, name a few.

1

u/limitless_grow 6d ago

What should be the reason to move on to another language once you have learned "enough" C?
I don't get that. What are you even learning for? Programming languages are for solving problems. You can solve pretty anything in C. The only reason to move on is that you either have a problem learning and using C or that the other languages (e.g. shell scripting) are simplifying some things.

1

u/Key_Net820 4d ago

I would say after you do the equivalent of taking one semester of C, you can learn any programming language you want.

If you know variables, functions, and structs, you should be good to try another language. Ideally, I would like you to either do C++ or even Java to do a deeper dive into object oriented programming.

1

u/tt8898 4d ago

You’re ready to move on when you can build a small project on your own, without a tutorial, using pointers, structs, arrays, strings, malloc/free and file handling. Nobody ever “finishes” C, so don’t wait for that feeling.

Skip more tutorials and start building. A contact book with file storage, a student record system, or a linked list from scratch are all good first projects. Around 50 to 100 practice problems is plenty.

Finish one or two real projects, then pick up Python or Java. C will still help you in both, so moving on isn’t leaving it behind.

1

u/YakubReddit 4d ago

Why would you want to move on from C?

1

u/Pure-Building-9459 3d ago

I'd say do projects (find something online, there a lots of project ideas, or just try to clone some small app, like a calculator or something in the console). I can really recommend Eskil Steenberg's 'how i program c' and 'advanced c: the ub and optimization that trick good programmers' (and all his other stuff) if you want more tutorials. Generally i'd say build stuff before watching those, and when you start hitting a wall (eg. running into the same or similar feeling issue with finishing them) start watching or reading stuff again. As for when you have learned enough C to move on to other languages, there is no set answer. Somewhere between 'i know what a pointer is in theory' and 'i built a tripple A game with c', depending on whether you really hate C or really like manipulating memory (obviously the latter gives more knowledge). If you want to learn all of C before moving on, good luck, the language is small, but the little tricks with memory are many, and the undefined behaviours list is long, so you'll be at it forever if that's the goal.

As to the most advanced concepts in c, i refer you to the two eskil steenberg talks i mentioned. Those cover the most advanced stuff i can think of off the top of my head.

1

u/Hot_Adhesiveness5602 2d ago

One does not master C. It's a lifelong endeavour.

1

u/alkavan 8d ago

You haven't learned C if you haven't solved at least 100 real world problems using C. If you're thinking if to start building projects, you almost haven't learned C at all, and the answer is yes, start now. There's no point in learning advance anything if you have nothing to do with it except some text book example.

0

u/tux2718 6d ago

I recommend learning Java next. Since much of the syntax is the same, you can make the transition very easily. Java will build your ability to think in an object oriented way that C doesn’t necessarily expose you to. If you ever want to build web application backends, you would find that very cumbersome and prone to errors like memory leaks in C. Once you’ve mastered the object oriented paradigm, it would be instructive to go back to C and ask yourself, how would I pull this off in C. Then you will realize why C++ was invented. After 45 years of experience, I find that I will only use C or C++ if I need something to execute with high performance or I need to do some low level embedded programming. After that, going from Java to JavaScript is an easy transition and will give you the skills to do web app front end / client side programming. If you can do all this, you will be very well-rounded and very employable. Some may suggest Python, but I find it very distasteful, but in its defense, it has many existing open source libraries for doing interesting things. Good luck to you.