Yes, I do realize that I’m probably far more excited about our new website coming on line than is normal. Several points here on a Friday night:

  1. I completely disagree with those entrepreneurs who say, “You sell the sizzle not the steak” when what they mean is that they really don’t have a good product but just a good story a.k.a. a line of bullshit.
  2. I think we have benefited from never hiring anyone in our company who has experience as a middle manager.
  3. You’re better off having a great product and a lousy website than the other way around.
  4. Not having too much money can be a benefit when starting a business.

steak

Thanks to Jon Sullivan for the yummy steak photo

Back in the paleolithic era when I was in undergraduate marketing classes, they drilled into us the four P’s – product, price, promotion and place. There were lots of things I learned in business school that I disagreed with, but one I have found to be true to this day is that the most important of those four P’s is product. If your product is terrible, you may get people to buy it once if it’s cheap enough, they live close enough or you advertise it enough, but they aren’t going to buy it again.

Since we began 7 Generation Games, our priority has been making math awesome. Our first game had a lot of problems, many of them due to incompatibilities with web browsers, being stopped by school district firewalls. Ever call technical support and the person on the other end of the line says to you,

“Well, it works on my computer.”

Yeah, it was like that.  So, we have been working like crazy to add every feature, correct every bug reported by our infinitely patient and wonderful alpha and beta testers (we love you guys). We still have, literally, hundreds of improvements we want to make, and I expect we always will.  I work on them every day. Spirit Lake: The Game works. It doesn’t crash, it has lots of math and kids like to play it. Fish Lake is in process. Making a good game was our highest priority and still is. We just hired another developer (yay!) to help us out, are ramping up the artwork for the next two games, hired people as testers, an audio engineer …

Now that we have more people working in our company we have started to implement some actual policies and procedures. We have a git repository, use a source management system, an issues tracking system, file sharing system. We signed up for Amazon Web Services, Google Apps for Work, basecamp, some payroll system Donna manages - a lot of stuff I thought would be useless for us at the beginning. This is why I am glad we never hired anyone who had been a middle manager – because I was right. That stuff would have been useless for us at the beginning. It would have wasted our time and kept us from doing the most important work of making a good product. When do you add that layer of management? When you find yourself swearing,

“Damn it, we NEED a way to make sure you’re not copying over the changes I just made!”

When you only have two people working, and both in the same house, one can holler upstairs to the other,

“Hey, I’m working on level 4 today, okay? So, don’t touch it.”

At that point, you don’t need version control. Now, we do. When we did hire a project manager, we hired someone who had run a small business for ten years who shared our idea of having the degree of management you absolutely need and no more.

Finally, finally, finally, we are updating the 7 Generation Games website which, I believe, Maria originally put together in four hours one afternoon. It isn’t as if we didn’t know it needed a huge improvement. We believed our less than infinite time was best spent improving the game, meeting with customers, getting their feedback, designing more levels. We’re a small company. At Unite 2014, I attended a session where a developer mentioned they had 50 people working on their game for 2 1/2 years and it still wasn’t finished – that’s 125 person-years!  That’s just people making the game – not managers, marketing, accounting. We’ve spent something more than 2.5 person-years developing ours, which explains why we constantly feel like we need to put every spare second into development.

Having the luxury to worry about the website says something about how we have matured as a company. With new people hired to take the non-development work off of us and additional people picking up some of the development work, we no longer can say,

“Having a spiffy new website is the least of our problems.”

In fact, it’s been bugging the hell out of me for a few months now. Did I feel bad about it? Yes. Like the source management system, when it got to the point where it felt like,

“Damn it, we need this!”

instead of,

“Brother, I got 99 problems and that aint one of ‘em”

that it was time to get it done.

I’ve had people tell me that we should have been working on our website with bells, whistles and gold tassels before now because “VCs won’t be impressed if you don’t have a professional website.”

Hmm. Not sure VCs will be impressed if you don’t have a product, either. I know companies that started about the same time as 7 Generation Games and had terrific website, brochures, every social media account you can imagine,  unbelievably honed pitches – and they evaporated because they were all sizzle and no steak.

I’ve written before about Paul Hawken’s recommendation that in growing a business that you do as much for yourself as possible. That’s a whole post in itself, but to cut to the point – you keep your overhead low, which means you don’t require external funding in the short run. You are more viable in the long run not just because you have low debt and low operating expenses, but you also have the asset of everything you have learned yourself.

