So I've learned C...

Started by
18 comments, last by SimonForsman 11 years, 5 months ago

[quote name='Anri' timestamp='1352118243' post='4997542']
I would agree with mhagain about stepping up to OOP. Java or C++ are good choices, although if you are comfortable with C then maybe C++ might be a better choice - but either either way you cannot go wrong.


Personally I suggest learning Java. C++ is a bit too similar to C and thus you will end up doing many things "the C way", instead of "C++ way". Once you have learnt OO with separate language you can better understand the nuances of C++.

[/quote]

I have to admit, Java is great for learning OOP - mainly because one uses it from the get-go, whereas C++ its an option. And I can agree that its a mistake to believe that C++ is merely C with OOP tacked on. If some one asked advice for moving from C to C++ then I would recommend Herbert Schildt's Complete C++ Reference, as it points out how the two are similar but also different.

Languages; C, Java. Platforms: Android, Oculus Go, ZX Spectrum, Megadrive.

Website: Mega-Gen Garage

Advertisement
I am exactly in the same (or at least a similar) boat as you. I have learned C as well, and some C++ to go with it. I am not quite the "master of the keyboard" as you put it, and only a few people are truly near being what you may consider a "master" on these forums, and I think those would be the members (that I have heard from) like ApochPiQ, Hodgman, jbadams, phantom, hplus0603, Servant of the Lord, etc. Of the ones I have heard from, ApochPiQ worked on GW2 and the user phantom made a realtime raytracer application that looks awesome. It is called Brigade if I am no mistaken. There are others, but those are the ones I hear from the most.
But, back to the topic. What I am doing is learning OpenGL, but there are so many other API's that people don't really focus on, such as a sound API, networking, I/O, etc. I started everything around this time last year (fully started in December of last year), and I always set the bar too high for myself. I wasn't naive enough to have ambitions to make something like Unreal, or Source, but even my early ideas were too much. I originally wanted to (more than a year ago) make a top-down-scrolling Doodle Jump-esque game that involved elevators for iOS only, but as my knowledge grew, so did my ambition, without ever completing (or even starting) my projects. I am now fully (if not way more than) capable of making that elevator game, but my goal is now to make a 3D RPG game (albeit a relatively simple one) for the Ouya console and probably PC and Mac with both online and single player play. Yes, I get very much ahead of myself. I am hoping I can at least amass enough knowledge to start by March. That will have been almost two years of learning. I initially (and foolishly) hated it when people said it took a long time to learn this stuff, and I wanted to make stuff NOW, but I have really wasted this time chasing after games I can never make. I hope I can make this one, however, as it is a very good idea. That final sentence was very cliche.
I hope you finish something and become more productive than my sorry lazy ass, as laziness and/or idleness will NOT get you anywhere and waste ALL of your time.

C dominates the world of linear procedural computing, which won't advance. The future lies in MASSIVE parallelism.

Learn c++ and QT. Then you can do almost anything cross platform too.

If this post or signature was helpful and/or constructive please give rep.

// C++ Video tutorials

http://www.youtube.com/watch?v=Wo60USYV9Ik

// Easy to learn 2D Game Library c++

SFML2.2 Download http://www.sfml-dev.org/download.php

SFML2.2 Tutorials http://www.sfml-dev.org/tutorials/2.2/

// Excellent 2d physics library Box2D

http://box2d.org/about/

// SFML 2 book

http://www.amazon.com/gp/product/1849696845/ref=as_li_ss_tl?ie=UTF8&camp=1789&creative=390957&creativeASIN=1849696845&linkCode=as2&tag=gamer2creator-20


After learning the basics of the C Language, I don't quite know what to do with myself. I mean, I've been craving to start SOMETHING and I've already made myself a basic stat roller for Dungeons and Dragons and the basic programs assigned to me by my professor. But I don't know where to go from here. I've heard many stories that Learning C or C++ as your first language is not exactly the best thing to do since the learning curve can be very steep for some, but I've had no qualms with it. Maybe I'm an exception? Or maybe I don't quite understand it as well as I think. I'm not sure, but I've come to gamedev to ask you masters of the keyboard to guide me in the right direction.

