Thread: Confidence Building Projects

  1. #1
    Registered User
    Join Date
    Oct 2008
    Location
    Bloomington, Indiana, United States
    Posts
    40

    Question Confidence Building Projects

    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.

  2. #2
    C++ Witch laserlight's Avatar
    Join Date
    Oct 2003
    Location
    Singapore
    Posts
    28,413
    Why do you "still have absolutely no confidence in (your) ability to program"? Are you talking about a lack of confidence for working in a team, or working for pay, or do you even lack confidence when just programming for yourself as a hobby?
    Quote Originally Posted by Bjarne Stroustrup (2000-10-14)
    I get maybe two dozen requests for help with some sort of programming or design problem every day. Most have more sense than to send me hundreds of lines of code. If they do, I ask them to find the smallest example that exhibits the problem and send me that. Mostly, they then find the error themselves. "Finding the smallest program that demonstrates the error" is a powerful debugging tool.
    Look up a C++ Reference and learn How To Ask Questions The Smart Way

  3. #3
    Registered User
    Join Date
    Jun 2011
    Posts
    4,513
    After pushing the limits of my knowledge (and a lot of practicing), when I write code that does exactly what I expect it to right off the bat - that boosts my confidence. Or, if it doesn't quite do what it's supposed to, and I'm able to quickly find out why and fix it - that also boosts my confidence.

    I also found that, for me, any code I write that has practical value helps increase my confidence. Writing a program to calculate the Fibonacci sequence is good practice, but the program itself has little practical value to most people. However, writing code to produce custom pulse sequences that can be used to test products (something I recently did at work as a "pet project") was a rewarding experience for me, and helped improve my confidence in my abilities.

    I've never joined an open source project (for the same reason as you, and also because my time is currently limited). But I imagine some of those projects have little tasks that need to be done, to sort of "get your feet wet". Jumping into it might be the best approach. Obviously, you wouldn't be writing the backbone structure of the projects at the start - perhaps find a project with a list of bugs to be addressed, and see if you can fix any of them yourself.

  4. #4
    Registered User
    Join Date
    Oct 2008
    Location
    Bloomington, Indiana, United States
    Posts
    40
    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.

  5. #5
    Registered User
    Join Date
    Jun 2011
    Posts
    4,513
    If I had to quantify the "learning curve," I might break it up like so:

    --------------------------------

    Phase 1: You're completely new at the craft, and it seems very confusing and overwhelming

    Phase 2: After a lot of practice, you start to understand the basics, and even become confident in what you're able to do with the basics.

    Phase 3: After a lot more practice, you get a sense of the true depth of the craft. At this point, you finally have a grasp on how much you really don't know - this is where confidence tends to dip. Even though you're more skilled then when you started, you might feel insecure because the ratio of [what you know] to [what you know you don't know] was a lot smaller in the beginning, where as now that ratio is huge. This has the effect of making you feel less skilled than you did in Phase 2.

    Phase 4: After a lot more practice, that ratio of [what you know] to [what you know you don't know] begins to shrink (though still increases a bit at times when you learn about new aspects of the craft), and gradually confidence can start returning.

    Phase 5: Mastery.

    --------------------------------

    Phase 4 is where we spend the longest time - in fact, it's rare to complete that phase unless you dedicate full time study and resources, for many years, to accomplish it. In fact, a lot of people skilled in a craft (especially if it's not their main craft) are fine with floating around Phase 4 (or even Phase 3) indefinitely.

    I tend to drop out of crafts in Phase 3, largely for the confidence issues and the "I'm in over my head!" feeling. I sense this is where you are at in programming.

    If it took you along time to program Pong, and you still weren't able to get it working yourself, then this might indicate that you don't have concrete understanding of either some basic concepts, and/or programming methodologies, and/or the tools at your disposal.

    FWIW, I also had (and still have) a desire to program games - that isn't in the cards for me at this point in my life, but I did dabble in it a little bit.

    My first "game" several years ago was an ASCII console game. I would never post the code here because it would justifiably be picked apart - I used a lot of "no-no's" (e.g. system("cls")) - but I did learn a lot of basics (grid updating/printing, primitive collision detection, etc). The game was called "Money Hou$e", and it was just a little '@' character that moved around collecting randomly distributed '$' characters in a little walled enclosure (i.e. the "house"). Strangely, to this day, Money Hou$e is the most popular program I've written amongst the people I know.

    After a few more games, like a console "snake" game, I fell out. About a year ago, I picked it up again - this time moving to SDL so I could program with actual graphics. My first (and last) two "practice" games were Snake and a Tetris clone. They were immensely challenging, but I kept at it and was able to get it working. My knowledge of SDL is minimal, but it was the abilities I gained by practicing programming in general that got me through it. My games kind of sucked, but the important thing was that I had a great time programming them, and learned a lot in the process - instead of letting myself feel stupid for not doing them well, I felt thrilled because it was something I really enjoyed doing.

    The point of all this is, keep programming and keep pushing the limits of your knowledge. If you try to write a game and it comes out like crap ... so what? Do another one. Chances are that one will come out like crap. So what? Keep going. If you keep on it, and are disciplined and genuinely interested, you will improve as you complete each project. If you need "practice" programming ideas, they are all over the net. Even this site has programming challenges, a contest board that has some great ideas, and even keeping up on the posts here and seeing what kind of challenges other people are faced with. I've seen people post questions on programs and thought to myself, that looks like a fun challenge! And I would try doing it on my own.

    Remember, it takes a long time and consistent practice to get really good at something. Best of luck to you.

    Confidence Building Projects-moneyhouse-jpg

    [Screenshot of Money Hou$e]

  6. #6
    Registered User
    Join Date
    Oct 2008
    Location
    Bloomington, Indiana, United States
    Posts
    40
    Yeah, I don't even have the confidence to do an ASCII game. My confidence is severely shaken to where I feel like I'm a complete noob in C++ even though I've been doing it for 17 years. I'm still trying, but it has been hard.

  7. #7
    and the hat of copycat stevesmithx's Avatar
    Join Date
    Sep 2007
    Posts
    587
    Quote Originally Posted by BHXSpecter View Post
    Yeah, I don't even have the confidence to do an ASCII game. My confidence is severely shaken to where I feel like I'm a complete noob in C++ even though I've been doing it for 17 years. I'm still trying, but it has been hard.
    You reminded me of someone..
    Confidence Building Projects-eeyore-png

    So what if you can't program? There are plenty of other interesting stuff besides programming to do out there... *looks at the URL, ducks and hides*
    Last edited by stevesmithx; 07-19-2013 at 01:43 PM.
    Not everything that can be counted counts, and not everything that counts can be counted
    - Albert Einstein.


    No programming language is perfect. There is not even a single best language; there are only languages well suited or perhaps poorly suited for particular purposes.
    - Herbert Mayer

  8. #8
    (?<!re)tired Mario F.'s Avatar
    Join Date
    May 2006
    Location
    Ireland
    Posts
    8,446
    Event-driven software might do the trick. Instead of getting into the complexities of developing a game, try to develop GUI-based software. An FTP client, a folder synchronization utility, a database editor, an MP3 tag editor, a color picker, an ebook collection management software, a sprite editor...
    Originally Posted by brewbuck:
    Reimplementing a large system in another language to get a 25% performance boost is nonsense. It would be cheaper to just get a computer which is 25% faster.

  9. #9
    Registered User
    Join Date
    Nov 2008
    Location
    Phoenix
    Posts
    70
    I couldn't think of anything to program either. But then I started poking around in a binary file that represents the saved game contents of my favorite Sega Saturn game (the file as generated by an emulator; my Saturn's memory cart died). I then realized I could figure out nearly all of the structure of the file (thank god for the Saturn's big-endian architecture). Since I also wanted to do GUI programming, I started learning Win32. That was late last year. I now have a nearly fully functional Windows GUI program that lets me edit the savegame files for that game. It's awesome! About half a dozen people use it too, so that has increased my confidence. While it's mostly good on the surface (it's missing keyboard functionality for things like tabbing, arrow keys, shortcut keys, pressing enter, etc. I really don't feel like subclassing hundreds of controls....), it's really messy behind the scenes in the code. I would definitely not show it to a prospective employer for an interview. At least I'm learning stuff though.

    Where my confidence is taking a hit now though, is that in my efforts to try and contribute to open source projects, I thought I'd try and contribute something to Code::Blocks. But after two days of fildding, googling, reading the wiki, and asking on the forums, I can't even get the source code to build (which is obviously required to contribute). While my savegame editor is a little complicated with the whole win32 thing going on, a resource file, icon file, and a couple dozen source files, it's nothing compared to the monster that is the Code::Blocks source. So I'm rapidly feeling like I'm regressing to a very early phase 3 (not that I was terribly deep into it to begin with or anything). I guess I need to find a simpler project.

    I understand where you're coming from though. Every time I feel like I've gotten a pretty good grasp of C and C++ and have gone a step forward, I look at the source code for some program and it puts me 4 steps back. Especially when I see the absolutely and completely insane things people do with header files. When I look at the actual source file, I can't even tell what's real code and what's crazy header hocus pocus.

    All I can say, is that practice practice practice and passion passion passion hopefully make perfect. Or at least close enough to perfect to start making a paying career out of it sometime soon.

  10. #10
    Make Fortran great again
    Join Date
    Sep 2009
    Posts
    1,413
    I really question the value in contributing to open source projects. I've tried to with a couple different projects that interest me, and the problem is that most codes are just huge with hundreds of files. Even with several weekends poking around in the files, you still don't know jack about the project and it's nearly impossible to just take a bug report and be able to fix it. Size aside, documentation largely sucks as well with a few exceptions. As Sorin said, a lot are a pain to compile as well. I've gotten much better with the compiling part in the last few years, but some projects are just compiler/dependency error after the other with no apparent reason and no documentation to help, so it's a waste of time.

    It sounds like what you need to do is to find a project you want to work on, and break it down into parts and get things working one at a time. I guess this would formally be called 'unit testing'. It's so much easier to get things going if you go step by step instead of trying to do everything together. For example, if you wanted to make an FTP client like Mario suggested, you could break down several parts of the GUI programming into parts (like getting the window to appear, creating menu bar entries, creating buttons, etc.) and break down the parts of the FTP communication (get sockets working, get directory listing working, get transfers working, etc.). The point is, break everything into simpler parts and get every little part to work step by step.

  11. #11
    Registered User
    Join Date
    Jun 2011
    Posts
    4,513
    I suspect the OP is looking for some sort of sympathy, rather than advice. I wish I knew that before I took the time to type up my reply.

    Hopefully, someone else will stumble upon this thread and be inspired by the contributions of others.

  12. #12
    Registered User
    Join Date
    Dec 2006
    Location
    Canada
    Posts
    3,229
    I really question the value in contributing to open source projects. I've tried to with a couple different projects that interest me, and the problem is that most codes are just huge with hundreds of files. Even with several weekends poking around in the files, you still don't know jack about the project and it's nearly impossible to just take a bug report and be able to fix it. Size aside, documentation largely sucks as well with a few exceptions. As Sorin said, a lot are a pain to compile as well. I've gotten much better with the compiling part in the last few years, but some projects are just compiler/dependency error after the other with no apparent reason and no documentation to help, so it's a waste of time.
    Unfortunately (or fortunately), that's also what most commercial projects look like. It takes a very different set of skills to work efficiently in that kind of environments than in one person (or few people) projects where you can get intimately familiar with most/all of the codebase. If the goal is to go into professional development, I would say big open source projects are awesome places to practice this kind of skills.

    Most big projects have a high level conceptual overall diagram that tells you the organization of the project, and there are also people you can talk to (senior developers) that can give you a slightly more in-depth overview of the project. Then you should be able to start looking at the code and figure out how the block diagrams map to source files, and go from there. A lot of it is just following conventions, and recognizing common design patterns.

    At my first job it took me about a month to get familiar enough with a ~1 million lines (couple hundred files) code base that I can contribute meaningfully. Now it only takes me about 3 days on a similarly-sized unfamiliar code base. There are many design patterns that just come up again and again in big projects. Every time you recognize one, you get deeper understanding of the codebase. That's why experienced developers can jump into big projects a lot faster than less experienced developers, even if they have equal knowledge on the language itself.

    Learning to program is much more than just learning the syntax of the language.

  13. #13
    Make Fortran great again
    Join Date
    Sep 2009
    Posts
    1,413
    I would think that at work, you would at least have someone to help you on some level. Hopefully the documentation is better as well.

  14. #14
    Registered User
    Join Date
    Dec 2006
    Location
    Canada
    Posts
    3,229
    That is true. There's usually someone to talk to, and that definitely helps.

    Not so much documentation. At work everyone is always under time pressure to get features done or bugs fixed. A day spent working on documentation means one less day working on code.

    Usually there's good documentation on the high level design of the system written way back, but most of the lower level stuff would only exist in someone's head.

  15. #15
    Registered User
    Join Date
    Oct 2008
    Location
    Bloomington, Indiana, United States
    Posts
    40
    I suspect the OP is looking for some sort of sympathy, rather than advice. I wish I knew that before I took the time to type up my reply.
    You suspect wrong. Though could you explain how one get sympathy for lack of confidence? Usually that is how you get made fun of.

    After posting this question here and cplusplus.com and was told to make a NES emulator there and GUI here. Felt the advice here was fine, but NES emulator there was dumb so I'm playing with Qt right now.

    Last thing, sympathy doesn't improve my coding or confidence so you can waste it on someone else.
    Last edited by BHXSpecter; 07-25-2013 at 06:48 PM.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. C projects
    By Riswana Jaffer in forum C Programming
    Replies: 2
    Last Post: 11-29-2011, 02:44 PM
  2. Help with program that calculates confidence interval
    By kgrahora in forum C Programming
    Replies: 2
    Last Post: 03-29-2008, 11:45 PM
  3. Replies: 11
    Last Post: 05-25-2007, 04:39 PM
  4. Looking for some big C/C++ projects
    By C-Dumbie in forum C Programming
    Replies: 5
    Last Post: 09-16-2002, 12:18 AM
  5. Projects?
    By Wjahvces in forum C++ Programming
    Replies: 6
    Last Post: 10-06-2001, 11:26 PM