But we still hired someone else to update the website (-:

It’s still technically the weekend so I’m not blogging about statistics until tomorrow.  After some debate, I do think I have a multivariate stat textbook selected, though, so that’s good.

I got an invitation to go to a luncheon an old friend of mine sets up every few months for a bunch of us that used to work out together back in the 1980s. Almost all of those who attend are retired and three of the guys (they are all guys except for me) passed away in the past year or so. We’re getting to “that age”.

Ten or fifteen years ago, it was everyone’s parents that were dying. I competed in judo for 14 years, and taught it for another 30, so I have a lot of friends and acquaintances who are Japanese. At Japanese Buddhist funerals, at least here in Los Angeles, there is a song they always sing in Japanese. One day, after a half-dozen or more of our friends’ parents had passed away in a pretty short period of time, my friend, Hayward, leaned over to me during the service and said,

You know, I’m getting a little worried. I’m starting to know all of the words to that song.

Now, though, it is our friends and acquaintances who are dying, not their parents. That’s the sort of thing that gives you pause. Every time I go to one of those luncheons, we are talking about the people who we miss who aren’t there any more.

I’ve been working a lot of hours – as always. The Spoiled One talked me into going out with her twice this weekend,

Malibu farmonce to have dinner at the end a pier in Malibu at sunset, and once to go hiking in the Santa Monica mountains. She can be a good influence sometimes. She goes to boarding school during the week and she asked,

I’m only home on the weekends. You have all week to work. Why do you have to work while I’m here?

I didn’t have a really good answer to that.

The Invisible Developer said to me,

You know, I think we’re getting to that age where I don’t think we should have to do much other than what we want to do.

Ignoring the fact for a moment that a) he may be correct and b) that does reflect that we have a privileged life that most people in the world don’t attain, I spent Sunday until midnight writing the budget justification for a grant which was decidedly something I did NOT want to be doing. I have made an adjustment now that at midnight, I try to quit working, no matter what.

I made a major decision to write, at most, one more grant. If we get the Phase I that I’m writing now, I’ll write the Phase II. Other than that, I’m done. Over it. Seriously, after you’ve brought in $30 million or so, is getting $30,100,000 going to make  a difference in your overall accomplishments? That’s why I quit keeping track of grants funded after the first $30 million and just put down the latest ten or so. No, I don’t get to keep that money, either. It gets paid out over the years in salaries, rent, supplies, student scholarships and all of the other stuff the grants were written to do.

Once this grant is done, I will be working on the games and doing nothing else in September and October. Then, there are a few months of teaching classes and another six months after that of just working on the games.

I’m saying, “No” a lot.

  • No, I am not interested in another consulting contract.
  • No, I don’t want to work on a journal article with you.
  • No, I’m not writing another grant.
  • No, I’m not teaching any more classes.
  • No, I will not present at your conference.

I’m throwing all of my eggs in one basket, working on making our games better and better. We’re taking a risk, focusing just on this and hiring more people to work on the games to boot. There is actually a lot of statistics in it, too, both analyzing the data we’re in the middle of collecting and in our next game, under design, which teaches statistics.

Maybe someone else would retire and lay on a beach, but I’ve tried that a few times and I’m a completely failure at it.

2014-09-13 18.47.12The Invisible Developer said that someone asked Bob Dylan why he was still making music and playing shows when he didn’t need the money and Dylan replied,

What else would I do? This is what I do.

It seems like a good answer. As for me, what I do is game design, coding, statistics. I’m just going to do that. It occurs to me that I have just written either the last or next-to-last grant budget I am ever going to write. And that makes me very, very happy.

 

 

 

 

The new common core standards have statistics first taught in the sixth grade, or so they say. I disagree with this statement because as I see it, much of the basis of statistics is taught in the earlier grades, although not called by that name.  Here are just a few examples:

  • Bar graphs
  • Line plots
  • X,Y coordinates
  • Fractions and decimals (since the mean is rarely going to be an integer)
  • Ratios and proportions – in summarizing a data set, it’s pretty common to point out, for example, that the ratio of game fish to non-game fish was 3:2. We are often asking if the percentage of something observed is disproportionate to the percentage in the population.

It doesn’t bother me that these topics are not called statistics, I’m just pointing it out. Whether a line is considered a regression line or simply points in two-dimensional space is a matter of context and nothing else.

Speaking of lines and graphs, the very basis of describing a distribution starts with graphing it. So, those second grade bar graphs? Precursors to sixth grade requirements to summarize and described a set of data.

You might say I’m going to an extreme including fractions in there because I may as well throw in addition and division. After all, you need to add up the individual scores and divide by N. Actually, I wouldn’t argue too much with that view.

You can’t even compute a standard deviation without understanding the concepts of squares and square roots, so it would be easy to argue that is at least a prerequisite to statistics.

While I’ve heard a lot of people hating on the common core, personally, I’m interested in seeing how it plays out.

What I expect will continue to happen is that many children will be turned off of math by the third grade because it is generally taught SO abysmally. That isn’t all the fault of teachers – the books they are given to use are often deathly boring. This isn’t to say I am not bothered by the situation. It bothers me a lot.

Working mostly in low-performing schools, I see students who are not very proficient with fractions, proportions, exponents or mathematical notation. We are trying to design our games  to teach all of those prerequisites and then start showing students different distributions, having them collect and interpret data.

