# Can anyone be a good programmer?

## Recommended Posts

Hi, I've been wanting to develop games for a while, not proffesionally but as a hobby, and have been putting the idea off because I don't think I would make a good programmer. I've learned a lot of beginner stuff with c++, and havn't had any trouble, but was wandering if it was worth it to keep going? I don't think in terms of mathmatical equations, I'm a very abstract thinker which makes me a good artist and musician. In programming, it's very straigh forward and precise... I actually do enjoy programming from what I have learned, but do you think it's possible for anyone to be a good game programmer if they simply want to be and are willing to work hard enough at it? Just thought I would get some feedback before I forked over $200 for visual c++. #### Share this post ##### Link to post ##### Share on other sites "Good" is a very subjective - and relative - term. If you genuinely are willing to work hard, then of course you can develop some very impressive skills. Everyone has a huge amount of potential; some people simply need more time to reach it, and some people have a combination of time, drive, and certain thought patterns that give them a higher "limit" on what they can practically acheive. What you get out of it depends entirely on what you put into it. I'd say in general that thinking abstractly is not a bad thing at all. A lot of people have a misconception that programming is mathematics, because they both use some funky symbols and magic words to talk about things. In reality, programming has little at all to do with writing code; the real skill of programming lies in the design, the consideration of problems at concepts at a high, abstract level. If you're referring to "abstract thinking" in the usual sense, you've got a good head start on the thought processes you'll need for programming. All that's left is actually investing the time and effort - and that's up to you [smile] #### Share this post ##### Link to post ##### Share on other sites Dear friend, I have always believed that if you really want something you will end up achieving it. Specially, since you are willing to work hard, you will get there faster. However, if you see that it does not work for you, you can hire someone to program the game for you. Art and music is what you will work on, so it is still your game you will be working on. Programming is just a part of game development, art is a very important part of it as well. Best of luck to whatever path you choose. #### Share this post ##### Link to post ##### Share on other sites While I would like to say that anybody who puts in the effort can become a good programmer, empirical evidence from my time in undergrad suggests otherwise. Fortunately, you can try programming without forking over money. Microsoft has released Visual C++ .NET 2005 Express Edition for free for download on their website, so you might want to try that out. Or while you're at try a different language like C# which tends to be easier than C++. #### Share this post ##### Link to post ##### Share on other sites Yes, you can. Programming is a craft, it can be learned. Before you buy Visual C++ however, see if Visual C++ 2003 Toolkit or Visual C++ 2005 Express fits your needs. Both are free to use (even comercially) for unlimited time (2005 only if you download within the 12 months free period, after which it will cost 49$).

Konfusius say: SiCrane is faster.

##### Share on other sites
One more thing, Visual C++ 2005 Express is currently available -for free- from the Microsoft website. Limited time only ;)

/edit: waaay too late

##### Share on other sites
If you like thinking abstract, and 'just' want to do some hobby programming, you might want to reconsider your choice of language. C++ has it merits, but compared to other languages requires a lot of experience and carefull coding to avoid making obscure mistakes.

I don't want to start a war or anything, but you might want to try out something like python for quick and abstract coding. Lessons learned there can then be brought back to C++ if you want more speed.

##### Share on other sites
You may not be giving yourself enough credit. I'm a programmer and have a very technical thought process (whatever that means) - yet I'm also a musician, and used to be an artist (I lost that skill a few years ago though - inexplicably really).
I don't know what level musician you are, but in music theory and subjects of that caliber you do a lot with math. Sure it might not be matrices and quaternions - but if you're a great musician it means you have a great grasp of how the math you need is used in music.
I do have trouble with the creativity side of music - but as long as I stick with it (and with the occassional nudge from the otehr members of my bands) I usually get through hard parts and do fine.

So, given that you say the c++ you have done thus far has been no great challenge, and given you're great with the maths involved with music, I'd say you don't have any reason yet to doubt your chances with programming.

##### Share on other sites
The abstract thinking really is the heart of programming. I found that three years ago when I first took a computer science course at my highschool. The first thing we did was this pseudo code activity where we discussed the instructions needed to tell a guy to get out of bed at night and get a drink of water, then get back up into bed.

