View Full Version : ActionScript Ninety Nine?

09-23-2011, 11:21 AM
Hi. A short preamble first. I had to conduct couple of short AS3 courses in a college, although it didn't work out so well, in the end of the last course a student asked that I prepare an exam. I did a bit of searching on-line and Amazon and Wiki, and it looks like if anyone was ever to compile a set of questions about ActionScript they would rather try to find difficult to comprehend issues too specific for the language (as opposite to the general programming concepts). Some time ago I learned about L99 (a famous ninety nine problems of Lisp, which is actually a creative copy from a questionnaire dedicated to another language - Prolog). I liked the idea, especially the aspect of verifying general knowledge and common programming practices rather then some arcane or very language-specific knowledge.
Attached below is the `working draft'. It has hardly 1/3 of the 99 questions. I would like to actually have it finished, but I'm running off ideas for questions. Also I'd like other members of the board to step in and criticize that what has already been accomplished.

The linebreaks follow the Windows style, but I hope that's not a problem.

This is the `prototype': http://www.ic.unicamp.br/~meidanis/courses/mc336/2006s2/funcional/L-99_Ninety-Nine_Lisp_Problems.html

Barna Biro
09-23-2011, 12:22 PM
Are the students allowed to user their computers / internet / Flash Builder at this exam? How much time do they have at their disposal to finish it?