Lacking prerequisites is one of the three biggest barriers I see in teaching statistics, or any math, to students. The other two are related; low expectations for what students should be able to learn at each grade, and the fiction on the part of teachers and students that everything should be easy.

People were all up in arms years ago because there was a Barbie doll that said, “Math is hard.”

Guess what? Math is hard sometimes and that is why you have to work hard at it. Even if you really like math and do well at it in school, even if it’s your profession, there are times when you have to spend hours studying it and figuring something out.

Today, I was reviewing textbooks for a course I’ll be teaching on multivariate statistics. I didn’t like any of the three I read for the course, although I found one of them pretty interesting just from a personal perspective. The one I liked had pages after pages of equations in matrix algebra and it would be a definite stretch for most masters students. I’m really debating using it because I know, just like with the middle school students, there will be many lacking prerequisites and it will take a LOT of work on my part to explain vectors, determinants before we can even get to what they are supposed to be learning.

Last week, I had someone seriously ask me if we could make our games “look less like math so that students are learning it without realizing it”. No, we cannot. There’s nothing wrong with learning math that you need to disguise it to look like something else.

Whenever I catch myself thinking in designing a game, “Will the students be able to do X?” and I think they will not because they are lacking the prerequisites, I build an earlier level to teach the prerequisites and go ahead and include X anyway.

Here is why — I’m sitting at the other end teaching graduate students where the text begins like this:

root mean square residual (RMR) For a single-group analysis, the RMR is the root of the mean squared residuals:

\[  \mbox{RMR} = \sqrt {\frac{1}{b} [ \sum _ i^ p \sum _ j^ i (s_{ij} - \hat{\sigma }_{ij})^2 + \delta \sum _ i^ p (\bar{x}_ i - \hat{\mu }_ i)^2 ]}  \]

where

\[  b = \frac{p(p+1+2 \delta )}{2}  \]

is the number of distinct elements in the covariance matrix and in the mean vector (if modeled).

For multiple-group analysis, PROC CALIS uses the following formula for the overall RMR:

\[  \mbox{overall RMR} = \sqrt {\sum _{r=1}^ k \frac{w_ r}{\sum _{r=1}^ k w_ r} [ \sum _ i^ p \sum _ j^ i (s_{ij} - \hat{\sigma }_{ij})^2 + \delta \sum _ i^ p (\bar{x}_ i - \hat{\mu }_ i)^2 ] }  \]
Okay, actually I just pulled that from the SAS PROC CALIS documentation because I was too lazy to copy all of the equations that were in the book I was reading, which went on for pages and pages in this vein, but you get the idea.
Now, these 6th graders are 11 years from being in my course. What I want to know is in what grade do we magically go from having it “not look like math” to reading sentences like,
“The probability distribution (density) of a vector y denoted by f(y) is the same as the joint probability distribution of y1 …. yp . “
or
“It is easy to verify that the correlation coefficient matrix, R, is a symmetric positive definite matrix in which all of the diagonal elements are unity.”
If those two sentences don’t make absolute perfect sense to you, well, you’re fucked because those were the two easiest sentences in the chapter that I just pulled out because I didn’t need to go to the effort of typing in a lot of matrices. I’m teaching at Point B and I want to know how, if students’ Point A is not doing anything that looks like math, they are ever going to get here.
I think the answer is pretty obvious, which is why I’m insisting on teaching every bit of math every chance I can get.

I’m working on a section of a game that teaches fractions. If a player misses the question about where to meet up with the returning hunter, he or she gets sent to study. There is a movie that plays before this about needing to get back to the camp before dark.

Here is the question,

“The sisters begin to worry their brothers won’t make it back by dark. They start down the trail to meet them. They decide to stop and wait at the spot where their brothers will be 3/4 of the way back to camp. How far FROM the camp will the girls be?”

trail

 

I used this question because I want students to think about a few ideas:

  • Distance between two points can be thought of as a whole.
  • If you are a/b distance FROM point X, the remaining distance TO point X is 1 - a/b  . Of course, I don’t expect them to state it like that.
  • 1/4= 2/8
  • Number lines can be numbered in either direction. You can have 0 on the left or 0 on the right. The distance will be the same. The size of each interval will be the same.

These are kind of important ideas in math – equivalence, the arbitrary nature of labeling points on a line.

Students can click on GIVE ME A HINT, and a hints page pops up that explains, among other things, why you were wrong if you answered that the sisters would be 3/4 of the distance to the hunting grounds FROM the camp. If, even after reading the hints, (or if they skip the hints and just guess, we’re talking kids, after all) they get the problem wrong, the player is sent to watch a video clip explaining the problem, and then has to take a quiz to get back to the game.

SO … I had the thought instead of writing the quiz questions out of thin air, I might read what some more experienced teachers were giving to students in this grade as math problems. After all, I haven’t taught middle school math since the 1980s.  I went to several sites, I even purchased some things like “One year of fifth-grade homework problems” etc.