You can really tell how good of a programmer you'll be by how you approach this. Its really about looking at a problem as a bunch of smaller ones, then breaking them down further and so on and so on.

Some people might say, "get out of bed, take one step at a time to walk down the stairs, grab the glass, pour in some water... etc."

The programmer would think of each thing seperately, for example, after he gets out of bed and is standing, what does he do? Well he has to walk towards the door presumably. How does he do that? Well he has to find the door and orient himself... how? Well scan the room for the door... how? angle the head at soandso angle and scan towards the side until you find the door. How do you know its the door? well you see if the object is.... well you get the point right?

and then the good programmer would take it further will error checking so to speak. What if its dark? What if thers some obstruction between him and the door? what if there is no door? etc...

:)

##### Share on other sites
Ive been programming for 9 years, professionaly for at least 4 (C/C++ has always been my primary language).

Im the same as you, an abstract thinker. When I was younger i was in the TAG (talented and gifted) program in the school system for exception creativity and something known as abstract reasoning. The career outlook tests you took placed me as an artist or a musician, and the occupation least fitting would have been, ironicaly, a programmer. This is all based on the false assumption that mathamatics is the foundation of programming. My mathamatics skill is sufficiant at best (average marks in calculus). Programming, as mentioned in previous posts, is like 70% about the design and architecture. You need to know the language fluently, but math is not required much in programming, other then reasonable understandings of algebra. On the other hand, a games programmer dealing with physics, geometric, cryptography, and compression alogorithms will probably need a great deal more as far as mathamatics goes.

So by all means , learn programming, you are actualy more fit then you probably realize. On the other hand, you will probably have some problems with the physics aspects. In team based efforts, often the math wiz (not the programming wiz) is the one in charge of those portions.

##### Share on other sites
Not anyone can become a good programmer, and some 95% of the population totally lack the part of the brain that deals with pointers. Most of those folks can still learn to program they'll just have to stay away from low level languages.

Quote:
 Original post by jelly_donutI don't think in terms of mathmatical equations, I'm a very abstract thinker which makes me a good artist and musician. In programming, it's very straigh forward and precise...

This is a great misconception. The ability to abstract is probably one of the most valuable skills there is, espically when working on big projects.

Saying programing is straight forward and precise, rigid one might say, is like saying music is just about chords and notes.

Bluntly put, they're both crafts that when you got the basics down your ability to see beyond the current state and imagine the system as a whole is crucial.

If you enjoy it, go for it. By asking for input you have already showd greater apptitude for it than most.

##### Share on other sites
Quote:
 Original post by DigitalDelusionNot anyone can become a good programmer, and some 95% of the population totally lack the part of the brain that deals with pointers.

Saying 95% of people can't understand the use of pointers is like saying 95% of people can't understand the concept of driving directions:
If you have directions to a place you don't have the stuff at the place, but you can get to it if you use the directions correctly... (dereferencing pointer)
If you delete what's at the end of the directions you still have the directions laying about - it's just that what you expect them to point to doesn't exist anymore... like directions to the worlds fair =P (deleting a dynamic object, and then dereferencing an old pointer)
And lastly, you can change the directions, but the thing they used to direct you to still exists - you just don't know how to get to it... (re-assigning a pointer without deleting what it used to point to)

See, pointers are easy... I mean there's far fewer crazy drivers making you fearful for your life when using a pointer than when driving somewhere ;)

##### Share on other sites
Evidence suggests to me:

