Confidence Building Projects

Pages: 123
Been sitting here today thinking. Books teach you the language and normally the exercises just have you do variants of previous book examples using the new material taught. Then it got me thinking, after 17 years I still have absolutely no confidence in my ability to program, even though I like helping others with the knowledge I do have. Which got me wondering, what are good coding projects to help build confidence?

Only reason I brought this up is because I've talked to quite a few beginners who refuse to join open source projects or work in team for the same reason I do. Feel like I would be inadequate for the jobs.
Last edited on by closed account z6A9GNh0
Hi BHXSpecter

Could you join an open source project, and ask that you be given a series of small tasks to do? Some thing that might take you 2 or 3 hours to do? That way it won't feel overwhelming, once finished a task, move onto the next one.

Even if they alter your code a bit, it is a learning experience.

Hope all goes well. :-)
Sadly, I don't even have the confidence to do that. My confidence in my own code is extremely low. That is why I find it so odd that I have no trouble helping other beginner programmers fix their code or punch up an example code.

Well, after 17 years of dabbling in it, it is embarrassing to admit, but yes I have no confidence in my abilities at all. I went to college hoping to turn my love of game programming into a career, but have irked away from that because I doubt myself in my abilities. I always feel like I don't really know C++ or anything and the more I talk to other programmers the dumber I feel. I see programmers talk about how the program all these types of things and I feel utterly stupid because I can't think of anything to program. I'm always told to program what interests you, but I can never think of anything that interests me coding wise (other than game programming and I appear to suck at that as it took six years before I could get enough confidence to even do a pong clone, which ended up sucking (and had a bug that I couldn't even figure out, someone else had to tell me to use abs() to fix the bug). The more I code the dumber I feel.

My confidence is so bad I've gone back o acting like I know nothing and started reading Accelerated C++ (out of the top 5 books recommended in a different thread I took part in) but it is going slowly as I'm only on chapter 3 of 16 (almost 4) and doing all the exercises. Sadly I don't know how to get of my lack of confidence in myself for coding.
Man we are in the same exact boat.
I feel like I don't know shit when I talk to some other veteran programmers. Just keep on coding. You'll eventually pump out a project you're really proud of. Or continue to finish projects and then think it sucks, which is how I feel about the IRC bot I made (which I think you saw on the cppcomp forum).

I'm just moving on. One day I'll make something I'm really proud of.
Sounds like you're in a bit of a rut, and you know it. TheIdeasMan put out a good idea. IMO you should intentionally go out of your comfort zone. For me, that's how I learn. Don't be afraid to feel dumb or look stupid. Also, working with others in an open environment where people are motivated to help each other and learn from mistakes is a great place to start. Try somewhere that you can get positive confirmation for your successes and accomplishments. Affirmation is huge in gaining personal confidence, and don't forget pride in your personal work will help too! :)
Last edited on
Sounds to me like you're just being overly critical of yourself. I know how that is, as I'm that way with a lot of things too (though not nearly as much as I used to be).


The trick is... nobody cares if your code sucks/is ugly. That only matters if someone else is going to be working on your code. So if you don't want it to matter, keep your code to yourself. Everybody has written code they're not particularly proud of, and/or looked back on the code later and said "wtf was I smoking when I wrote this". That's perfectly normal. Just roll with it.

This obviously is not a solution for coding professionally, since other people will be dealing with your code... but for personal hobbyist programming it's a huge relief. It's one of the reasons why I love hobbyist programming so much more than professional. You can do what you want at your own pace and nobody cares / is judgmental.


I also agree with ENIGMAx that you should work [a little] outside your comfort zone if you want to improve your abilities.




If you are willing to entertain project suggestions... one of the best (in that it was the most rewarding / most educational) projects I ever worked on was a retro system emulator. Specifically, NES since there's TONS of information available on the system and it's super well documented and has an active community.


Reasons why I recommend it:

- It's difficult, but not too difficult. Conceptually how the NES works is simple, but implementing it correctly gets involved.

- You don't have to worry about adding features to make it fun. Just emulate the system as best you can and let the games be fun on their own.

