Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
chexwarrior

Help For a Novice Programmer

Recommended Posts

Hey guys,

I've been learning C++ on my own and in school for about a year and a half. In my free time I work on my own little projects.

I was recently told by a friend that a great way to get better at coding is to participate in open source projects. Anyone have an idea as to where I could find a good project for a programmer with my skills?

I wouldn't call myself an absolute beginner but I am indeed a novice. I get lazy about programming sometimes, but when I start on a project I can go for a whole day without doing anything else... I guess I'm trying to say that I love coding.

As for my skill level, I'm not exactly sure how you "rate" a programmers abilities...

Share this post


Link to post

sample work that you think demonstrates the current extent of your abilities and what exactly you're already familiar with (coding methodology, textbook programming concepts, specific libraries/target platforms, whatever) would be helpful for us to make suggestions from

Share this post


Link to post

Rather than trying to find projects "appropriate" for your skill level you should try to come up with something that you yourself find interesting to do, even if it might feel too hard (makes you learn new stuff faster) or too easy (repetition, repetition and repetition, never hurt anyone). I could mention an experience of my own, I initially began programming with C# and my first journey to C++ was with modding one commercial RTS game. Everything C++ that existed was completely new to me, even pointers, so it was a ton of stuff to learn but since the "subject" interested me the learning curve wasn't much of an issue.

So since you already know the basics for programming, more than anything find something you yourself enjoy doing. Whether it's an open source game or not.

Share this post


Link to post
Chex Warrior said:

Hey guys,

I've been learning C++ on my own and in school for about a year and a half. In my free time I work on my own little projects.

I was recently told by a friend that a great way to get better at coding is to participate in open source projects. Anyone have an idea as to where I could find a good project for a programmer with my skills?

I wouldn't call myself an absolute beginner but I am indeed a novice. I get lazy about programming sometimes, but when I start on a project I can go for a whole day without doing anything else... I guess I'm trying to say that I love coding.

As for my skill level, I'm not exactly sure how you "rate" a programmers abilities...


Open Source projects are indeed a very good way to practice coding, and if you can get yourself involved with one that would be a big plus.

If you think you could brush up on your coding skills however, I'd start by perhaps making a few small programs, such as a program that can determine if an numerical input is prime or not (also don't forget to include exceptions in cased they put in a string). Perhaps you could then either improve on those programs or make something a little bigger, such as a small game as Snakes, and as you feel more comfortable, you can move on to bigger projects. Remember, practice makes perfect.

One thing that I cannot emphasize enough is how important teamwork is. Being able to program alone is one thing, being able to work on a team is another, and having that skill will definitely help you when you are employed (if you work as a programmer).

These are just some ideas to possibly consider; it's O.K. if you want to embark on an open source project now. Another idea is to potentially work on both the open source project and smaller ones to practice your coding at the same time (if you have the time).

Share this post


Link to post

I suppose it's a good idea but the entrylevel any coder needs in order to understand foreign code (of a project you are aware of and possibly enjoy/appreciate/use, at that) is quite high, unfortunately.

