Language Advice

Started by
12 comments, last by nooblet 10 years, 11 months ago

Hello!

First and foremost, I'm very very sorry for creating another thread about this same topic. I've been searching the internet for opinions regarding this, but there's quite the diversity in responses it appears. Basically, I'm in a pickle between learning C++ and C# at this point. I'd like to elaborate for those who are interested in helping me.

I've been programming for many years, on and off, originally learning C++ and then migrating to C# when I realized how much easier it was. I absolutely love to program, but when I start to need to learn the "intermediate" or "advanced" topics of a language, I start to get discouraged and stop programming for months. I want to dedicate an hour or two of my time each day for the next year or so to just learn a language from the absolute basics to the more advanced topics. I don't just want to develop games, I want to become a programmer. I know for a fact that I'll have to learn C++ at one point in my life, but when I think about pointers, linked lists, algorithms, etc., I just want to immediately say "nope" and go back to C# where it's nice and cozy and I have someone holding my hand.

Basically, I'm relatively comfortable with both; with C++ I stopped using it when pointers were involved, and with C#, I stopped when I realized I had no idea what dictionaries do, how to do exception handling, or how to handle events. I want to become a programmer but I always get intimidated when it comes to more complicated topics and discourage myself from programming the next day. Not only that, but I can't ever find any good resources that appeal and grab my attention, and when I search on the forums, it usually has outdated recommendations that don't really work for me.

Anyways, I hope that covered where I'm at. If you have any recommendations, please feel free to throw them my way. Thanks so much!

TLDR: Stopped learning C++, went to C#, getting stuck at the "harder" subjects for both languages, and now I'm having trouble deciding if I should continue down C# or start to learn C++ now to make myself a better programmer.

Advertisement
Why are you learning to program?

I enjoy art but am not a professional artist. I have taken art classes. I own an easel and a huge pile of art pads and have a shelf full of paint and pencils and drawing stuff. I study art and anatomy and cloth folds and color theory, and I do it because it is fun. I won't be a professional artist because I don't study the important topics that I don't like, but I'm okay with that. I can draw and paint, my daughters fight over who gets the paintings, and my family has framed a few of my creations. My intention is not to become a professional artist, but to enjoy creating art on my own.

Also, I enjoy law. I have taken classes on law, I have studied business law and IP law, but I have no intention to become a lawyer. If I need a lawyer I'm the first to admit I need to hire one. I am happy with the knowledge I have and my ability to interpret and understand legal documents.


If you are learning about programming to become a professional programmer you will need to study the topics. A professional programmer must know the data structures and algorithms. A hobbiest programmer can dabble, but they need to understand they won't reach the same level of competency and ability of a professional. And a hobbiest is okay with that.

So, why are you learning? Is your intention to be a professional and produce professional-quality work, or is it to dabble and enjoy the hobby?

Hi frob,