- Most (but not all) people can become more or less competent (i.e., won't be a net drain on a multi-person project) programmers.
- A small percentage can become programmers good enough that I would actually respect them.
- Very, very few people can become truly *good* programmers.

But I'm just cynical :)

And yes, abstraction is very definitely a useful skill for programming. So are creativity, visualization and talent for design.

The difference, I think, is that artists get a mental picture of something and then sit down and describe (by illustration) what it *looks* (or sounds, etc.) like, whereas programmers get the image and describe (by precise notation) what it *is* and *does*.

##### Share on other sites
Remember, you don't have to a good programmer to be a programmer. Just because some college professor wouldn't give you good marks for your code doesn't mean you can't achieve you hobby projects. A lot of what people think is good (modularity, extensibility, maintainability, eloquence, portability, optimization) may or may not be important to you, and are not strictly necissary for your project to work, or even work well.

##### Share on other sites
I'm 14 years old, don't know much math, in fact im getting 72% in Math 9 but im still doing fairly well in programming... if i dont know a bit of math (say Sin for example) i lookup one of my programming friends i met here on gamedev who assist me. Or i come to this wonderful place and ask questions.

##### Share on other sites
I would say, yes, most people could be good programmers. Although, whether most people would be willing to spend the time to become a good programmer is another question.

Anyway, as has been mentioned several times already, abstraction is an important part of programming (not just with OO either, but almost all (if not all) paradigms). Although, some parts of mathematics can help with abstraction, but they probably aren't the type of mathematics you're referring to (things like Lambda calculus and set theory). If you are curious what I mean by abstraction with ideas from lambda calculus, etc, you might find Haskell interesting.

##### Share on other sites

The act of writing program code is identical to the process of translation. If you can write in your native language, you can learn how to program.

The act of _designing_ a program well involves the ability to analyse a problem. It's basically a puzzle-solving thing. If you enjoy the occasional crossword puzzle, game of Sudoku or similar, software design isn't going to be a big problem.

None of the above requires a mastery of maths, physics or anything else. Programming is a linguistic exercise. I have been paid in this industry variously as a graphics artist, animator, game designer, sound designer and programmer -- sometimes all at the same time. I suck at maths. I can't even remember how to do long division.

What you need is an _analytical_ mind. The ability to analyse and see how to create the whole from its many component parts is all that really matters.

The sheer complexity of modern computers can put many people off, but that's where plain old dogged, stubborn, bloody-minded persistence comes in handy.

##### Share on other sites
Quote:
 I don't think in terms of mathmatical equations, I'm a very abstract thinker which makes me a good artist and musician. In programming, it's very straigh forward and precise... I actually do enjoy programming from what I have learned, but do you think it's possible for anyone to be a good game programmer if they simply want to be and are willing to work hard enough at it?

Hmm, two points. First, I don't think abstract thinking is a disadvantage at all. On the contrary.
And second, if you enjoy programming, then you can get good at it. (And even if you can't, you'll still be doing something you ernjoy, right? [wink])
Oh, and finally, you said you haven't had any trouble so far. So what's the problem? ;)

On the other hand, you might want to avoid forking out \$200 for software if you possibly can. Depending on what exactly you need, you can generally get by with free tools. (There are several free compilers that work fine. Even Microsoft is offering their for free)

##### Share on other sites
Quote:
 In Freshman year CompSci, there are always about 200 kids at the beginning of the semester, all of whom wrote complex adventure games in BASIC for their Atari 800s when they were 4 years old. They are having a good ol'; time learning Pascal in college, until one day their professor introduces pointers, and suddenly, they don't get it. They just don't understand anything any more. 90% of the class goes off and becomes PoliSci majors, then they tell their friends that there weren't enough good looking members of the appropriate sex in their CompSci classes, that's why they switched. For some reason most people seem to be born without the part of the brain that understands pointers. This is an aptitude thing, not a skill thing – it requires a complex form of doubly-indirected thinking that some people just can't do.

~ The Guerrilla Guide to Interviewing by Joel Spolsky

Argumentum ad veracumdium and all, but :P

##### Share on other sites
If you think more abstractly, and want to focus on content, the C languages might not be your best bet.

I highly suggest Python

It is the best beginners language, hands down. You don't have to worry about memory allocation, if you need an external library to do something, chances are it already exists, and you don't need to code it your self. For the most part, there is plenty of documentation to get going.

I've jumped over to python after years of coding in C/C++, it is a good language for development, and a great introudution to computer science in general.

If you like python, then give C/C++ a shot when you are ready, if you think you need them.

##### Share on other sites
That's like asking if anyone can be a rocket scientist, and the answer is yes.

