"Algorithm" is not a four letter word
jamisbuck.org
jamisbuck.org
The notion of search (logic programming, constraint solving) is a woefully under appreciated topic - I would argue because our programming languages make it very difficult to apply this kind of beautiful knowledge back onto the programming language itself.
What is a type system if not a kind of maze solver? What happens when you apply machine learning like heuristics to a pattern match compiler? What happens if we can apply algorithm rules at the level of the method signature?
Yes learn some algorithms, then question why our programming languages limit how much we can put these great ideas into practice.
Clarifying, sorry.. could you elaborate a bit on what you meant by "games"?
(There's some pretty good evidence that you can fill the spaces in between your practice sessions by practicing something else — without losing the benefit of spacing.)
The maze generation algorithms, though, are awesome.
My favorite is still this one by Joe Allen:
/* jallen@ic.sunysb.edu */ /* Amazing */ /* Joe Allen 129.49.12.74 */
int a[1817];main(z,p,q,r){for(p=80;q+p-80;p-=2*a[p])for(z=9;z--;)q=3&(r=time(0)
+r*57)/7,q=q?q-1?q-2?1-p%79?-1:0:p%79-77?1:0:p<1659?79:0:p>158?-79:0,q?!a[p+q*2
]?a[p+=a[p+=q]=q]=q:0:0;for(;q++-1817;)printf(q%79?"%c":"%c\n"," #"[!a[q-1]]);}I actually used (yet another) maze generation algorithm for an xbox360 game I worked on as a school project. The constraints were slightly different because we wanted cycles and no dead ends.
You put all the cells in a list and take them out at random. If there are 3 or more walls, tear down walls until there are less than 3. When you are done you cannot have any dead ends because a dead end must have three walls. Of course you can have unconnected loops, so you have to go through and tear down walls to connect unconnected segments when you are done.
I don't know what my point is.
Mazes are neat.
Thought I'd share too, don't have a point. :) graphics programming / dot product is neat.
Actually, there are some pretty fun graphics algorithms. I could ramble on about some, but don't want to intrude / doubt anyone cares but me, heh.
Here's a tip for UX people: don't make anything flash more than 2 times per second. Also, "in the United States, websites provided by federal agencies are governed by section 508 of the Rehabilitation Act. The Act says that pages shall be designed to avoid causing the screen to flicker with a frequency greater than 2 Hz and less than 55 Hz." So that's the official recommendation.
The visualization of maze generation in the presentation is pretty neat, and is meant to demonstrate the running algorithm. The author isn't making it inaccessible on purpose, he can't possibly know about all the accessibility guidelines, and even if he does, there is content which can't meet all the guidelines.
That, and--though it wouldn't have helped in this case--the most I heard about epilepsy complaints is on forums with flashy animated GIF images. Why do they browse with GIF animation enabled? Really, if it's such a health hazard, and images posted on a forum can give you dangerous seizures, why would you take a risk and trust on the goodwill of the community and take your chances with the occasional troll?
I don't want to dismiss the problem, not at all, I just wonder about the victim mentality displayed and lack of proactiveness.
Especially the display filter. If it's an actual health hazard, you shouldn't be asking people not to show flashing imagery on their sites, you should be taking action yourself, making sure your computer display is unable to display this imagery. Any kind of modern 3D GFX card should easily be able to detect flashing areas and dampen and/or motion blur them so they're safe, without much processing power needed. You'll be erring on the side of caution of course, so some video content might be degraded (though with a well-designed filter this should be minimal) so you'll want a key-combo to (at your own risk) temporarily disable the filter (with a parental lock for the children, of course).
It seems to me that the most likely explanation is that the risk is so minimal that people with epilepsy aren't even willing to give up lolcat gifs for it, though it is possible that people are unable to conceive of a setting existing to disable a largely unnecessary feature in a piece of software.
If it is a significant danger, and people don't realize you can disable it, then that seems to indicate a significant failing of the entire system, from doctors to parents to people taking care of themselves properly. I really want to believe that it isn't the case.
(Furthermore, I've never found learning about new algorithms to be taxing, and certainly never regarded it as a four-letter word.)
I guess I reacted to the screwed-up faces in particular; they looked like they were in pain.
You can see my problem, hopefully. Ambiguity in language has been the downfall of more than one well-intentioned presenter!
My hobby (as well as my only form of transport) is motorbikes. I do it for over an hour every day. I'm definitely getting better at it, because of an iterative process of analysis and experimentation. If I just looked at it as a means of transport, I wouldn't be so eager to stretch myself; I'd be content with getting from A to B in a safe and not very efficient manner.
It's completely different to programming, so in some ways it is relaxing; it's certainly highly enjoyable; but it is also simultaneously energizing and tiring. It uses a completely different part of my brain, and gets the adrenaline going.
I think if guitar-playing was my hobby, I'd be focused on improving and having an iterative experimentation / analysis cycle. But if guitar-playing was something I did to make music, perhaps to entertain other people, then the focus is elsewhere. It would no longer be play; it would merely be doing.
What I'm getting at is that play (my definition of it, at least) necessarily implies stretch goals, doing things that you have room to improve at, because without challenge it's boring. What makes it different from work is intrinsic motivation, and hence the lack of a need for application of will.
But you're right in another respect, this is all coming down to a disagreement over the use of words, rather than a disagreement in concepts etc. The start of the presentation just rubbed me the wrong way, and I've made far too much out of this small thing...
So very true. The difference between the me one year back and the me now is that I know how and why certain things are the way they are. Understanding is enlightening.
Ultimately, it is that resistance you need to seek out. Look for things that will challenge you consistely (sic). Work at them until the resistance goes away, and then look for something new. That's how you'll grow your craft. That's what will make you better than you are today.
Amen.
"It is critical to remember that play is not exercise."
Focusing on what are you're good at (like algorithms for creating mazes), is in fact exercise. You're getting better at what you already consider yourself good at (assuming you don't stagnate - which I think the article is really getting at.)
Should you focus on weaknesses or strengths is a big debate, but strength finder (http://strengths.gallup.com/110440/About-StrengthsFinder-2.a...) seems like a popular camp.
I think those with a CS degree and a good understanding of graph theory should still sit and enjoy it!
Looks like this over here.
How is this different from having a separate page per slide? It seems we have the same result but with a better user experience. Isn't this a feature allowing each slide to be linkable? Why is this considered negative?
I didn't like "It is critical to remember that play is not exercise." and to improve it I would like to add something like "But it's totally fine if your exercise feels like play. If your exercise is fun it's so much easier to do".
no text at all in 1024x768
Also, since it's a computer science post :) I would have added time complexity, just for sake of completeness.
A big plus to the whole concept of "code kata".
Great stuff.
$('body').html($('aside').map(function(x,y){return $('<p>'+y.innerHTML+'</p>')[0];}));Well done, loved it all the way!
You have a problem, so you suggest "I'll make an algorithm to solve it!"
...now you have 2 problems.
A spanning forest is a graph, not a set.