When I looked at page after page of what students are being given as homework assignments, the only thing I could think was “Are you fucking kidding me? No wonder kids hate math.”

All of the homework was like this:

1/4 + 1/3 =   ?

For FIFTY problems. That’s it! Then, the next day, it would be another fifty problems like this:

5/6 – 1/4 =  ?

Okay, you need to learn to add and subtract fractions, but is that ALL you need  to learn? Obviously not. How boring must it be to sit and just calculate answers to the same type of problem over and over? This stuff made me start to hate math and I LOVE math.

How can you possibly think that is teaching kids math? That’s like making them copy down all of the words in the dictionary and pretending you taught them literature.

Don’t even get me started on teaching statistics – wait, too late. I’m started. That is my rant for tomorrow.

I’m upset that I’m not perfect and I’m also very tired.

money

The Invisible Developer asked me tonight if I had a list of all of the grants that I’d had funded in my career.  For some reason, he thought I should have kept track of that. I told him that no one cared, not even me. The first few years, I would list in my c. v., “Over two million in funded projects.” “Over three million in funded projects.” Eventually, I felt like one of those McDonalds signs that keep changing, “Over 427 billion served.”

So, if I mentioned grant writing at all, I would just list a half-dozen or so funded projects. Really, once you’ve brought in over $7.5 million, people don’t care so much about the details.  Dr. Erich Longie, who was president of Cankdeska Cikana Community College when I worked for them used to say we had gotten over $30 million. I honestly forget. I sat down and wrote whatever I could remember and came up with about $19 million, but I’m sure there are some from 15 or 20 years ago that I forgot. Of that $19 million, $15 million were grants I wrote with no help whatsoever. That is, I sat in front of computer, swore, wrote, added numbers, wrote some more, swore some more and in the end produced 100 or 200 pages that were good enough that someone gave the funding to run a program and pay people’s salaries for five more years. The other $4 million, I wrote large parts of but other people helped with budget or some other part.

I know I have forgotten a bunch, and I don’t even care to look. When I was trying to come up with a list, I saw one grant for $1.5 million in my list of examples and thought, “Oh yeah, I had totally forgotten about that.”

And yet, today I made a mistake on a grant and I kept thinking what an idiot I am.

I used to make a lot of money writing grants for people. There was one year when every single proposal I wrote got funded. I was the flavor of the month. Everyone wanted me to write grants for them. Of course, the first time I wrote one that didn’t get funded, the client was pretty upset. How could that happen?

ice cream

In an average year, 85% of the proposals I wrote got funded. I’m not as great as that makes me sound. I was selective in what competitions I chose. If there wasn’t at least a one in seven chance of getting funded, I didn’t apply. When I started, my cut-off was one in five, but things have gotten more competitive. (That is, I would look at the number of proposals they funded last year and the number of applications they received and calculate the odds. Some competitions fund as few as 3% of the applicants. I wouldn’t bother with these.) Still, hitting 85% when only 14-20% get funded is a pretty good track record.

I don’t think the mistake that I made will keep the grant from getting funded. It was possible to submit a revision, since it was before the deadline, and I did that, on time. Still, I felt like an idiot.

Confession: I don’t really like grant writing

I’ve never liked grant writing and I’ve only ever met one person who did. He was very good at it but he’s retired now and probably nearly 80. It’s tedious work. You read 100+ pages of instructions, write 100 pages to fit a formula – Needs Assessment, Objectives, Project Design, Evaluation, Adequacy of Resources, Personnel. Fill in every box and bubble. Cite research to back up everything.

This is probably why I’ve never been very sympathetic when my children complained about their schoolwork being boring or hard. The fun, easy stuff we do for free. The boring or hard stuff, you need to pay. Grant writing is both boring AND hard. I did it for years because I was a widow with three young children and I needed the money. I’m grateful that I was able to support my children through private schools, good universities and the Olympics.

The only grants I write any more are for people I have worked with for years. Don’t call and ask me if  I will write one for you because the answer is “No.”

No matter how many millions I hit, I feel terrible when I miss

Often, I’m writing grants for institutions where people are on soft money. That means, if the grant I write isn’t good enough, people lose their jobs. So, people somewhere else who did get the grant keep their jobs, but I don’t know THOSE people.

My point, and I do have one

I was going to write about PROC DATASETS today, but I wrote about this instead because it has been on my mind.

I think I have this in common with a lot of successful people – no matter how much money I bring in, how many good papers I write, no matter how many keynotes “knock ‘em dead”, no matter how many grants get funded – if I slip once, I think I’m a failure.

