Jump to content

  • Log In with Google      Sign In   
  • Create Account

We're offering banner ads on our site from just $5!

1. Details HERE. 2. GDNet+ Subscriptions HERE. 3. Ad upload HERE.


Don't forget to read Tuesday's email newsletter for your chance to win a free copy of Construct 2!


Perfectionism and Programmer's Block


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
15 replies to this topic

#1 radioteeth   Prime Members   -  Reputation: 1105

Like
6Likes
Like

Posted 12 May 2014 - 04:44 PM

 Hi there. I wanted to query the collective knowledge and experience of those who haunt these forums in an effort to find relief from something I can only describe as programmer's block.

 

 I know what I want to make, but the knowledge about programming I've gained the past few years have only made it harder to get anything done without trying to do it 'right'. For some reason, doing it 'right' is taking precedent over getting it done. It becomes more of a chore, and less of a fun hobby.

 

 Just getting into OpenGL 3+ has become a daunting task, trying to implement a highly versatile rendering system capable of everything I can't forsee.

 

 That's just the issue though, the sense that I always code myself into a corner with projects, which has instilled a deep need to do everything as generalized, modular, and data-driven as possible. I feel I have taken certain programming tenets to extremes, yielding to nothing.

 

 I have heard things such as YAGNI (you aren't gonna need it) and KISS (keep it simple stupid) and I'm still struggling. How do I surrender!? What should I focus on. I just want to switch off this awareness I have gained, or at least tone it down, to where I can actually knock stuff out and enjoy doing it.

 

 Has anybody else struggled with knowing too much to be productive? I'm paralyzed!

 

 Thanks



Sponsor:

#2 Shane C   Crossbones+   -  Reputation: 1283

Like
0Likes
Like

Posted 12 May 2014 - 04:57 PM

I know too much as well. But about optimization. I made a game and it ran rather poorly on an Android device. I now know what to do to make it run fast on an Android device. So every time I add a feature, I ask myself beforehand:

 

-How much performance will this take?

 

It doesn't make it any better that I'm trying to make one of the more demanding 2D games, one that is fast-paced with a lot of track.

 

But programming itself isn't what's weighing me down - it's design and optimization.

 

In your case, I might recommend trying to make anything. Making things will hopefully get you in the right groove.

 

I knew a guy with similar game making experience to me. We used the same tools, etc. But the one of us doing the most productive thing came down to who was "hot" at the time. "Hot" is a term I use for continually doing something and somehow, in some unexplainable way, doing something constantly can build your mind up for a time to do it even better.



#3 ApochPiQ   Moderators   -  Reputation: 16064

Like
25Likes
Like

Posted 12 May 2014 - 08:23 PM

It's not really that hard... just accept the following:
  • You don't know nearly as much as you think you do
  • Your analysis is not nearly as thorough as you think it is
  • You will fail to predict something important
These are always true, of everyone.

If you truly, genuinely accept these facts on a deep level, it will kill the compulsion to do things like over-plan and try to make things perfect. Nothing will ever be perfect.


Once you can get past the need to overthink things, it's just a matter of learning to focus on actual requirements as opposed to wishlist items and possibilities for the future.


Ultimately, there is one secret: everyone has to go through the "overplanning" phase. Period. You cannot shorten it or eliminate it, and you can only marginally mitigate its effects. It is vital to actually live through this phase so that you can accumulate enough experience to realize how silly it is, and move on. Until you have that experience, though, it isn't possible to move on.


Write code. Doesn't have to be complex or fancy or even do anything useful. Just write code, and iterate.


Good luck.

#4 Buckeye   Crossbones+   -  Reputation: 5678

Like
11Likes
Like

Posted 12 May 2014 - 10:14 PM

My two cents: It sounds like you suffer from PPP - Procrastination - the Paralysis of Perfection.

 

Procrastination is often seen as laziness, or an unwillingness to participate. As you seem to know, from a psychological standpoint, the most common cause of procrastination is not laziness, but somewhat the opposite - the desire to complete a task but ONLY if it's "exactly correct."

 

ApochPiQ gets a thumbs-up from me for his advice. It's tough love. I would add that you have to learn to accept that perfection is a process, not a goal. You'll have to experiment to find out how you can teach yourself that definition. No-one can do it for you. For me, it works to consider each new project is a piece (not a whole) that I need to get closer to the "perfect" program. Part of that approach is to believe that perfection is avoiding mistakes; avoiding mistakes comes with experience; experience comes from making mistakes. As mentioned above, it's an iterative process. To achieve perfection, you must make mistakes.

 

Go! Get out there and make mistakes! smile.png


Edited by Buckeye, 12 May 2014 - 10:15 PM.

Please don't PM me with questions. Post them in the forums for everyone's benefit, and I can embarrass myself publicly.


#5 SerialKicked   Members   -  Reputation: 576

Like
7Likes
Like

Posted 12 May 2014 - 10:16 PM

ApochPIQ is so right.

 

I am by no mean a great programmer, but when I look back at some of my older projects and the amount of time and lines of code to over engineer simple things I can't help but notice that it was sort of a waste that could have been done much faster and with no difference to the end user easily now that I know better. My usual pitfall was to start making a game and ending up with a half finished engine instead.

 

That's a behavior that kinda stopped by itself. Well, annoyance at my own inability to finish a project completely had probably something to do with it. And the realization that no matter the amount of perfection I try to put in my code now, a few years later it will look like crap to me anyway.

 

So I chose a set of features I know how to implement (more or less) correctly with a simple architecture without all the fancy bells and whistles. I am of course still unhappy with parts of my current code base (the way I handle multi threading make me cry for example), but it became gradually a much lesser concern than being feature complete and finishing the game itself.

 

(no idea if it's of any help, but that's my experience)



#6 frob   Moderators   -  Reputation: 22240

Like
6Likes
Like

Posted 12 May 2014 - 10:58 PM

This is where a paper notebook or a sorted spreadsheet are awesome.

 

You don't need to do everything. If you see something you want to do, write it down or add it to the list.  Prioritize the list regularly. Cut things near the bottom of the list, you'll probably never get to the low priority things anyway.

 

For game designs, at work I view every design as a checklist, and my designers and our teems have had that work pretty well.

 

Do a single item, cross it off. Do the next item, cross it off. It is just a task to get done, like folding a load of laundry, feeding the pets, or doing homework problem 17. No stress in any of those, right?

 

When doing an item, you don't need to stress out. Most programmers are lazy (rightly so) and will just implement the minimum to get it done. Do just enough to check the task off the list. Don't aim for perfection. Don't worry too much about bugs. Don't worry about missing features. Don't worry about optimizations. You can find the obvious bugs by spot checking when done, just like you would verify your answers on a math quiz by working backwards; run the program, try the edge cases you can think of, and call it good enough. Instead of worrying about optimal, just think about minimally adequate; choose a single pass rather than nested passes, base implementation choices on how it will be used, but don't worry about optimization since if it is a problem QA will point it out.  Just implement the first thing on the list, verify it works in the program, test around it, submit, cross it off. Repeat every day. Don't worry about the list ever getting empty.

 

Whenever someone sends you a request, write it on the list so it doesn't get lost. Someone might complain if you put the work off for several days as a lower priority item, but it won't get lost in the daily shuffle. Whenever you think of something to do or an improvement that needs to be made, put it on the list. Found a bug? Goes on the list. Thought of a crazy awesome optimization? Goes on the list. Idea for another great game? Goes on the list.

 

The list is awesome. Keep it on a notepad and put dates they were added and completed, and it doubles as evidence for your annual or semi-annual performance review. 


Check out my book, Game Development with Unity, aimed at beginners who want to build fun games fast.

Also check out my personal website at bryanwagstaff.com, where I write about assorted stuff.


#7 Icebone1000   Members   -  Reputation: 1114

Like
5Likes
Like

Posted 13 May 2014 - 12:25 AM

I recommend getting into a game jam to forcefully push you in the 'productive' mind set, its really a revealing experience: no time for over thinking, only for vomiting working code as fast as you can ( you do with what you got, your current experience level, instead of thinking in the best way possible you do in the best way you can). Its good to show yourself how much you can pull of.

 

The scary part is that that "method", at least in my experience, is faster for progressing than the "over thinking till you got the handsome solution". I find that you learn more by trying more in short times with lots of mistakes and redoing than spending too  much time trying doing it perfect in the first try. Its really a mind set thing, generally in the over thinking mindset you go slow, stop, analyse, you dont give another step before be sure, etc..

 

In the "vomiting way", you make shit work, than you realise what makes it shit, clean it, still working, figure out some bugs, redo it..its more experience, faster. And its more rewarding cause you actually get something to toy with (cause its already working even when its shit)



#8 Carsten Germer   Members   -  Reputation: 1146

Like
5Likes
Like

Posted 13 May 2014 - 02:00 AM

Radioteeth, your condition has been know even before I started programming and I'm old ^_^

 

 

In DonaldKnuth's paper "StructuredProgrammingWithGoToStatements", he wrote: "Programmers waste enormous amounts of time thinking about, or worrying about, the speed of noncritical parts of their programs, and these attempts at efficiency actually have a strong negative impact when debugging and maintenance are considered. We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil. Yet we should not pass up our opportunities in that critical 3%."

http://c2.com/cgi/wiki?PrematureOptimization

http://en.wikiquote.org/wiki/Donald_Knuth

 

So, learn to not worry too much and care about your code architecture and data handling at the start of a project.

Modern profilers do a great job of showing the real bottlenecks later on.

 

Cheers /Carsten



#9 ismithers   Members   -  Reputation: 112

Like
2Likes
Like

Posted 13 May 2014 - 06:01 AM

I actually just signed up to throw in a 'me too' post, as when I read your post Shane I immediately thought, "Hmm, that sounds familiar." as I have that exact issue. I wouldn't say I know all the answers, but I know enough to identify red-flags and see good approaches. So I often spend a lot of time stuck in design-land not really making meaningful progress, or, I implement some pattern or another and then change my mind and refactor it, only to revert it later. Either way, the end result is not much progress. Ironically when I was starting out I made 3 game prototypes, they are fairly diabolical from a code perspective, but hey, there they are, running, working, finished.



#10 Burnt_Fyr   Members   -  Reputation: 1245

Like
2Likes
Like

Posted 13 May 2014 - 07:54 AM


 Just getting into OpenGL 3+ has become a daunting task, trying to implement a highly versatile rendering system capable of everything I can't forsee.

Analysis paralysis hits everyone eventually. If you can't forsee the need, don't worry about accounting for it. Worry about what needs to be done, or as ApochPIQ said, focus on the actual requirements of the project. If at a later date you need something done differently, make a note in your code, and return to it in a later revision.



#11 Angus Hollands   Members   -  Reputation: 717

Like
1Likes
Like

Posted 13 May 2014 - 09:12 AM

I think that there is merit in thinking very carefully about what you do before you do it, just to stress this point. However, it is true that you cannot foresee what you will eventually ask of your code, so the most important thing is to keep to good design principles. It becomes structurally much easier to later modify the flow of execution if everything is nicely encapsulated, and even change implementation details.

 

But best choose one or the other. Either spend an inordinate amount of time planning and thinking before writing anything, or do the basic ground work, and get started - and quickly identify what might need to be changed. That way you make the best use of your time :)