I've been wanting to get into learning Java, I'm going to try and take a class for it next quarter (if I pass this quarter's intro to C [Damn my laziness]) and I'm not sure if that's where I want to go. I would love to take up programming professionally, I just am not sure what exacty I want to do with the knowledge I'm collecting. I know that C, so far, is very memory based and seemingly more intricate than the programming I had invisioned, but I find it extremely fun.

I would like to be able to use C and C++ in some way, shape, or form. I kind of invision myself to be one of those guys that makes game engines like the unreal engine or something. I always thought it would be cool to be the un-sung heroes of the gaming world, making some of the fastest, most powerful gaming tools on the market. But then again, I also want to be a rock star... so you can see my indecisiveness.

Anyway, i'm merely rambling as I always do.

My point is... Where do you guys think I should go next? Do you think that I could take another class of c and c++ and be able to find a programming job this way? Or do I need to learn a lot more languages before I can even consider turning in an application for even the lowest levels of the programming profession.


Some of the smartest programmers that I ever knew professionally were college or even highschool dropouts. Its possible to get into the industry without taking any classes at all, however, it is not easy to do.
I guarentee that learning C first is not at all a mistake, its easier to learn other languages, however, learning C will help you understand what you are actually doing, whereas many Java and C# programmers have no clue at all what they are doing, they are just typing magic words. Using C will help you understand what is happening internally in your computer, and as a result, you may have more trouble learning, but in the end, you will probably end up being producing better quality code when you are finished learning, so I highly recommend continuing to learn C and avoid Java and C# at all costs. Especially if you are interested in game programming.
However, you should know that now, Android programming is pretty hot, so if you want to develop Android applications, you should know at least some Java, you can do C programming on Android, but officially applications on Android should be written in Java (I personally don't care and write mine in C, but its fine for me because I don't plan to release my software as Android software).
If you are willing to try to write hardware drivers, then C is the best language to know.
For speed, efficiency, and resource conservation, you can't do much better than C. Some languages can about match C such as pascal, but C is more powerful because of the amount of libraries written in C, you can't expect everything to have a pascal binding for you. The only language that is actually faster than C is assembly, and most people find that to just be infeasible on modern computers, especially if you want any portability at all.
So basically, figure out what your goal is and work toward that. However, my recommendation is to stick with C.

Some of the smartest programmers that I ever knew professionally were college or even highschool dropouts. Its possible to get into the industry without taking any classes at all, however, it is not easy to do.
I guarentee that learning C first is not at all a mistake, its easier to learn other languages, however, learning C will help you understand what you are actually doing, whereas many Java and C# programmers have no clue at all what they are doing, they are just typing magic words. Using C will help you understand what is happening internally in your computer, and as a result, you may have more trouble learning, but in the end, you will probably end up being producing better quality code when you are finished learning, so I highly recommend continuing to learn C and avoid Java and C# at all costs. Especially if you are interested in game programming.
However, you should know that now, Android programming is pretty hot, so if you want to develop Android applications, you should know at least some Java, you can do C programming on Android, but officially applications on Android should be written in Java (I personally don't care and write mine in C, but its fine for me because I don't plan to release my software as Android software).
If you are willing to try to write hardware drivers, then C is the best language to know.
For speed, efficiency, and resource conservation, you can't do much better than C. Some languages can about match C such as pascal, but C is more powerful because of the amount of libraries written in C, you can't expect everything to have a pascal binding for you. The only language that is actually faster than C is assembly, and most people find that to just be infeasible on modern computers, especially if you want any portability at all.
So basically, figure out what your goal is and work toward that. However, my recommendation is to stick with C.

I won't start an argument here, since that'd probably turn into the usual my-language-is-better-than-yours, but I just want people to know there are some things in this text that is quite arguable... [size=2](however, I'm not saying C is a bad language)

As for the OP: I agree with those that suggest you learn an OO language, like java or C# as those languages are kinda the 'opposite end' of C. Knowing OO is a good skill to have as a programmer in general, and it might prove interesting for someone who has programmed in a language were you have full control of everything, to try a language were you have very little control.
I would like to point out to the OP that the path to mastering a programming language (or a paradigm) is steep. Ask yourself: which concepts don't I understand completely? The memory management? Casting? The preprocessor? Bit shifts? Floating point numbers? String management? The standard library? Think about those. Don't assume that you know the whole foundation of C. Read about those concepts that you don't understand perfectly and experiment. Understand that learning language and mastering it to use it effectively are two entirely different things.

About C++ and Java – I personally think that it is easier to switch from a low-level language to a high-level one. It's like "hey, great libraries, rapid and easier coding, hooray!" as opposed to "man, there is no garbage collector, screw the memory management". But it is your call.
Hi, fellow dreamer! biggrin.png


I would like to be able to use C and C++ in some way, shape, or form. I kind of invision myself to be one of those guys that makes game engines like the unreal engine or something. I always thought it would be cool to be the un-sung heroes of the gaming world, making some of the fastest, most powerful gaming tools on the market. But then again, I also want to be a rock star... so you can see my indecisiveness.

Anyway, i'm merely rambling as I always do.

My point is... Where do you guys think I should go next? Do you think that I could take another class of c and c++ and be able to find a programming job this way? Or do I need to learn a lot more languages before I can even consider turning in an application for even the lowest levels of the programming profession.


Where should you go next? Are you kidding or something? Don't you see the opportunity before your eyes? Just in case you don't, I will explain...

It is good that you came here for advice, so you can find a path, plan, course, and career direction. There is nothing wrong with indecisiveness at this point in your school course as long as it is short, but I will help you decide. It is normal to hesitate at a crossroad, but I am glad that you are concerned about it. Looking at your map, are you? Great! Asking for directions? Wonderful!

Completing education is important for your reputation and knowledge. Hopping, cancelling, and restarting things is inefficient. You need to choose a course and see it to the end or some big opportunity is presented. Learn each language well! Better to master a couple languages than be mediocre and ineffective at several more.


Please, please, please, take the following as constructive criticism:

First thing that you need to do is decide what you want for a career and be fully committed to it, as you revealed earlier.
Second is to look at your options, but you need to ask for more advice in the near future other than this thread - use several sources.
Third is to begin to research your options in more depth than this thread can provide.

By the time you finish school, I am sure, you will have understood the above three. There is no hurry on a career choice because you are in school to bring structure to your indecisive self - actually a good decision on your part - going to school being an action decision.

You say that you learned C, but where are your real world projects that you created in C? Other than school, what have you accomplished in C? Do you realize that this practical applying of C which I mention here may actually take years to achieve? I recommend that you continue learning C in future classes and slowly add other languages which match your career goals.

Learn one or two languages at this stage and keep working with them long term. You really need a core language around which you learn other things, including other languages. Why don't you ask a professor? They are supposed to have good information about career choices with programming.

As for game development, any of the languages which you mentioned and many more would be powerful and effective for a skilled programmer.


Please don't choose a career path based on seeking glory alone! Having been a semi-professional musician and recently semi-pro in game assets, I feel obligated to let you know that you need a burning desire that people enjoy your art, but not necessarily for glory's sake. You must enjoy the journey as well as the end results.

Big dreamers like you and me need to cultivate our good habits so we can get past the fantasy and take action! dry.png A fix for you is to study the lives of highly successful and decisive people, for example as revealed by the master of success - Napolean Hill. Find inspiration which is deep inside you. biggrin.png

Know your condition inside and you will be able to decide what you want to do. When all else fails, plan by what you want and take action! The progress made by your desires is most important! No desire? Don't know what you want? Well... flip a coin between wanting to be a rock star or a gaming star, then put your whole heart and energy into it! ... you dreamer, you! tongue.png



Clinton

Personal life and your private thoughts always effect your career. Research is the intellectual backbone of game development and the first order. Version Control is crucial for full management of applications and software. The better the workflow pipeline, then the greater the potential output for a quality game. Completing projects is the last but finest order.

by Clinton, 3Ddreamer

Prefantastic: make a turn-based, multiplayer opengl game.
I mostly agree with tufflax and BeerNutts. Whether you are learning new languages or not, try to get actually good at one and do larger projects with it. Only when you are good enough with your tools that you don't have to pay a lot of attention to them, you start developing the big-picture skills that make a good programmer. Just superficially learning a bunch of languages one after another takes you nowhere.

I'm a teaching assistant at a university level C course. We do not teach programming - we teach the C99 language. (The course assumes previous programming skill in some other language.) It is a semester long, and I think it is supposed to take the average student about 160 hours of work to complete, most of that being exercise / coding time. In that time we can barely cover all the fundamental building blocks you use to do stuff in C. Topics include maybe 1/3 of the standard library, bit manipulation, memory management, macros, generic programming, modular/object oriented programming. Any memory leaks or illegal reads/writes will kill your exercise scores so you better learn to use a memory analyzer. Plenty of things like build control, debuggers or static analyzers which are critical for professional C development are not covered. Completing the course with the highest grade means the student "kind-of knows C" and has a good basis for learning further. It doesn't indicate in the slightest that the student is a decent C programmer, much less a good one. If you write a semi-serious game or other app in C - let's say couple thousand lines of code from scratch - and it works and isn't a horrible pile of bugs, then you are a decent C programmer.

[quote name='Prefantastic' timestamp='1352105750' post='4997500']
After learning the basics of the C Language, I don't quite know what to do with myself. I mean, I've been craving to start SOMETHING and I've already made myself a basic stat roller for Dungeons and Dragons and the basic programs assigned to me by my professor. But I don't know where to go from here. I've heard many stories that Learning C or C++ as your first language is not exactly the best thing to do since the learning curve can be very steep for some, but I've had no qualms with it. Maybe I'm an exception? Or maybe I don't quite understand it as well as I think. I'm not sure, but I've come to gamedev to ask you masters of the keyboard to guide me in the right direction.

I've been wanting to get into learning Java, I'm going to try and take a class for it next quarter (if I pass this quarter's intro to C [Damn my laziness]) and I'm not sure if that's where I want to go. I would love to take up programming professionally, I just am not sure what exacty I want to do with the knowledge I'm collecting. I know that C, so far, is very memory based and seemingly more intricate than the programming I had invisioned, but I find it extremely fun.

I would like to be able to use C and C++ in some way, shape, or form. I kind of invision myself to be one of those guys that makes game engines like the unreal engine or something. I always thought it would be cool to be the un-sung heroes of the gaming world, making some of the fastest, most powerful gaming tools on the market. But then again, I also want to be a rock star... so you can see my indecisiveness.

Anyway, i'm merely rambling as I always do.

My point is... Where do you guys think I should go next? Do you think that I could take another class of c and c++ and be able to find a programming job this way? Or do I need to learn a lot more languages before I can even consider turning in an application for even the lowest levels of the programming profession.


Some of the smartest programmers that I ever knew professionally were college or even highschool dropouts. Its possible to get into the industry without taking any classes at all, however, it is not easy to do.
[/quote]
That type of people tend to stand out and get hired or start their own business before they graduate. I'd strongly recommend staying in school until you either get a degree or a job (If the job offer comes before the degree you probably want to make sure that you can go back and finish the degree later if things don't work out in the long run)
[size="1"]I don't suffer from insanity, I'm enjoying every minute of it.
The voices in my head may not be real, but they have some good ideas!

This topic is closed to new replies.

Advertisement