Realistically, I know this is not true. If this particular grant doesn’t get funded, I’ll still have written tens of millions of dollars in successful proposals. This struck me the LAST time I had something not funded, over a year ago.  I was feeling bad about it, and happened to be looking for something in a filing cabinet. (Yes, we have filing cabinets.) Going through those, I came upon file after file of data, reports, budget reports, from one funded project after another. It occurred to me that I had a LOT of successful projects over the years. It’s like this proposal I just finished. I think it was excellent work but there were one or two mistakes, and they weren’t even fatal mistakes (I hope!)

Here is my advice – successful people tend to immediately forget their successes and focus on the next challenge. That may be part of what makes them successful but it can also be a bit depressing if you forget the successes of the past when you are confronted with a failure in the present it looms unrealistically large. So, yes, fix your mistakes, learn from them, but also take some time every day to pat yourself on the back for the many, many mountains you’ve climbed in life.

 

 

Last week was very productively spent at Unite 2014 learning about all things Unity.

In case you are not into game development, Unity claims to be used by over a million game developers around the world. While I rather suspect those statistics are up their with Second Life and Twitter counting everyone who ever signed up for an account, there is no denying that one whole hell of a lot of people use Unity for game development, including us. I have to say all of my major objectives in attending were met.

2d Game image

The first thing I wanted to achieve was make a definite decision whether to go with Unity for the 2D game for the iPad that we are going to dive into next month. We have some artwork, a rough design, but we’re coming up on the first point of no return decision. Well, there’s always a return, but if we start with Unity and then switch to solution X it may take us quite a bit of time to re-tool.

The decision was, yes, we definitely want to use Unity. My concerns about performance on lower powered devices were addressed. First, I spoke to some helpful folks from Unity who pointed out that you can set your game’s graphic quality ranging from Fastest through Beautiful to Fantastic. Yeah, those are actually the last two settings. I also attended a session on tips for working with mobile devices that gave me some good ideas, like if we have character that has a sword, instead of having two images, a sword and a character, have that be drawn as one image.

Two other clinchers for unity were