- It will teach you a LOT about low level programming, as you will be simulating a system down to raw register accesses. This will greatly aid your understanding of general programming concepts.

- Most (98%) of the code involved is logic based and not UI based... so it's waaaay more fun. About all you have to do on the UI portion is draw a single rectangle to the screen and get input from the user.

- It's incredibly satisfying to fire up your emu, load a ROM, and see the title screen show for the very first time. It even makes playing those old games more fun (because you're playing it in an emu YOU WROTE)

- It exercises debugging and problem solving skills... like MAD. Since most of the code is logical... one nasty logic bug can cause the whole emu to simply not work and give you a blank screen.

- There are lots of tools (test ROMs, "golden logs", etc) available to help you track down logic errors so you won't get fully lost in the woods.

- There are literally dozens of open source NES emus out already you can look at to get ideas / see how they work.


The big reason why you might not like it:

- It takes really long before you can actually see your code "pay off". You might code for days/weeks to get a functioning CPU/PPU and then spend another couple of days debugging before you get the emu to actually display a game's title screen properly. (but even during that time, the practice and education you get is crazy)
Last edited on
I'm suddenly motivated to write an NES emulator. :p
I recommend it to anyone. It really contributed to a lot of "a ha" moments when I was still struggling with fundamental concepts. And it was super fun.
Looking through NES docs. This is gonna require a lot of research :p
Yup Disch, you have sold me. I have a feeling this will be a long process though.
BHXSpecter wrote:
what are good coding projects to help build confidence?
For me it's pretty much anything that is even just a little out of my comfort zone. For instance, I'm working on a bot for the competition and even though it's a fairly easy task (not to say I haven't had problems), I've never done any networking in c++ so it's new for me. I'm sure you can make another pong clone or anything else you've done before, but it wont help build confidence.

Only reason I brought this up is because I've talked to quite a few beginners who refuse to join open source projects or work in team for the same reason I do. Feel like I would be inadequate for the jobs.
When it comes OSS projects, it's best to take time to get acclimated with the project before trying to work on it. My suggestion is to look for a fairly small project (not KDE or X.org) and try to find something you can add or fix. Also remember, you don't usually need to be a project member to submit a pull request.


@Disch
That does sound like a really cool idea, would it require any knowledge of assembly?
naraku9333 wrote:
That does sound like a really cool idea, would it require any knowledge of assembly?


Yes. But it teaches you assembly.

Although it teaches you 6502 which is extremely simplistic compared to modern assembly. Writing a 6502 emu is just a small step above writing an interpreter for something like Brainfrack.
Just reading this topic makes me realize how uneducated at C++ I am.

Anyway, I think you're depressed or something. I don't even know why you aren't confident. I'm sure you're way better than me at programming. I guess that's a start.

To that NES thing.
http://nesdev.com/NES%20emulator%20development%20guide.txt
Brad Taylor's docs are good, but old. The one you linked is like ~9 years old. The NES emulation scene has come a long way since then (it's still active to this day).

Really the nesdev wiki is your best bet at getting the most up to date technical info. Although other hosted docs on nesdev.com might do a better job of introducing newbies to the basics.

Way back in the day, I learned the basics from nestech (but it's probably older than that BT doc you linked to):
http://nesdev.com/ndox200.zip

It does a pretty good job of introducing you and explaining what's what. Just remember: only use it to get a general idea... as a lot of the technical details are wrong. Once you get the basic picture, confirm actual details with what's posted on the wiki.
@Disch
Looking over the docs, there's ~250 some odd opcodes to handle in 6502 emulation, because each instruction has a list of different addressing modes it can occur in.
Is the best route to take a ~250 case switch statement? Or is there some metaprogramming magic I'm not thinking of that will do the same in less code? :p
I only want hints!
Last edited on
I typically use a big switch.
Darn. So the battle begins.
???
Thumper wrote:
Darn. So the battle begins.
Disch wrote:
???

He means that writing such a long switch is going to be a long and laborious task.
Pages: 123