Until you have a good grasp of, say (and don't take me for granted on this, please, just as my own personal experience dictates it), derivation of classes (with all the public, protected, private, virtual kinks), templates, the needs for static/reinterpret/dynamic/const casts, operator overloading, copy/init constructors, virtual functions, messing with pointers and a bit of STL, most of the open source projects out there are a bit convoluted and difficult to grasp.

The fault really doens't lay in your skills, but rather the gargantuan size of the Internet. Most everything has been done that can be done by low-to-highly skilled coders. That doesn't mean you necessarily like how these projects were tackled, but you certainly need to ignore the internet if you want to make something "useful".

I'm making a 3d engine in my spare time, but truth be told they've been done to death. There's at least a dozen free engines out there in the quarter of a million to a million lines of code range, far more complex than mine will ever be. But you know, I don't give a shit, and neither should you, because the best way to learn is to make something you really love.

Just think of what you do with your computer. What kind of programs do you use? Do you play games? Make a nice small game you can keep adding stuff onto as you refine the concept and your skills. Are you the kind of person who needs to keep track of things to do? Do a ToDo list manager where you can cross off and add new tasks, maybe add alarms. How about writing a TGA or PNG image loader?

Just do stuff you like or need, and ignore everything out there but the colossal amount of readily available documentation and manuals. Myself, a week ago I made myself a small app that takes a phrase and turns it into a big ASCII drawn banner I paste to my C++ code to better visualize what each chunk of code is at a glance. Did I need to code such thing? Hell no, nor is it necessary to make any more image loading libraries, productivity apps or game development kits. But you have to not care.

Share this post


Link to post

Hellspawn or any other coders, I was wondering if you could answer a few questions for me.

Like the original poster, I started off learning C++ a couple years back. I'm proficient at using what I know of the language and have developed both console and graphical games. The thing is though, I know that I can program things by myself but I've always wondered how programming in a team works out?

Some things that I've wondered about working in a team as a programmer:

(I'll use creating games as an example)

Usually in a team of coders you have people who work on specific components like graphics, input, gameplay, UI, AI, audio and so on.

1. How do the coders from the separate components know how their code is going to fit together? Say you have a gameplay programmer working on event handling. Eventually, during the event handling some functions will be called that will call on certain components like the others.

2. How do programmers working on one component work together? For example if working on graphics say there are 3 coders. Each of them will likely write classes that do their specific things. How do they know what function parameters to include and anything else so that their code will mesh nicely with the others?

Those are the things that I've really wondered about. Obviously communication is very important.

-------

Zaldron

That's something I always wondered as well. Young kids at gamedev.net are always asking, "How do I make nex roXorZ enginez!" I'm like, why would you want to? There's tons of them out there. They've been done to death.

I understand you're doing it for fun. I'm looking forward to creating my own graphics engine as well but I'm considering maybe it'll be a waste of time. I can see how it's beneficial in understanding infrastructure but is it possible to learn that from working with an already created engine? Don't know this myself so looking for an answer.

Share this post


Link to post

Working in an engine from scratch is a complete godsend. Really, if commercial success is not an immediate goal of yours, you shouldn't really worry about any of these:

1) if you are or will be skilled enough to actually finish it.
2) if it's been done to death by much better coders.
3) if you will see through the end of it or get bored way before accomplishing anything.

Remember that your true motivation is the refinement of your skills, the experience that lends itself to write or rewrite more elegant code in the future. Even if your little project doesn't see the light of the day, doesn't sell shit, no one cares about it, or it's simply too clunky/slow..it doesn't really matter from a programming standpoint. You made it, you improved, you learned a few tricks, and if you had to do it all over from scratch, you would make a few more right choices.

In the process of making an engine, an obviously daunting task, you have to take care of many, many details, both big and small. I learned C++ I/O by making all the debugging/logging subroutines, I learned how to make tokens out of strings to parse scripts and configuration files (a few days of work on this tangent and I could make my own slow ass shitty language, but hey! it's a new language!). I learned about organizing modules and components, data sharing and proper class hierarchies simply by the sheer need of having separate things do their own job and be able to share the results. I learned to use the STL for the very first time by building a texture to font manager for OpenGL, I learned about memory management by coding a runtime resource fetcher, POSIX threads by the need of taking advantage of the other core to fetch data from the disk.. the list goes on and on.

Neither of these topics is particularly fetching by itself, but it sure helps to keep motivated by having a grandiose plan that encompasses a lot of smaller disciplines. Learning from a previously made engine won't help you in figuring out anything, but the engine itself. It's no different than any other API or SDK.

EDIT: as far as teamwork goes, the idea is that once tasks are handed out to each member, you hammer away a very good plan of how your component will act, and make an appropriate header file out of it. The other members will work by the book with it, just as you don't linger on the inner mechanisms of <cstdio> or <vector>, you just read the descriptions, check the parameter and return types, and hope the one responsible for the actual code does his job. Of course, there is a need for one dictator, one lead coder who glues everything together.

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×