#12 Glass_Knife   Moderators   -  Reputation: 4795

Like
1Likes
Like

Posted 13 May 2014 - 10:11 AM

I will offer another suggestion.  

 

http://amzn.com/0321146530

 

And older book, but it can really help you only write what you need.  If you add some unit tests to your stuff, even if you don't test drive everything (because that's about impossible for the graphics part) you will still be able to re-factor your code when you find the design mistake.  And its probably something new to learn, so that makes it fun.

 

Honestly, once you get enough tests in there, you don't even care about making mistakes.  I find myself all the time doing something I know isn't going to work down the line, but because I've tested everything, I can fix it later. 


I think, therefore I am. I think? - "George Carlin"
Indie Game Programming

#13 ilreh   Members   -  Reputation: 281

Like
1Likes
Like

Posted 13 May 2014 - 01:24 PM

I can relate to this. Since I also fall into this block from time to time I can't give you the perfect cure but what helped me personally in dealing with this is getting busy with other stuff. The urge to focus on secondary stuff too much can be seen as a wrong/deceitful perception of time. In the moment of coding you probably have a lot of time on your hands and there isn't a perceived deadline which ultimately causes any project to fail but in reality there always is (life changes) and you know it. Keeping you busy with various things might remind you how badly you want at least your primary functions to work and eventually it will help you to use your (now perceived as limited) time to make any progress.

 