##### Share on other sites
Quote:
Original post by me22
Quote:
 In Freshman year CompSci, there are always about 200 kids at the beginning of the semester, all of whom wrote complex adventure games in BASIC for their Atari 800s when they were 4 years old. They are having a good ol'; time learning Pascal in college, until one day their professor introduces pointers, and suddenly, they don't get it. They just don't understand anything any more. 90% of the class goes off and becomes PoliSci majors, then they tell their friends that there weren't enough good looking members of the appropriate sex in their CompSci classes, that's why they switched. For some reason most people seem to be born without the part of the brain that understands pointers. This is an aptitude thing, not a skill thing – it requires a complex form of doubly-indirected thinking that some people just can't do.

~ The Guerrilla Guide to Interviewing by Joel Spolsky

Argumentum ad veracumdium and all, but :P

Interesting. I also find this angle of "math is not programming" interesting as well. It has long bothered me that people suggest that the best programmer will be the best mathematician. I personally have always done well with math, but I always knew that I would not be the best at it (certaintly not the fastest). I could understand the concepts immediately and apply them, but when it came to the part of working out actual problems I was sloppy. The negative sign dissappeared, or a 3 became a 2, or the decimal place moved on its own. However, the math that I wrote down always had the right process.

With programming I mostly have to worry about the actual process rather than the exacting execution. The math understanding comes in mostly for figuring out the final equations that will be applied to solve a particular problem. Personally in programming, I have never needed to take out a pencil and paper and work out equations that have numerical answers. I have done that for reducing an equation to something more simple but that was mostly alegebra and a little calculus. As for matricies, once I understand the method to appling operations the coding for it is easy and working out optimizations is possible.

I cannot lay claim to any proffessional experience but that is the result of my 11 years of personal tinkering.

As I see it math has two important parts to it.
1) The abstract working out equations side. - This is crucial
2) The concrete work of solving equations and finding numbers. - The importance of this depends on what your are solving the equations for. In engineering and physics this is crucial.

Those human calculator guys are the ones who are good at number 2. I on the other hand will always need to check my answers, so #1 will remain the stronger trait in me.

I do admit that practice has improved my accuracy. However, I always find a few errors after rechecking my answers and a few times I have missed them even after the second check. I also believe that many math teachers out their are poor at explaining their thinking processes to students.

Now, in programming classes I have yet to meet a student that produces working code as fast as I do. Although I am usually the only one in the room with 11 years experience asside from the instructor who is retired and writes code that sometimes makes me cringe :\

##### Share on other sites
Quote:
 Original post by I_Smell_TunaThat's like asking if anyone can be a rocket scientist, and the answer is yes.

To be an astrodynamicist? If your not the fastest math student in your class you'll have a very long way to go. They're probably better uses for your time as well. You can be whatever you want but it's more sensible to pursue your true talents.

Anyway, I wanted to make one more comment on programming.

Programming is not math, programming is problem solving. The problem solving in programming often uses the methods of math to find the optimal solutions.

##### Share on other sites
I think that within the higher ranks of any profession/skill/art there are two types of people: Those with Talent and those with Skill.

Take, for example, music (it's a bit easier example to comprehend.) I have a friend whoe I swear came out of the womb with a keyboard attached. This kid can play ANYTHING on just about any instrument you give him, and he's been doing this since he was quite young. Now, that's not to say he hasn't worked at it. He's worked his ass off to get to where he is. Still, it's quite apparent that there is simply something about him and the way he thinks that helps everything "click" without much effort. He just "get's it". The construction of a chord is as natural and sensible to him as 1+1=2. He indisputably has talent when it comes to music, and I'm sure he'll go far with it.

Not everyone has that special "I get it!" part in their brain, though. At least not for most things. I can sit down with a guitar and strum some chords, play a few simple songs, and even play along with someone singing from time to time. I'm not anywhere near as good as my friend, but I'm also certain that if I were to devote to time and effort to it I could become nearly as good. I could become a skilled musician, one that came close to or matched a talented one. The only thing holding me back from that is lack of time and ambition. I'm a programmer, that's where I've found my talent. I grok pointers, objects, functions, and the like, while I have trouble figuring out why a chord progression works like it does. I'd rather continue to push myself at excelling at one thing than becoming "good" at several things.

So the short answer would be that anyone can become skilled at anything they set their mind to, while many people tend to be innately talented at some things, making it easier for them to excell at whatever it may be. Just because you lack talent shouldn't discourage you from persuing your interests though.