the number of platforms to which we could expand eventually – play station, xbox, android phones, smart TVs. Unity works with all of those. The same would not be true of code we wrote in javascript for the web.( Speaking of javascript, even though Unity supports both C# and javascript, I noted that the examples were overwhelmingly C# ones in the presentations and their seems to be a definite lean in that direction), and

the number of vendors with integrated add-on packages, everything from SpeedTree, which makes drawing trees fascinating to mixamo which offers a much simpler way for making 3-D animated characters. I was so impressed with mixamo that I texted one of our fabulous artists from the presentation, This is something we need to start using, and by we, I mean you, because we both know I suck at art.

The second thing I wanted to achieve was to get more familiar with Unity. That was achieved. I was able to follow the examples in the Training Day and do the Nightmares game, which was pretty fun. The next couple of days, in my spare time, I made another much simpler game from scratch for my grandchildren to play. It won’t win any awards for originality or anything else, but my Unity knowledge definitely spiked up in a week.

Screen shot of nightmares game

One reason I insist on going to events like this, even though people tell me that I am the CEO and should be doing CEO things, is that I would never, ever find 40 hours in a week just to learn  if I stayed back in the office. I’ve written before about the Red Queen’s Race in technology, where you need to run as fast as you can to stay in the same place. I turned 56 last week and more opportunities are coming my way than ever before, which I attribute to refusing to equate age with stagnation.

No brogrammer culture in sight

Speaking of age – I usually go to conferences on statistics – the Joint Statistical Meetings, SAS Global Forum, etc. Sometimes I go to start-up events. This was my first game developer conference and I had heard horrid things about the game industry, that women are sexually harassed, assaulted, disrespected.

As far as horrid brogrammer culture – didn’t see it, and I looked. The demographics were overwhelmingly male, somewhere between 90-95%, I would guess. None of the sessions I attended had a female presenter. On the other hand, I didn’t submit a paper. I suggested it to The Invisible Developer and he didn’t want to do it, and I was too busy with everything else. We decided next year, for sure we would co-author one and submit it. Should be fun.

My point is, I don’t  think they received hardly any submissions from women, just based on the number of women attending.

Despite all of the people who claim to have started coding in the womb and how much VCs supposedly drool over twenty-somethings, I saw about as many people under 20 as I did over 60. That’s based on me eye-balling it, I didn’t actually go around carding people. Given the amount of grey hair and balding, I’m going for the crowd was overwhelmingly in their thirties and forties.

While there were far fewer women than at statistics conferences, there were more than the zero African-Americans and Latinos you usually see at statistics events, although it was clear from the eavesdropping during the coffee breaks (I call it qualitative data collection) that many of these folks were actually from Latin America attending the conference. It was FAR more international than SAS Global Forum or JSM, even though both of those have a smattering of international folks.

As far as the whole sexual harassment, mansplaining, unwelcome thing – didn’t see it. Nada. Zip. Zilch. Every single person we met was nice, polite and interested in talking about game development. No one treated me like I was a second-class citizen and the only person who insisted on explaining stuff to me that I already knew was The Invisible Developer, but he has lots of other non-annoying traits that make up for it, so it doesn’t bother me.

It may be that I am old, plus I was there with my husband, so no one would bother me. However, I really did look, whether it was at cocktails in the evening, at lunch, during the coffee breaks, at the young women sitting around me in conference sessions  - and I did not see a single hint of the kind of bad behavior I’ve been hearing about. I’m a small person and at this conference, I was just there to hang out and learn stuff, so I was wearing jeans and a hoodie most days, my point being, there wasn’t any reason people would be on their best behavior around me.

I’m not saying it doesn’t happen. I’m saying I didn’t see it happen here.

All I can say is — you should go to the next Unite conference. Learn stuff about game development and people will be nice to you. What more can you want? Well, if you want more, I should add that Seattle had some awesome restaurants.

If you want to go next year, do jump on it right away when you see it advertised though, because everything sold out – the conference, training day, nearby hotels.

 

Finishing up my second paper for WUSS next month and I have been thinking about the usefulness of character functions in a world where it sometimes seems like everyone is just put on this earth to irritate the hell out of me.

Take this problem, for example,

In analyzing the data for our games, we have all sorts of  beta testers – teachers, staff, interns –  who played the game but their data should be deleted from the datasets for the annual report. We asked them to use the word TEST in their username so it would be easy to pull them from the data. Some of them did and some apparently feel that I just say these things of exercise for my mouth.

There is also a problem with data entry errors. The subjects in this study were children in grades three through six and they frequently mistyped their usernames.

SAS has a wealth of character functions and this is a first opportunity to get to know and love four of them.

The UPCASE function, not surprisingly, changes the value of a variable to upper case. The COMPRESS function, if you give it only the variable as an argument, will remove blanks from a value. You can, however, include additional characters to remove. Since many of the students entered their names on some days as JohnDoe and others as John.Doe , we are removing both blanks and periods using the COMPRESS function, after we have converted them to upper case.

username = COMPRESS(UPCASE(username),'. ') ;

(Also, see my previous post on using COMPRESS to remove character data when your data is numeric-ish (c) )

Then there is the INDEX function. Here is a general tip. Any time you find yourself thinking,

“Gee it would be nice if SAS did thing X”,

it is a pretty good bet that someone else thought the same idea and there is a function for it. The INDEX function is a perfect example of that. Our testers played the games many, many times and used usernames like “tester1”, “this.test”, “skippy the tester” or “intern7”.

“Wouldn’t it be nice if there was way to find out whether a given string appeared anywhere in a value?”

Enter the INDEX function, which does exactly that. This function is case-sensitive, but since we already converted the username to upper case above, that is no problem for us.

IF INDEX(username, “TEST”) > 0 or INDEX(username,”INTERN”) > 0 THEN DELETE ;

will do exactly what we want. The INDEX function returns a number that is the starting position in the string of the substring we are trying to find. So, in “skippy the tester”, the value is 12, in “tester1” it is 1. If the string is not found, the value is 0.

A problem I found when looking at the contents of each of the 8 datasets used for my research project was that the username variable was not the same length in all of them, which could cause problems later when they were to be merged together or concatenated. All of the usernames should have been a maximum of 12 characters but there were data entry problems when students would type mister_rogers instead of mr_rogers.

When the data are read in using PROC IMPORT, “For delimited files, the first 20 rows are scanned to determine the variable attributes. You can increase the number of rows scanned by using the GUESSINGROWS data source statement.”

Wouldn’t it be nice if there was a way to just get the first n characters of a string?

newid = SUBSTR(username, 1, 12) ;

will create a new variable with the first 12 characters of the username, now that we have gone and fixed the problems with it.

 

SAS is chock full of functions and options to make your life easier. If you are just beginning to work with SAS and you spend time working with messy data, you probably couldn’t spend your time much better than taking a few hours to read up on SAS character functions. In fact, I think for someone new to SAS, becoming familiar with a large number of all types of functions – character, statistical, date and time – is probably the fastest way to improve one’s productivity. (Ron Cody’s book, SAS Functions by Example, is a great resource).  I’ve lost count of the number of times when reviewing a student’s program I’ve seen many lines of completely unnecessary code that could have been replaced by a SAS function – if the student only knew that it existed.

Hint: It’s math!

My last post, I ranted about the need for math if you are going to learn to code.

I was thinking about that again today. Unity is the game engine that claims to be used by over a million developers. That may be true – it seems like everyone I ran into at the Serious Play conference was using Unity, and we do, too.

Unity is great and there are an enormous number of assets you can purchase that make it easier to create games. That being said, at the first step in learning Unity, you are told that to locate your object in this three-dimensional space you set the X, Y and Z values. The default for these is the origin (0,0,0).

If you’re reading this blog, you’re probably the kind of person to whom that is immediately obvious. You’ve looked at charts a thousand times, you know exactly what an X and Y axis are, that the origin is the point at X=0, Y= 0 and it is not much effort at all for you to conceive of a Z axis and generalize from two-dimensional space to three dimensions.

When one of the most basic tutorials begins with discussing a plane, even if you didn’t remember much about geometry, you probably would recognize that as a two-dimensional space.

Concepts like scale and rotation depend on mathematics.

I’ve been trying to think of examples of programming that didn’t use much math. I did come up with one – you could create an application using PHP, MySQL, HTML and CSS to enter data into a database via forms and create simple reports. Not sure how many kids would be interested in that – I don’t find it all that interesting myself and I love programming.

My point is that if we don’t teach kids math, they are going to be limited in the types of coding they can do. Even areas like gaming, where you might think math isn’t so necessary, depend heavily on a level of mathematics that the average American student struggles with.

Now, if people who are promoting teaching kids to code see it as one way to motivate students to learn more math, then I think they might have some success.

On the other hand, overlooking the fact that students will need math is setting them up for failure.

So, that’s why the proposal I’m working on now is to develop games to teach students geometry, statistics, measurement and data. I hope that then, there will be a larger pool of young people prepared to learn to code.

 

 

cake

I’ve spent a good bit of my life living and working in places that many of my colleagues would not drive through in the middle of the day with the windows rolled up and the car doors locked, so you’ll have to excuse me if I am a bit cynical about the latest push to teach everyone to code.

I’m not opposed to coding, in fact, I am greatly in favor of it. It is tied with drinking Chardonnay for favorite activity for which you do not have to get naked.  I was an industrial engineer in 1982 – so I was into STEM before STEM was even a thing.

What makes me roll my eyes and sigh is where many well-meaning people have completely missed the mark when they say that you don’t really need to know much math to write software. Clearly, they can’t mean all kinds of software because obviously if you write software to do statistical analysis, predictive analytics or whatever the phrase du jour is, you very much need math.

Often, these people are talking about games -

“Kids play games, let’s have them make them.”

That doesn’t necessarily follow any more than,

“I have a liver. I should create a dialysis machine.”

Ignoring the faulty logic for a minute, let me point out that most games DO require math. The people saying they don’t are usually people who are quite successful, both professionally and academically and have spent their entire lives around people much like them. What they mean when they say that, “Games don’t require much math” is

“I took three semesters of Calculus and a course in multivariate statistics and I rarely use any of that in making games.”

I, on the other hand, meet many people who can’t multiply two-digit numbers without a calculator and have never given a thought to the concepts of randomization, ceiling, floor or rounding. The vast majority of these people are perfectly intelligent enough to learn those things if ever given the motivation, time and instruction.

Here are a few lines from a super-simple game, “Canoe World”,  I wrote in the past two days. It’s a very common application. You can find it in the Game Design book by Rex van der Spuy and hundreds of other places. You randomly decide who is stronger, the player or “enemy”, one wins the exchange and points change  - a pretty standard game component.

function sink(thing) {
// The player’s strength ;
var playerStrength = Math.ceil((food+ health)/2) ;
var rockStrength = Math.ceil(Math.random()* playerStrength*2) ;
// Find out if the player strength is greater than the rock strength ;
if (rockStrength > playerStrength){
// The rock sinks the canoe ;
var lostFish = Math.round(rockStrength/2) ;
food -= lostFish ;
// Player gains experience ;
experience += 1 ;

 

To compute the player’s strength, I take the average of their food and health points, and round that up. That’s the ceiling function. To understand this, you must have some idea of order of operations – things in parentheses get done first – to understand that first I’m adding the two values and then dividing by 2.

You need to know that having that slash and then a number means to divide by a number.

That is math and not everyone knows it.

A ceiling function rounds up – and to understand that, you need to understand the concept of rounding.

To understand the second statement, you need to know what a random number is, that the * means to multiply. You also need to know that the random function generates a random number between 0 and 1 and realize that is a continuous distribution because there are an infinite number of numbers between 0 and 1.

That is math and not everyone knows that.

You’d have to realize that since the random number function is between 0 and 1, if you just multiply that number by the player strength it is ALWAYS going to be less or equal and the “enemy” will never win. Since, on the average, the random number will be .5, if you multiply by 2, that makes it equally likely the player or enemy will win and gives you a game of chance.

To change the probability of the player winning the exchange, you can make that number larger or smaller.

You need to know that the > means that the thing on the left is greater than the thing on the right.

All of that is math and not everyone knows it.

The people who want to teach kids to code assume that either,

a. Everyone knows this much math – in which case they are OH, SO WRONG!   or …

b. That they will work with the minority of students who do.

There is absolutely nothing wrong with option B. I wish you the best of luck with all my heart and will do whatever I can to help.

Most of what I can do to help is make games to teach math, so that more kids will fit with option B.

There is an option C, which intrigues me, and I have heard very few people discuss, which is to teach the math along with coding. That is certainly not impossible - but it would be hard – you would need students very motivated to put in the time and effort and teachers who were able to step back and start at whatever level of math competency required by an individual student.

This whole thing reminds me yet again of the comment made by Dr. Irv Balow, Dean of the UC Riverside School of Education. Frustrated by reading so much research that said under some conditions class size had an effect, under other conditions, not so much, for some students cooperative learning was a benefit, for others it was detrimental, etc. etc. etc. , a student asked,

“Isn’t there anything in education or psychology we know as absolute, unqualified fact?”

After some reflection, Dr. Balow replied, that the only thing he could be absolutely sure of was this :

“All of the simple answers are wrong.”

If I had a clone, all of my code would be beautiful.

St. Paul's butte

Last week, I was a speaker at the Tribal Disability Conference in Turtle Mountain, where I spoke on starting a business. Then, I went for a site visit at Spirit Lake Vocational Rehabilitation followed by another talk on self-employment at the Tribal Disability Awareness conference. In a nutshell, I talked about how having a disability often teaches people to persevere, to not accept when told they can’t do something, to find different ways of meeting goals and solicit other people to help them – and pointed out that all of these traits can be an advantage in starting a business.

Along the way, I was working on a couple of grants, edited a couple of papers – and just this second remembered I have to finish editing a paper I co-authored for something – crap!

There was also the usual matter of approving payroll and invoices, answering email and reviewing work people did while I was gone – new teaching videos to go into the game, artwork, animation, sound files,documentation, bug fixes. Haven’t nearly finished with that.

I’m super-stoked to be on a panel on Monday at the National Council of La Raza conference, “Economic Empowerment in a Wireless World”. I’m planning on going Sunday as well, to a lot of the sessions on education.

Heidi Heitkamp

I got to hear Heidi Heitkamp speak at Turtle Mountain last week and with any luck I’ll be able to attend Elizabeth Warren’s talk on Sunday. Must be my week for Democratic senators.

Somewhere in all of that, I finished my slides and video for the Serious Play conference, also this week, which I am also excited to attend.

Then, there was the meeting people for lunch, stopping in on my daughter who had surgery and checking on her and all of the other general life things. There is a board meeting I have to get up and go to in about nine hours, which I am definitely NOT excited about, but I’m the chair, so I kind of have to show up.

In the midst of all of this, there are 77 fixes and improvements in the Fish Lake game, from “add a better message when the pretest is completed” to “Revise quiz code for re-routing students. This is replicated in many quizzes. Make external file ref & just call it in all of those”.  Some of those are crucial – like I never wrote the quiz for one spot and so that is a dead end.

There are another 47 improvements for Spirit Lake. All of those are to make the game better. For example, we recorded voices from kids at Spirit Lake, and when a student gets a problem wrong, I want to add a video clip that shows one of the game characters and says something like,

“No, 7 x 8 = 56. Now your village burned down.”

The kids did a great job and I think those clips will really help players remember their multiplication tables.

burning village

But … back to my missing quiz. It has to be on mixed fractions, with questions answered using both improper fractions and mixed fractions. There also should be a question with two answers for the numbers that the mixed fraction falls between. Also, at least two word problems, with answers that are whole numbers.

As each question is answered, the program needs to determine if it is the right answer, and, if so, add to the total score, then show a slightly more difficult problem. At the end of the quiz, the student is shown  a success message and the student data written to our database and routed back to the game. If it is the wrong answer, the student is shown a failure message and routed to the appropriate page to study.

In the process of writing this, by the way, I noticed that one of the links on the study page is wrong, so I need to fix that. Apparently, I meant to write something involving turtle eggs. Also, there is a video Diana did on mixed fractions which I have yet to review because I got back at midnight on Wednesday and dived into everything else.

So … back to my no-longer-missing quiz. It is done. I even put in a few comments. As I was writing it, I was thinking, “some of this code is duplicated” and “I bet I could re-write some of these functions so they were more general and then not have so many functions” and a whole lot of other ideas for making it just a better program.

I KNOW that the world is full of code that gets written to be fixed “another day” is still sitting there six years later. In my defense, I will say that I do often loop back around and fix that code – although it might be a year or two later.

Here is my compromise – when I am in town, I try, come hell or high water, to make at least one substantive improvement on one of the games every day – a new video clip, a new quiz. At worst, I may not get any more done than fixing a broken link or touching up a graphic or sound file, but I really try to do more than that. Those 124 fixes are down from 266. It is not perfect but it is progress and it is 1 a.m. In addition to writing this post, I did review one more instructional video and sent feedback, finished the first draft of editing the paper and added improving the code in this quiz as a lower priority game fix.

My code is not perfect but it works, and I will come back and try to do better tomorrow because, at the end of the day, there’s another day. That’s how time works.

 

 

 

Next Page →