It's funny that you of all people responded. I found a response from you in another thread (prior to creating this one) so I went through some of your posts to see your opinions and to do some more research. That, and I enjoy reading posts from those in the industry currently. To answer your question, although it's rhetorical (at least, the way I interpret it), I want to be a professional programmer (more specifically a game developer, but I'd like to branch myself out because I feel like the industry may be out of grasp for me), so it appears the next steps for me is to pick up a C++ book and try really hard to study these concepts and work my way towards becoming a professional.

Thank you for your insight, hopefully I can motivate myself to continue past my frustrations.

Since your goal is to program games professionally, understand that a professional game programmer usually has a four-year degree in computer science and has studied a broad base of topics (even the topics he doesn't like), or that the programmer has independently studied those same topics and created games in the process, often making a lateral move into games programming from a different programming job.

Matters of pointers and linked lists and exception handling are small things. They are implementation details. There are many more topics to study. About four years worth of topics.

If your intention is to get a job as a programmer at a game studio you will face the same requirements as any other job candidate. You don't exist in a vacuum and will need to be the best candidate for the job. Depending on where you are in life that may mean going back to school and getting a degree in computer science, or it may mean taking night classes in addition to self-educating and building your portfolio to the point of a lateral career move.

Understood! I plan on going back to school this Fall, possibly taking care of my general education credits at a community college and then going to university again to work towards my CS degree (currently have enough credits to be considered a sophomore but didn't register for classes due to work). I think the points that you bring up is something that I needed to hear/read. I needed a reminder that I'll have to deal with topics that I may find boring to help land a career that I've wanted since high school. Again, I appreciate you taking the time to help me out with this! Thank you very much. For right now, I'm going to study the implementation and start self-teaching myself so that I can build my portfolio during school, and then I'll work towards the other topics when the time comes.

Other than going to school, one can certainly be a self-taught programmer. But, the main requirement for this is interest. You must be interested and excited in learning about programming and game-related topics like rendering, physics, scripting, optimization, multi-threading, and many others. I'm not saying that you need to be interested in all of these, but being interested in at least some is good. If your reaction to having to learn about pointers and other topics is to not want to do it, then you might want to re-examine why you want to do this in the first place.

If you do decide you have the interest and want to continue teaching yourself, then I'd suggest going about it like this: Start with a broad and shallow approach, working through a good introductory book, and then do small projects afterwards. The idea here being that in game programming and C++, there's a lot to cover and master. Trying to master things one at a time is hopeless and doomed to failure. You need to gain a wide understanding of what the language can do and what topics will arise in game development. At that point you'll know what questions to ask, and where to look for answers when problems arise. Then, to get a deeper understanding of specific topics, do different small game-related projects. This will allow you to do something that's interesting, and where game-related issues will come up naturally. You will have to use specific algorithms or programming techniques, and as you get more familiar with those and implement them, at that point you will get the deeper expertise you need... in that specific topic. Do this over a year or two and then you'll start to be a decent all around game programmer.

Basically, I'm relatively comfortable with both; with C++ I stopped using it when pointers were involved, and with C#, I stopped when I realized I had no idea what dictionaries do, how to do exception handling, or how to handle events.


I don't have much to add that wasn't already said, but I do have this to say. You will have a better understanding of what dictionaries are if you have a solid grasp of concepts in C++ like pointers and data structures; a dictionary or map is often implemented like a hash table or a red-black tree. I know that this knowledge isn't quite useful now, but my point is, if you progress in your understanding in one language, you will have knowledge you can apply to both languages.

Thanks everybody for your input with this.

@0r0d- It's not that I don't want to learn the material, it's the fact that I get frustrated with myself when I can't grasp the concept initially and eventually give up and blame the resource from which I'm learning the concept, although it's just me not pacing myself. Whenever I program without studying from a book or tutorial, I always have a blast and end up doing it for 12-14 hours straight because I don't realize the time has flown by.

@Ectara - Yeah, I definitely understand what you mean. When I was studying C++, I learned some object-oriented principles, and of course the basics (like variables, functions, blah blah), so when I transitioned into C# it was amazing how much simpler it was to learn and grasp new concepts instead of spending days reading books and tutorials to try and figure out what functions and methods meant :P.

If it helps, most of my C/C++ knowledge came not from reading books cover-to-cover, but from deciding what I want to do, and writing until I didn't know how to do something I needed to do. Then, I looked up how to do it in the most efficient way, and moved on. Repeat 100,000 times, and you're a wizard. I do have a lot of books, but most of them cover topics I already learned elsewhere.

If I had to pick something to understand first and foremost, go for pointers. Linked lists are nothing without pointers, and once you learn what a pointer is and why it is one of the most important things in a programming language (whether you manage them yourself, or the language does it for you), a lot of things will come easily.

my advice is to learn by doing, not learn to learn.

It's pointless to sit down with a C++ trying to understand everything without a final target.

Once you have the concept of functions and flow control you have all you need to create whatever program you want.. yes, the code will be ugly but it is important you get something done... only by doing messy programs you will really understand why higher abstractions are good and useful.

Learn to learn, in something as practical as programming, is just wasting time imo. Knowing a programming language is only a small part of being a programmer, the real skills are problem solving and the ability to find the info needed to solve a problem... that is where the line really is.

Stefano Casillo
TWITTER: [twitter]KunosStefano[/twitter]
AssettoCorsa - netKar PRO - Kunos Simulazioni

This topic is closed to new replies.

Advertisement