When in a pinch you will naturally decide to (given that you actually intended to make a whole game in the first place) make a badly looking/performing but complete game with horrible code rather than a well-concepted, feature-rich ressource-management system with fast performing gl calculations that you can only use in a demo-room.

 

If you find that the program you just completed sucks you can always make another one (which will most certainly be better).



#14 Tutorial Doctor   Members   -  Reputation: 1650

Like
1Likes
Like

Posted 13 May 2014 - 10:07 PM


You'll have to experiment to find out how you can teach yourself that definition. No-one can do it for you. For me, it works to consider each new project is a piece (not a whole) that I need to get closer to the "perfect" program. Part of that approach is to believe that perfection is avoiding mistakes;

 

Talk about profound! Life lesson here! 

 

It is so true what you say about procrastination not just being laziness. In fact, before I read this post I have been wondering why it is that I can't finish a project. And I hardly even start a project, because I have this feeling it is not going to be exactly what I want it to be, and then I am going to scrap the whole thing. So indeed, I have been doing parts here and there as the ideas come. Slow process. I mean, all my little projects end up turning into AAA game ideas. So another thing I see is lack of focus

 


I would add that you have to learn to accept that perfection is a process, not a goal.

 

Awesome quote!


They call me the Tutorial Doctor.


#15 Trienco   Crossbones+   -  Reputation: 2213

