I personally find this forum / community to be of great help and a regular source of inspiration. I had a conversation with a friend recently about it, and several other topics around programming and development, and thought I might extend it to this forum in the event a few people have some sage advice or a few pieces of wisdom to share…
As far as programming goes, I’m self-taught, as I’m sure many of the members of the Cinder community are, and never had the opportunity to establish much of a knowledge-base before finding my way here. I wrote my first line of code around three years ago, and have experimented with and worked with a handful of languages and frameworks since. I’d describe my learning experience with Cinder as pretty much stumbling around in the dark, waving my arms like an idiot, and occasionally happening upon a moment or two of enlightenment. I don’t have a background in CS, or any formal software development training/experience, so I’m pretty much just figuring it out as I go along, as I’m sure many people in this field are.
I was hoping to spark a discussion on the best way to approach planning / designing an app, or I suppose simply how different people approach structuring a small/medium/large application. I’ve read books on C++, poured through Cinder’s samples countless times, read books on design patterns, scoured google and stack overflow etc, but I often find it difficult to translate some of these concepts and theoretical knowledge to practical applications, but then again maybe that’s just me.
For example, If I have an app that has multiple ‘states’, what’s the best approach to controlling these states? If the states change based on user-interaction, or timers, or external events, is it acceptable to place all update+drawing code in a set of massive switch statements, delineated by an enum representing each state? These are questions that I feel go beyond the scope of things like the Cinder samples, which are excellent examples of how to approach certain technical problems, but not necessarily ‘big picture’ approaches.
One of the ways I’ve learnt several programming concepts in the past is by looking at | hacking at | breaking examples of other peoples’ code. However, large scale projects that are used in production or deployed aren’t exactly made publicly available for people to do this ( which is of course totally understandable ).
Perhaps people are willing to share how they overcame these hurdles in their own personal journeys of Cinder wizardry…