219 karma · joined February 16, 2009
http://ludamix.blogspot.com
With web app backends, for example, most of the problems somehow relate to difficulty maintaining state over widespread, always-on networked systems - things like authentication, sessions, concurrency, large-scale, flexible datastores. So the systems architected gradually get more and more tuned towards serving this particular goal with little programmer effort. And because those problems are a good match to functional programming - because it eliminates state - functional has become popular.
But if you were building an embedded system, statefulness is less of a problem: there's usually only one thread, and all memory can be mapped in an orderly way. Your performance constraints are reliant on a single fixed platform, so the methods of inspecting and debugging code change.
So to get back to the original question, think about reframing your familiar problems in a way that would simplify the solution with a functional technique. Preferably, look for simplifications that are really big changes and throw out traditional assumptions - the use of relational databases in webapps is one common target for this. Even if you get it wrong you'll get a better understanding of where the functional solution can and can't work.
The concepts are still problematic though.
The puzzle-genre version of this might be otherwise known to you as "casual gaming." Bejeweled, Peggle, etc. take almost no conscious effort to play, even though skill elements exist.
I don't really think we can escape this unless we constantly reform into new groups.
But for right now, music games on Flash can't live up to the expectations set by games on other platforms.
In fact, I'm sure my iteration time goes up in haXe because I see most errors at compile-time. The ones I don't see are logic and uninitialized values.
ed: I mean time goes down, not up. Progress goes up.
The explanation is simple: the factors that separate the ghetto from the toniest parts of town will feed into a school system based on geographical location.
School busing has been tried as a solution to this, but it causes other problems - expense, high commute times, and a environment where some of the kids are at an obvious - and painful - advantage to others. The parents in a good neighborhood will fight against busing, if it could put their kid in a worse school. The parents in a bad neighborhood may have too many other problems to be concerned with their kid's education.
I believe that this kind of future environment is more likely to encourage sustainable practices. Studios working consoles and retail are traditionally forced towards heavy turnover because the market economics dictate it. But in a low budget and predominantly online market, a small studio suddenly has a lot of room to make an impact on their own, without leverage.
Most studios really do want to hang on to their people, and this coming decade may be when that becomes the norm.
People with too much GAS tend to be much like language weenies. They will go to absurd lengths to defend the "pure/fat/warm/etc. sound" of their favorites, an ultimately pointless endeavor considering that after a certain minimum of instrument quality, playstyle and post processing effects will both have far more impact.
Edit: Also, the documentation persistently says "it's very simple to ---" and then dumps a code example on you without actually explaining the concept.
Unix wizards believe in "Worse is Better."
Lisp and Smalltalk hackers like to have a system that is "elephants all the way down."
The Zen of Python says "There should be one-- and preferably only one --obvious way to do it."
Rails popularized "Convention over configuration."
The specific interpretations vary, but implicitly, they all deride the obvious alternative: piling on layers of heavyweight complexity to gain some perceived flexibility and modularity.
I recall reading on it somewhere the point that there are several possible formats of wiki - namely, the "discussion" format and the "document" format, and that Wikipedia has has made familiar the concept of cleanly dividing the two into separate pages. You might want to reconsider this concept and how it works in the context of a review.
The other main thing to consider is whether you can apply the same template and rules over every page - if you can, it's very straightforward to contribute.
This is great for developers, but bad for end-users, as a lot of users will run away before learning new concepts(they're busy enough already), while others will take a macho posturing attitude towards it and look down on the people who ran away. The community gets polarized. Git exemplifies this kind of thing, for better or for worse.
It's not a huge surprise that so many developers have switched from Linux to OSX, since the latter has made many more provisions towards the newbie end-user; it indicates that most developers don't want to take on this kind of burden, at least not all the time.
What you won't see reused is more high-level functionality. That's where a lot of assumptions have to be made about the program's internal structure, and it's where getting too generic and open-ended makes things very complex very quickly.
That said, the community is out there, and pretty widespread.