Like
0Likes
Like

Posted 14 May 2014 - 10:22 PM

Same problem on hobby projects. Lots of time wasted on figuring out the perfect way and when it becomes obvious that a perfect way doesn't exist, it really kills my motivation.

 

Unfortunately at work nobody will care if you're motivated or if you're perfectly happy with your solution. Things need to get done and they need to get done in time. It tends to help on focusing on the _actual_ requirements. Look at what you really need, not at what you'd like or what somebody might find nice to have. The more complicated you make a problem in your mind, the less likely you'll ever start working on it.

 

Maybe in your case it already helps to set yourself a fixed deadline by which stuff has to work _somehow_. Most of the time, keeping in mind that your first implementation might be ugly and will be changed later can help with better design, because you want to isolate that "ugly" part from the rest as much as possible to keep it from having too much influence on the rest of the code.


f@dzhttp://festini.device-zero.de

#16 Geoth   Members   -  Reputation: 107

Like
0Likes
Like

Posted 16 May 2014 - 12:56 AM


It is so true what you say about procrastination not just being laziness. In fact, before I read this post I have been wondering why it is that I can't finish a project. And I hardly even start a project, because I have this feeling it is not going to be exactly what I want it to be, and then I am going to scrap the whole thing. So indeed, I have been doing parts here and there as the ideas come. Slow process. I mean, all my little projects end up turning into AAA game ideas. So another thing I see is lack of focus. 

 

I feel the same thing, but i have begun to understand that it's on personal projects that i get this feeling. When there is a deadline, i forget everything and i am just developing. So what you need to do, is focus on some small projects and force yourself a deadline. 

If needed, start a blog or something public to declare your goals and update your progress. Thus, you will have another reason to keep going. Hope it helps!






Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS