The 2024 Wheel Reinvention Jam just concluded. See the results.

How i can begin software development if I only know c language?

I am new to the field of computer. I only have the knowledge of one programming language that is c only and now I am doing the course of the algorithm . I want to begin software development, so I need the help how I can begin in this part. Is c enough for software development or I should learn some other programming language? I will be glad if you can recommend me any book or video series like the Handmade hero.

Edited by PRITISH on
Yes, C/C++ is enough for software development. If you're interested in Game Development specifically, you can go through HMH. I feel that you might have a miss understanding of the C language if you have to question whether or not it's enough for software development, which may mean you should go and relearn the language. If so, I would recommend you check out the Intro to C videos from Casey, maybe pick up a book (K&R is fairly standard I believe, but I personally just learned through Handmade Hero and some good ol' elbow grease) and crack away at progressively harder programs.

If your problem is that you don't understand how to interface with the operating system, the first week or two of Handmade Hero covers a lot of that.

Hope this helped a little bit.
Thanks for your suggestion Tonnah.
Can you suggest me some tutorial or book that I should follow? It will be very much helpful for me.
Considering all the crap that's around here these days, actually I would guess that C is the BEST thing to learn if you want to make some serious and ill-free software, so you're on the right way.

Personally (after 3 years of janky OOP at university), the best and more effective programming techniques I learned are those teached by Casey on hmh, and those are not useful just in game development, but more generally in software development as well. (In the stream you'll listen the term "compression-oriented programming" dozens of time).
So my first suggestion is to watch the episodes and code SOMETHING along with it, not necessarily the same thing as Casey do.

If you absolutely want a tutorial, One that I can suggest you is "Learn C the hard way" https://learncodethehardway.org/c/
I've followed it for a few chapter, and they were pretty good.

Leonardo



Thanks leonardo lucania for your suggestion.
There's also Modern C book that is pretty decent.
I could have sworn you said you already knew C. But in case not, I also support Modern C; I started with that one. Actually, the C All-In-One Desk Reference For Dummies is pretty good too. I usually hate For Dummies series books due to the boringness, but that one was written by the original For Dummies Author, and it's quite thorough and entertaining, though I never really use it as a "desk reference," ironically.

I think project-wise, for what you've learned and are interested in, you should start with something that C is traditionally good for. In other words, if you're trying to write Wordpress plugins, then no, you haven't chosen the right language, but you could do some awesome stuff such as write a database software, game engine, security/hacking tools, memory hacking tools, web or other server using sockets, etc...

You won't want to use C for a lot of small projects that need to be done real fast. For that, you'd be better suited to use C# or some other high-level language.
Todd
I think project-wise, for what you've learned and are interested in, you should start with something that C is traditionally good for.

Yes, that does tend to give you an edge, since you'll find related learning material faster.

Todd
You won't want to use C for a lot of small projects that need to be done real fast. For that, you'd be better suited to use C# or some other high-level language.

-Vinyl scratches- Nothings has an entire lecture trying to dispel that mindset.
C/C++ are woefully inadequate for writing software, and especially games.

abnercoimbre
Todd
You won't want to use C for a lot of small projects that need to be done real fast. For that, you'd be better suited to use C# or some other high-level language.

-Vinyl scratches- Nothings has an entire lecture trying to dispel that mindset.

Sean's talk doesn't dispel that mindset though. If anything, it reinforces it.
He's pretty clear that C doesn't have a *usable* "standard library" and in order to get one, you have to write it yourself.

What Sean shows is that it is POSSIBLE to write small programs in C fairly productively after you've accumulated a whole set of tools over years and years of work and experience.

Or you can use a programming language that has it all built in (in a *cross-platform* way) from day 0.
pragmatic_hero
What Sean shows is that it is POSSIBLE to write small programs in C fairly productively after you've accumulated a whole set of tools over years and years of work and experience.

And thus avoiding the mindset that C can't be used for small tools pretty much ever. I'm talking about a certain kind of thinking that is very black and white, and of course I don't believe Todd falls in that category, but just thought I'd point out Sean's lecture.

Edited by Abner Coimbre on
IF you want to become a Jedi you better learn to make your own fucking lightsaber.

You can remain a padawan for the rest of your life fine by me. Means I have the competitive advantage. Thanks.
There are careers out there for just about any language you want to use. Of course, learning some languages will also give you an easier time finding work because of the number of jobs using particular languages, but there is still something out there for everyone.

My advice would be to focus on learning your craft. Programming languages are tools. If you get good at crafting things with those tools, you'll find a career in many places. You might even find out you like careers using tools you hadn't considered previously.

Become a craftsman.
godratio
IF you want to become a Jedi you better learn to make your own fucking lightsaber.

You can remain a padawan for the rest of your life fine by me. Means I have the competitive advantage. Thanks.

I'm sure that in your realm of starwars fanfics everybody is awarded a golden star for effort.

I sure hope more indies buy into this idea of Jedis and Ninjas and how cool it is to write games in C (or better yet "modern" C++) and use Vulkan (totally Jedi power level) and uninstall themselves from the already crowded indie market in the process. Thanks.

Oh how I wish I could side-track those pesky little gamemaker, unity, Java, Csharp slinging padawans into writing yet another platform abstraction for getting all files in a directory.

Have them waste time writing yet another buggy, incomplete C parser to add basic reflection and meta-programming capabilities to C. Have em write all sorts of different macro-based hashmap implementations, dictionaries, stringpools, red-black trees and whatever the fuck else is there in every other programming language out there.

Did you know that ye ole' Yoda master uses Vim and GDB? You better get crackin!
We could also sucker them into creating and maintaining some sort of elaborate build system that holds together that house of cards. Ideally something with a true 1970s unix heritage, with cryptic rules and bizarre, inconsistent syntax. Like autotools and makefiles. Something hacky and nonsensical. As Unix is to C, C is to Unix.

Convince them that punching commands in VT100 emulation is peak of human-computer interface.
Because that's what "real" programmers use and that there's an unbounded explosion of productivity and power once you've mastered them.

It is not the way of the Jedi if every line of code doesn't bend their minds in eight dimensions at the same time:
1. How many cycles is this going to waste?
2. Is this undefined behavior? What does the C standard have to say about this?
3. How is this going to affect the size of the binary? Will it fit on 1.44?
4. How is this going to explode the compile times (and it is going to because it's C/C++ we're talking about)
5. Am I trashing the cache, and how many bytes i'm wasting per cache line read
6. Who owns the memory, how i'm going to allocate it, free it, etc
7. Am I corrupting the memory or having a race condition (without ever knowing for sure)
8. What would Mike Acton think (this is important)

Make em run linters and memory sanitizers, watch their hair color waiting for it all to build.
In the end it's all going to be worth it - because your textured cube will run at over 9000 FPS.

That's what makes you a true Jedi Knight!

Since I don't have to do any of that. Means I have a competitive advantage*. Thanks.
I think what matters most is your understanding of logic and your ability to learn. I like what CaptainKraft said about the craft. If you know any programming language you will be able to use another one easily. You'll adapt, and C is the foundation of most modern languages.

You need to be flexible, because most of the time, as a professional working in a team, you won't be able to choose the tools you want.

I prefer to use C for my personal projects, but for the past two weeks I'm writing python add-ons on Blender as a commission work. Next, I'm helping a startup working on a 3d engine for mobile in java (and I'm not crazy about java but it's ok). And next month I will be using maxscript to write animation tools for a film production (spoiler, maxscript sucks).
pragmatic_hero
godratio
IF you want to become a Jedi you better learn to make your own fucking lightsaber.

You can remain a padawan for the rest of your life fine by me. Means I have the competitive advantage. Thanks.

I'm sure that in your realm of starwars fanfics everybody is awarded a golden star for effort.

I sure hope more indies buy into this idea of Jedis and Ninjas and how cool it is to write games in C (or better yet "modern" C++) and use Vulkan (totally Jedi power level) and uninstall themselves from the already crowded indie market in the process. Thanks.

Oh how I wish I could side-track those pesky little gamemaker, unity, Java, Csharp slinging padawans into writing yet another platform abstraction for getting all files in a directory.

Have them waste time writing yet another buggy, incomplete C parser to add basic reflection and meta-programming capabilities to C. Have em write all sorts of different macro-based hashmap implementations, dictionaries, stringpools, red-black trees and whatever the fuck else is there in every other programming language out there.

Did you know that ye ole' Yoda master uses Vim and GDB? You better get crackin!
We could also sucker them into creating and maintaining some sort of elaborate build system that holds together that house of cards. Ideally something with a true 1970s unix heritage, with cryptic rules and bizarre, inconsistent syntax. Like autotools and makefiles. Something hacky and nonsensical. As Unix is to C, C is to Unix.

Convince them that punching commands in VT100 emulation is peak of human-computer interface.
Because that's what "real" programmers use and that there's an unbounded explosion of productivity and power once you've mastered them.

It is not the way of the Jedi if every line of code doesn't bend their minds in eight dimensions at the same time:
1. How many cycles is this going to waste?
2. Is this undefined behavior? What does the C standard have to say about this?
3. How is this going to affect the size of the binary? Will it fit on 1.44?
4. How is this going to explode the compile times (and it is going to because it's C/C++ we're talking about)
5. Am I trashing the cache, and how many bytes i'm wasting per cache line read
6. Who owns the memory, how i'm going to allocate it, free it, etc
7. Am I corrupting the memory or having a race condition (without ever knowing for sure)
8. What would Mike Acton think (this is important)

Make em run linters and memory sanitizers, watch their hair color waiting for it all to build.
In the end it's all going to be worth it - because your textured cube will run at over 9000 FPS.

That's what makes you a true Jedi Knight!

Since I don't have to do any of that. Means I have a competitive advantage*. Thanks.


Wow. Go off on a tangent much? No one is saying do all that.
Im saying building your own abstractions.
I have seen the result of y our type of thinking. In the game industry your costing companies a lot of money and man hours.
As a side note someone who has done all that multiple times will come out a much better programmer and given the exceptions where they have bad teamwork ethics I would hire them over anyone with your mindset for game production.

If your building your own indie game... be my guest do what you think is good for you. Maybe your a rust expert and you can build a game super fast that way because your built your own abstractions and do not need a lot of performance or low level customization perfectly fine.

To summarize what I mean to be a Jedi you must build your own lightsaber , if you have not attempted to implement it your self while learning other CS concepts than you can not be a Jedi.
I am not talking about the erroneous concept of coding ninjas in my analogy I am specifically referring to mastery. Programming mastery.