I would most likely fail an exam with such questions ( and I'm by no means a beginner ), mainly because I find that memorizing the topics / keywords / whatever for such exams is retarded and useless... measuring knowledge based on how well certain people have memorized an algorithm, keywords, etc. is just retarded. Instead, the educational system should try to teach people how to do a proper research and how to learn from what they find... that being said, I'd rather see people pick individual projects ( small to medium size ones - like image galleries, websites, games, etc. ) and have them periodically show me their progress and explain why they did what they did in the manner they did it... but obviously, this would be more time consuming on your side and it would require that care about the pupils and you are ready to put some additional effort into things if needed ( that's why this project selection and work should have started when the courses started... you could have maybe given some grades to the people who finished the project before the established deadline and end up with a smaller bunch to verify at the end ).

IMHO, the only thing that exams can measure ( especially ones with questions similar to yours ) is how good or bad certain people are at memorizing stuff... if you actually care and want to see if they understood anything ( not necessarily just about the technology but programming practices in general ), then you'll need to invest time into this from the very beginning ( "team projects" or "individual projects" )...

09-23-2011, 03:18 PM
This exam is a homework, you are allowed to use whatever you see fit (by you I mean student). There's no restriction on software you use etc. It's not used to validate your knowledge, it's a way to guide you through some basic problems, so that you learn how to solve them, you may not know how to solve them before the test.

It doesn't want you to memorize anything. What question did you have in mind, when you said that?.. especially not the keywords. It has maybe only one keyword in the whole test, and that's `if' or something like that... something you'd certainly know.
It doesn't require that you memorize the algorithms either, it's fine if you invent them... or look up in the book or on the forum, the idea is that you learn them, again, it's not verifying how well did you learn them, it's for learning.

It's a different kind of assignement, not the kind of a complete work, not that it is better or worse, it's just different, like lectures are different from seminars, or working in the lab, but they aid the process, just in a different way.

There's no `grade', you cannot `score' in this test, it gives you a bunch of practical problems that make you think about how some basic mechanisms of the language function, so that later you could apply them to other situations. They also tend to be as granular as possible (contrary to personal assignmetns / projects, which would entail a bunch of different things all at once).
This test is for a beginner, who wants to get a better (if she had any) or at least some (if he had none) understanding of the language. The solution of each problem is, at most, ten lines long, so it's easy to do it in parts / when you feel like. (I didn't do the entire L99 btw because some math questions like mutually prime numbers are so high school and I felt very much against doing that again :D).

09-23-2011, 08:55 PM
I think the question set you are starting with could be a good starting point for an exam on Actionscript, and think it would work fine as a takehome exam. The problems are logic-focused rather than topics / keywords.

The set leads to a few questions, though - are these computer science students? students in a game design program? graphic designers who want to take 1st steps in Flash? I ask this because the question set reads as something from a computer science curriculum. Array manipulation tricks might not be useful for all Actionscript programmers. The language, too, seems CS oriented - run-length encoding, ordinal form etc. These aren't good or bad things, just issues to consider when designing a test for a given group.

I might add some ideas for expanding the exam later, but for now, I will just add the thought that a question or two about rectangular multidimensional arrays would be useful as there is no 2d array type built in and these questions come up fairly often on the game dev. forum here.

- dialectric

Barna Biro
09-23-2011, 11:09 PM
Dunno man, I honestly would prefer to see some real-life project / example, even if it's not assigned to each individual, then a "group project" and try to have people contribute with as much as they can, than trying to just stress them with questions like in the file you have posted... just my 2 cents, in the end, you do it however you think is better.

09-26-2011, 10:42 AM
Barna Biro:
Well, we are talking about different things... once I learned in high school, we had two different books for the math class. They even have separate special names in Russian, but I wouldn't know how to translate that / not sure English has that. One book was the theory with some examples, graphs, tables etc. The teacher used this book to conduct the lessons. I.e. she would read from it, or have us read it, or explain in our own words what did we understand etc. The other book would only have very short problems to solve and the list of correct answers. We wouldn't use that book at class, instead, it was used for homework. So that if, for example, the topic of the day in class was the quadratic equation, then we would have the homework of a dozen quadratic equations to solve.
Obviously, I'm trying to do something similar to the second book.

Well, in reality, this test was first tried on a group of graphic designers learning ActionScript. And, if I want to be realistic, it's unlikely that ActionScript in it's current state will be considered for CS studies... there are just too many irregularities / some programming concepts are difficult to express. Although it might have an advantage of coming bundled with graphic...
I actually thought that run length encoding should be a fairly simple task, and I also liked that it is connected to other tasks, so it will indicate that the students make progress, if they master it.
Not necessarily arrays, but any kind of collections seem to me to be the corner stone of programming, since they are, in a way, an outlet of the set theory, or even category theory. This is actually one thing that stroke me as odd at first when I read the original L99, as it was 99% about lists. But then, if you think about it... there's not even a very basic program that doesn't use collections. Also, judging from this and other forums that I read, questions about collections are the most popular ones. The more experienced programmers might ignore it, because it looks trivial, but it is not so for beginners.
Ordinals may sound like a very specific task... but my reason for having it there is that in other languages inclination of nouns is much more common thing, than it is in English (obviously). Often times numerals or adjectives also need to be inclined in things like automatically generated messages. I simply wanted it to be more language agnostic.
One other criteria I used to select subjects is, for example, this site: http://govnokod.ru, it's a place where the users may submit the particularly silly or bad code. So it helps to find out what concepts are causing most struggle.
But, yes, I think that 2D arrays would be good. I think I can even vaguely remember that from my CS class back in school...

Barna Biro
09-26-2011, 05:15 PM
I totally get what you mean, but I'm still against it :) Unfortunately, I have had similar experiences in school and I honestly disliked them and I can't recall absolutely anything from those homeworks or whatever ( yeah, that's how helpful all those abstract examples were to me )... Personally, I like "practical things" and not abstract examples that try to demonstrate something you might never use. Since we are not talking about math here ( trying to come up with some more practical examples in Math isn't maybe as easy as with the Flash technology ), if I were one of your students, I would have been a lot happier to build something practical ( even a tiny, tiny application ), than try to solve mostly abstract problems that I might never meet again... or if I do meet them at one point in time, I can most likely read up ( do a bit of research ) on the topic then.

This is really just a personal point of view... I'm not saying that everyone definitely feels the same way as I do, some people might actually love solving abstract problems. I'm more practical and especially with such a technology, I'd personally expect to see some practical examples ( I'm not saying that manipulating arrays and so on isn't important or useful, just that I'll risk saying that, most likely, the students have already got their hands dirty with other programming languages and I'm quite sure that those teachers have already stressed them with similar problems - but in Java or C++ , etc.... then I'm asking: Why re-create the wheel with AS 3.0? What good is it for? Will it actually help people? Sure, there is a chance that some who didn't get the idea with Java or C++, have an additional chance with AS 3.0 at understanding how things work... but still! ).

This last thing is exactly something I totally hated during my University studies... you learn C, you do some abstract examples, then you learn C++ and you do the same abstract examples over again but using different syntax... then you learn Java and you repeat the same crap again! I just find such approaches totally useless and dumb... Can't people just assume "ok, so you have learned C++ and know what a Class is and how to manipulate lists and so on... let's try to create something practical this time, but using Java after we get a bit familiar with the new syntax and technology". Or EVEN BETTER, why not ask the students: "Guys / Gals, would you prefer wasting time solving some abstract examples, or you'd rather want to do something practical?" Why not let the students choose or even come with some suggestions?

Just my 2 cents man, I hope you don't mind... We are clearly not "listening to the same radio channel", so I think there's no point in debating this further... I think we have both made a quite clear stand a we clearly see things different. :)

I honestly wish you best of luck with the exam! ( no matter what you choose to do )