Tom Peters has written quite a bit about the huge market opportunities in providing goods and services designed for two populations – women and old geezers.

I thought of this today as, for the thousandth time, I went through the pre-check line only to have my titanium knee set off the security alarm and get patted down. X-ray scanners are in limited supply while people who have had joint replacements are an increasing number. Why isn’t anyone addressing this opportunity?

Another uncool, overlooked market is rural communities. I just spent two weeks in North Dakota and one of the first things I did when I got home was have someone order 100 USB drives with our logo so that we could put the game on it and mail it to schools. In many places where I travel, it can take an hour to download 1 GB. If the connection drops in the middle, you may need to start over. While I can download both of our games in under 2 minutes in our office in Santa Monica, in some of the places I visit, that can take all morning.

I have yet to show our game to teachers who were not enthusiastic about it. Even when we have technical difficulties – and we do, because we are just getting out of beta May 1st – they are willing to work with us to get them fixed.

When Maria was at a tech event in New York City, a venture capitalist in one of the panels told her point blank ,

No one is interested in Indians.

You know where people are interested in Indians? On the reservations, in school districts with large Native American populations.

Angie at powwow

 

Often, people tell me,

“The education space is overcrowded”

This makes me laugh. The education space is overcrowded with multiple-guess games and shooting games – you know, shooting and spelling, shooting and multiplication, click on the rocket ship with the number that equals 3 x 5 . Have you ever watched children play these games? Often they just randomly click as fast as they can on as many ships or bananas or whatever it is.

So far, we have spent over $350,000 and a year and a half developing 7 Generation Games.  Not all of that has been everyone working full time on just the game. I would estimate we’ve had the equivalent of 2.5 full-time people for a year. We have almost 18 months remaining on our Phase II grant during which there will be at least 3 people working full time.

Today, I’m analyzing the quiz data that comes in daily to see where students are failing in the game. This pretty much validates what we have seen in four weeks of observations at our beta sites this spring semester.

When I read a year or so ago about a 13-year-old who put together in a weekend some app that was selling really well on the app store, I laughed. If you are selling something that a 13-year-old can knock together in three days with an SDK his mom bought him and a book from the public library, then your market is going to be pretty damn crowded.

If it requires actual data to document that it really is educational, you apply that data to track problems both with users and your program, you create dialogue, story line, artwork –  then I don’t think your market is going to be so crowded.

If you want to see what we are up to, you can download Spirit Lake: The Game here for 9.99

If you don’t want to shell out ten bucks (cheapskate!) you can check out the pretest we are working on for our second game, Fish Lake, here, just to see some of the type of data we collect to decide if the game is working. Note, this is a work in progress that will be ready for schools in the fall semester.

 

 

For the past 24 years, I have been someone’s boss – research assistants, secretaries, programmers, tech writers, artists, animators – the list is long, of both people and positions. When I told my niece the title of this post, she asked,

“Wouldn’t your boss just tell you (whatever it was)? Isn’t that the good thing about being the boss, you don’t need to bite your tongue?”

No.

There are many reasons your boss won’t tell you what he or she is thinking. Maybe El Jefé doesn’t want to get sued, hurt your feelings or put up with a scene in the office. If you are a contractor, the boss may find it simpler to just not renew your contract. It’s easier for the boss to say that Bob got the promotion because he has more experience or they just don’t have enough work to justify two assistant widget makers.

Okay, fine, as a public service announcement, I am going to tell you what your boss did not.

1. Show up when you are supposed to show up. This may seem a bit hypocritical if you read this blog often and know that I don’t do mornings, but that’s not the point. The point is that if I say I will be in Fort Totten, North Dakota at 10 a.m. on April 10th, if you come into the office at that time, you should find me there. Reliable competence is worth more than unreliable brilliance. I can make promises to a customer based on reliable competence and know that those promises will be kept.

2. Get your work done. On time. I really don’t give a fuck that “something came up”. Don’t ever, ever tell me that you couldn’t make a meeting because you got caught in traffic, were snowed in, your internet was down, your car broke down, your phone was disconnected or a hundred other excuses. Get your shit together. There are   millions of people in this country who manage to get to work despite traffic jams and snow, who pay their bills on time and don’t get their utilities disconnected – join us! Before you start telling me that there are poor people in America, blah blah blah, let me tell you this – I left home at 15 years old. I know plenty about being poor. I also know that the public library has Internet, there is such a thing as public transportation, which brings me to  …

3. It is not my job to fix your problems. Here is the deal that you and I have – you do work and I see that you are paid the amount we agreed at the time we agreed. If I say I’ll pay your expenses, you will get exactly what is promised. If you don’t have child care because your ex-husband is a jerk, then you need to figure that out. I managed to start and run a few businesses as a single mom and then a mom of several children. In our company, people are allowed to telecommute most of the time and are welcome to bring their children and even their dog to the office. If you can’t work late because your child insists that you attend every single one of his soccer games – then you need to provide junior a reality check that he is not the center of the universe. If you broke up with your boyfriend and spent all night crying  - I really, truly still expect you to get your work done today.

4. Don’t just do the bare minimum! Most jobs offer a great opportunity for people to LEARN and unlike college, they actually pay you to do it. What a deal! At The Julia Group, you can learn how to do everything from complex statistical calculations to use the video editing software. Specifics may vary from one job to the next, but the more you learn, the more valuable you are to us and the better it is for your future. Don’t just do only what you are specifically asked and then sit on your hands. Suggest something! Ask questions! Explore! There are a ton of resources for learning about your job – an internal wiki, the internet, books. There is no excuse for anyone ever to be just sitting around doing nothing.

5. Passive-aggressive is bullshit.  I know people who are very good at whatever the boss specifically tells them to do, but don’t let him or her know, for example, that there will be an inspection tomorrow. If confronted with this fact, they act injured, “You never told me to tell you if the IRS was coming in.” As my mother used to say, if you work for a man, you ought to work for him. If you hate your boss and your job that much that you are trying to sabotage him or her – quit. Go somewhere you will be happy instead of staying around and trying to make everyone else pay.

6. Understand the difference between a major life event and life. In the past year, one of our employees had a baby and another was married. I expected for them to take time off – and they did. It would have been weird if they didn’t. That still doesn’t justify YOU not getting your work done.

7. If there is a problem, of any kind, let me know as soon as possible. Sometimes I will be sympathetic – as with the person whose baby had surgery – and say take as much time as you need and let me know when you are available. Sometimes I will be unsympathetic, as in you miscalculated how long a task would take – but I’ll be a hell of a lot MORE unsympathetic if you don’t let me know you will miss a deadline until I call you three days after the work was due.

8. Related to all of these, no matter how brilliant or hard working you are, there is a point beyond which it is not worth the pain in the ass of putting up with you.

If you take all of these 8 points to heart and mend your ways, before you know it, you will be the boss and God will prove he has a sense of humor by giving you employees exactly like you were.

God

I read some poorly done research the other day that showed a very small number of start-ups that became billion-dollar companies were started by people over 50.  As someone else pointed out in the comments to it, that was lacking a key number, the denominator. That is, if people over 50 only started 20 companies, and 2 of them made a billion dollars, while people 25-35 started 10,000 companies and 20 of them made over a billion dollars, that still suggests that your odds are far better with the older crowd.
Regardless of the denominator, I don’t care that much. As a statistician, I am well aware that while statistics are great at predicting probability you cannot say anything with certainty about an individual case.

I was talking with The Invisible Developer one day about scheduling, cash flow and so on, and asked him,

“How long, realistically, given our current rate of spending, do you think we can continue development?”

He answered,

“Forever.”

Here’s the thing – all of the coding now is done by the two of us, and we managed to put enough away to live on in retirement. Three of our children are on their own doing fairly well. The Spoiled One received a significant scholarship to prep school and we already saved up for her college education.

So … at 55 and 58, respectively, we can easily work on developing these games for another 10 years. Being these ages, we have a ton of years of experience in programming, documentation, and other fields like statistics, mathematics and education. Think what it would cost you as the major expense for creating a game and it would be  - developers.  We can afford two full-time senior people before we have to bring in a dime of revenue. We can probably continue to support a part-time tech support person and a part-time administrative staff member indefinitely as well.

Now, of course, we would LIKE to make money and that is our plan. (The Spoiled One and our Chief Marketing Officer both remind us regularly that they would like us to make a LOT of money). Our employees would be unhappy if we shrank down to two part-time people plus us. The fact that I am writing this post at 11:30 on Saturday night in North Dakota, after spending much of the day writing improvements to the game tells you something about how serious I am – and The Invisible Developer is home working on another game.

Still, it appears to us a huge advantage that we have a relatively long runway. In addition to the funding we have received from the SBIR Phase I and Phase II awards and the Kickstarter funds, we are able to self-fund development for a really long time.

One of the more brilliant things we have done – for which I would love to take credit, but I have to admit the SBIR grant was an impetus – is to install the beta version of the game in a lot of schools. If we were just home coding, there might be a tendency to have a laid back attitude – but knowing that teachers in several states are having a problem with a part of the game introduces an urgency on getting in fixes. Because we do those fixes in-house, we can often do them in less than a week.  The fixes the teachers requested on Wednesday will be done by Sunday night, tested by our fabulous game testers and installed in the schools on Wednesday of the upcoming week.

My point – which you may have despaired of me having  - is that older entrepreneurs who have raised their children and secured their retirement, may be able to put in more time for a longer period, than younger founders. That ability to stick in the game makes them LESS of a risk.

 

If you’d like to buy Spirit Lake: The Game and see what I am talking about, click here.

The game is focused on mathematics for grades 3-5, but it’s also fun if you just want to tromp around in a virtual world set in North America in 1800s.

 

 

snow

 

Since there is a blizzard and I’m inside analyzing data, I thought it was a good time for another random SAS tip.

The default output type for SAS 9.4 is HTML, which is nice for presentation and sharing, but sometimes I would like a plain text output, especially if I’m going to be doing something like copying and pasting the output into my program.

You can easily toggle between plain text and HTML output by doing this

Go to the TOOLS menu, select OPTIONS and then PREFERENCES.

In the Preferences window, click on the RESULTS tab.

window with listing preference

 

Check the box next to Create listing and uncheck the box next to Create HTML . Click OK.

Now your results will be in plain text output instead of HTML. To switch back, just go through the same steps, uncheck the listing box and check the HTML box.

Speaking of copying your output into your program ….

I wrote previously about a problem where  I needed to do, among other things, a PROC CONTENTS with the variables in the order they occur in the dataset, not alphabetical order (use varnum) .

 

If you just copy and paste the output of a typical CONTENTS procedure and all you want is the variable names,  you will have a lot of stuff about data type, length and label that you need to delete. Also, my life experience has been that the keystrokes you make (including the backspace key), the more likely you are to make mistakes. When it comes to the keyboard, less is more.

What I really want is the variables output in the order they appear and nothing more. The SHORT option does this for me.

proc contents data= in.sl_pretest varnum short;

and produces this output

Which_choice_is_the_same_as_the What_is_five_time_six__ Fred_walked_for_one_hour__How_ma How_is_nine_thousand__thirty_sev There_are_124_students_making_th
Valerie_has_225_pennies__She_div Joe_did_this_division_problem Which_sign_goes_in_the_space_to

What possible good is that mess? Well, I copy and paste it under the RENAME keyword and then hit the spacebar between each variable name and type = q1   , or whatever number,  like so

RENAME

Which_choice_is_the_same_as_the = q1

What_is_five_time_six__  = q2

Fred_walked_for_one_hour__How_ma = q3

 

As I mentioned in the previous post, I could not do this using an array statement because the data were of mixed type, character and numeric, and SAS does not accept data of mixed types. I also mentioned how to get around that so if you are interested, go back and read that post.

So, this is day 13 of the 20 day blogging challenge, and I skipped over day 12 (although I may go back to it). The prompt was

“Tell about a favorite book to share or teach. Provide at least one example of an extension or cross-curricular lesson.”

My favorite resource is not actually a book, it is a magazine, Mathematics Teaching in the Middle School, published by the National Council of Teachers of Mathematics. One of my favorite parts of the magazine is the Palette of Problems section, which is a bit odd because often I find myself thinking … this problem has no point, for example,

“How many birth dates in a century have the property that the sum of the month and the day equal the value of the last two digits of the birth year?”

I do realize that some students will be interested just in the challenge of solving a problem. However, for many students, the apparent lack of application can be very de-motivating. Most of the problems, though, can be adopted to our games with really simple modifications or may just give me ideas for a problem that would fit right in. For example, this is an extension of a problem in this month’s issue

 

catfish

Zoongey Gniw is looking for a wife.  He is from the Catfish clan and people from the same clan are not allowed to marry. His uncles are going to trade with two different bands. In the first band, 12% are from the Marten clan, 20% from the Crane clan, 64% from the Bear and Loon clans and the rest from the Catfish clan. His other uncle is going to trade with a band where 11% are from the Catfish clan. It is going to be a hard decision which uncle to accompany, says his father.

Not at all, says Zoongey Gniw, and he steps over to the first uncle. How did he decide?

This fits perfectly in our game. There is a video clip on clans, narrated by the inimitable Debbie Gourneau from Turtle Mountain. The prohibition on marrying within clans is historically accurate. As far as the interest of our students today, not only are many of them from tribes that have  the clan system described, but they are also, like most middle school students, interested in the opposite sex, having a boyfriend or girlfriend, so the topic is inherently interesting.

I like this magazine, and I call it that deliberately, rather than an academic journal. All of the journals I read and nearly all of the academic texts talk in theory about what needs to be done and why but not nearly enough on how to effectively do it, whether the topic is teaching mathematics or running a company. Mathematics Teaching in the Middle School is all about how to do things.

When I was in graduate school, it was common for professors to mock teachers who “aren’t interested in anything longer-range or deeper than what am I going to do on Monday.”

That’s the attitude you have the luxury of having if you don’t have to actually show up and teach on Monday.

Sometimes, like Alice in Wonderland, I give myself very good advice. Unlike Alice, though, I occasionally take it. The very best advice I think I have given on this blog is this:

Always do one more thing. Before you turn in at the end of the day, when you think you are tired out and done with work, write a blog post, edit the CSS on one page, answer an email. Those things will add up.

Several people have told me they have taken that to heart and it has helped them be noticeably more productive.  Although I must admit  that my sister told me that she was convinced I was an incurable workaholic and she was hoping for advice more along the lines of, when you think you are tired, take a nap, have a glass of wine and watch TV with your husband.

Well, first of all, one can simultaneously have a glass of wine and answer email, edit CSS or write a blog.  However, I have to say, this “one more thing” advice is something that I really do make a point to do every night unless I am just completely exhausted. It’s the intellectual equivalent of what I wrote about on my other blog, “How to lose 60 pounds with barely trying”  - no, it’s not a joke. I just pointed out that walking a few flights of stairs every day, walking to the store instead of driving, walking around the building while on the phone – all of that added up for 30 years is the difference between being 60 pounds overweight or not.

Similarly, an average of an extra 20 minutes a night adds up to over 2 1/2 work-weeks each year. Often, people ask me how I get so much done – well, my year has 54.5 weeks in it.

Julia and Mochi the dog asleep

Related to this are two other pieces of good advice I give myself – know when you are most effective and get enough sleep.

Notice the examples I gave above didn’t include to de-bug a program or work on design. One of the reasons I want to knock out a few things right before bed is so that the next day I have a longer uninterrupted block of time to focus on whatever is most important. I don’t know of anyone who is most effective when they are tired. I also cannot believe that there is anyone who isn’t negatively affected by being sleep-deprived. If I’m tired during the day, I lay down and take a nap.

I am SO not a morning person. I don’t do 8 a.m. meetings. It is miserable for me and unproductive for whoever I am supposed to meet because my brain is barely functioning. I wake up slowly, usually with a lot of moaning and a cup of coffee or two. This is my last good bit of advice I take from myself – make a conscious effort to learn every day. I usually have my iPad or a book under my bed and first thing in the morning after The Invisible Developer brings me a cup of coffee, I read a chapter or two. I’ve read Javascript: The Definitive Guide twice, Eloquent JavaScript and Javascript, the good parts all the same way – a chapter or so in the morning before I got out of bed.

That’s it – knock out a few non-essential but good to do things before turning in, learn something every day, get enough sleep, and give yourself a substantial block of time during whatever is the most productive part of the day for you to do whatever is most important.

These seem simple, obvious ways to be more effective, but the irony of it is that for me personally it would be impossible to implement this advice in a 9 to 5 job.

Seriously, this is something I have always wondered about with those people who believe they are somehow morally superior because they get out of bed at 5 a.m. , arrive at the office at 8 and work until 5 and that people like me are lazy.

I normally work around 8 – 12 hours a day , by which I mean actual work, not lunch hour, not on Facebook, not on the phone with my mom/ friend/ real estate agent. As a former industrial engineer, I know that 8-12 “standard hours” , that is absolutely on task , is a kick-ass performance.

So, why do some people believe that their performance is “better” because it occurred during specific hours? (Obviously, I’m not counting people who are sales clerks or something where they need to be available to the public at convenient hours. ) If I’m writing a program, what the hell difference does it make if I do it at 1 pm or 1 am ? Seriously, I’m asking this because I’ve wondered about the rationale of bosses over the years – not mine, thank God, but other people’s – who seem convinced that there is a difference.

Lately, I’ve been a terrible person. I have told many people, “No, I cannot help you.”

After six happily profitable years, we’re winding down The Julia Group consulting division. We are not taking any new contracts and not adding on to any existing contracts. As contracts expire, we are not replacing them with new business. In the next month or two this blog will get merged with the 7 Generation Games site.

I have agreed to present at one conference, the Tribal Disability Summit, in July, where I will be speaking on Start-up 101 : The Challenges and (Yes) Advantages of People with Disabilities. I have also said no to other offers to speak at conferences. I’m really bad at answering email requests.

Every time I tell someone no, I feel like I am a terrible person. After all, that’s why I went into consulting and why I started The Julia Group, so I could help people. We have always had rates far below the market average so that non-profits could afford the help they need and also so we could choose to work on the projects most rewarding to us overall and not just financially.

The truth is, I’m not really a terrible person. I decided to do a new start-up to make games that teach mathematics and I work every day on making those games better meet the needs of students and teachers.

The best advice on succeeding is to focus on whatever it is that you want most.

When I was competing in judo, every decision I made all day met a single criterion:

Will this help me win the world championships?

If the answer was, “Yes”, no matter what it was, I did it.

If the answer was, “It will make my chances of winning lower”,  I didn’t do it.

If the answer was, “It won’t make any difference”, then I did it if I felt like it or there were other reasons.

I’m applying those same lessons learned in winning a world judo championships to running a successful gaming company. Being best in the world is not a part-time gig.

As my big brother (who is, coincidentally, a math teacher) told me,

There are too many people in this world who cannot give up what they want now for what they want most.

I’m trying my best not to be one of those people.

 

 

 

 

This week I had one of those pain-in-the-ass problems. I had a test with 24 items but they were of mixed types. That is, for some the answer was multiple choice and for others it was numbers.

The data was received as an Excel file.

Now, I could have opened it with SAS Enterprise Guide and specified data types for each variable, but the problem is, I am going to get this particular data set over and over, so I want code I can write once and run every time.

As if that wasn’t bad enough, the variables all had names like:

which_choice_is_the_same_as_the_

I wanted to rename these all to something sane like q1, q2 etc.

The first step was an option I don’t think I’ve ever used before, oddly enough.

 

proc contents data= annoying  varnum ;

 

Normally, SAS gives you the variables in a data set in alphabetic order when you do a PROC CONTENTS. The varnum option lists the variables in the order they appear on the data set. This was immensely helpful because it spared me going through the data trying to figure which was the first question, which was the second, and so on.

I just copied the variables in order after a RENAME statement and tacked on an =q1, q2, etc. like so

Data better ;

set annoying ;

rename

which_choice_is_the_same_as_the_ = q1
what_is_five_time_six__ = q2

etc.

proc contents data= better ;

I could have combined this with the previous step , but the fact is that unless the data set is really gigantic, the time that needs to be preserved is not computer processing time but my time, and this way was quicker because I didn’t have to write out those ridiculous variable names and worry about the program failing because I used  _ in the name instead of __ .

SAS does have a function to detect variable type, but that wouldn’t really have helped me because I still need to write all of these variables into a single array of item1 – item24 for later use, and you cannot have mixed type arrays. So, I did this

 

data mo_better ;
set better ;
array qs{*} q2 – q6 q10 q12 q14 -q16 q19- q21 ;
array itemN {*} $12 item2 – item6 item10 item12 item14 – item16 item19 – item21 ;
array qsA {*} $12 q1 q7-q9 q11 q13 q17 q18 q22- q24 ;
array itemA {*} $12 item1 item7 – item9 item11 item13 item17 item18 item22- item24 ;
do i = 1 to dim(qs) ;
 itemN{i} = put(qs{i},12.) ;
end ;
do j = 1 to dim(qsa) ;
 itemA{j} = qsa{j} ;
end ;
drop i j q1 – q24 ;

I have 4 arrays. The first consists of the numeric variable type questions. I couldn’t use _numeric_ to create an array of all numeric variables because there were others in the data set that were NOT test questions but were numeric and I did not want them in my array. I had to actually list each variable individually or in a range like q14-q16.

The next array is the one I am going to recode the variables into as character variables. Notice that character arrays need a $ and a length. The next two arrays are the character variables and the variables I’m going to copy them into. I could have just renamed the character variables in a RENAME statement and then changed the length in an ATTRIB statement  but  it would have taken more typing.

The DIM function is the dimension of the array, so it is going to loop through from 1 to however many variables in the array because I didn’t feel like counting them.

The PUT function is going to put this numeric variable into a new character variable with the specified length. It changes the variable to character.

The next loop just puts all the character variables into other character variables with the names item1, item7, etc. Now I have variables that are all the same type and length, named item1 – item24 and I can do things with them like compare each student’s response to each variable to the answer key, score it right or wrong and sum up the scored items, like this (1ANSWER is the first username)

 

Data in.pre_scored ;
set mo_better ;
by username ;
Array scored {24} sc1 – sc24 ;
Array items {24} $12 item1- item24 ;
Array ans{24} $12 ans1 – ans24 ;
if _n_ = 1 then do i = 1 to 24 ;
ans{i} = items{i} ;
end ;
else do i = 1 to 24 ;
if ans{i} = items{i} then scored{i} = 1 ;
else scored{i} = 0 ;
end ;
Retain ans1 – ans24 ;
total = sum(of sc1-sc24) ;

Since this is part of a two-year grant and I am going to receive these same test data sets many times, I am now finished with reading in and scoring the data for the next two years. After this, I just need to import the excel file and click run. I am happy.

Also curious, because I noted that this year’s pre-test scores are 1.5 standard deviations higher than the previous year.  I suspect this is because we have many more fifth-graders in this sample. So … with the scoring done automatically, I can now go on to interesting stuff.

If you want to check out the game these results came from, you can read about it here

 

I read a blog post where the author said the women who dropped out of programming “should have been discouraged” because it’s not for everyone and many women try to use smiles and flattery to get men to do their work for them.

I actually have had the experience the author cites, but with both men and women. It’s true there are some people in the tech field who are very introverted or socially inept. They are willing to help you with your technical problems if you will just stop by and have a cup of coffee and chat with them.

I’m not that person. I have a husband and four daughters. Interestingly,The Invisible Developer, who is so introverted as to be never seen in public is also not that person. He has me and aforementioned four daughters. That is enough for him.

Clearly, people who want you to do their work for them are annoying, however, I haven’t found them to be limited to one gender at all.  Lately, I’ve been wondering whether they are like that in SOME  cases because they don’t believe they can learn to do it themselves. I don’t know the answer to that.

What I do know, though, is that over the years I have known many people to succeed in areas I would not have given them a chance. Two very fine physicians that I know didn’t attend the best high schools, have the grades as undergraduates and honestly,  I didn’t think they had a prayer of  getting into medical school, much less succeeding. Neither got accepted in medical school the first year that they tried. People I would not have given the chance of a prayer in hell of becoming elite athletes have often gone on to surprise me, including a couple who won Olympic medals.

Life discourages people enough. Don’t add to it!

That advice is particularly true for programming. The last couple of days have been discouraging. We had our next install almost ready and then I found some bugs in it. Then we thought it was done, and I found some more bugs in it.

Yes, he's a man and we work together to fix stuff

The Invisible Developer is upstairs fixing those and testing the latest version. I am downstairs fixing his code on the next game (so much for women wanting men to do their work for them, and he is definitely a man. I can point to fact of having collaborated in producing The Spoiled One as irrefutable proof of said manliness. Photograph attached.). Actually, he’s brilliant and totally capable of fixing it himself, but he was already working on the other game.

Everyone’s code, if it is the least bit complicated, is going to have bugs in it. Sometimes it can take you days to find them.

Some days we succeed in writing quizzes where students can drag and drop answers, video clips with sound and animation play in response to correct answers with dialogue in English and Dakota, and then the student is transported back to a 3-D virtual world to continuing playing.

Other days, nothing happens. Just nothing. There are no errors in our consoles, just a screen looking obstinately back at us refusing to do what it’s supposed to do.

Programming is discouraging some days on its own and the LAST thing you need those days is someone saying,

“Maybe you’re just not cut out for this. “

I was complaining about how today had just not been productive, that I wanted to have the latest fixes on Spirit Lake in the hands of the teachers today but it wasn’t saving the game state frequently enough. While The Invisible Developer worked on that I found that some of the quizzes in the next build of Fish Lake were telling the student the answer was wrong even when it was right.

The Spoiled One said,

“Don’t worry, Mom. You’ll figure it out. You have time. Life is long.”

You know what? She was right. We figured it all out today. People should be encouraged. I’m proud of that she has figured this out at not-quite-sixteen.

One of the many questions on start-up accelerator applications that make me go “Hmm”, is this question :

How many lines of code have you written?

I have heard of, but thankfully never worked at, organizations that evaluated their technical staff by the lines of code written.

Let me give you two stories that illustrate why this is a bad example.

fairy

Once upon a time ….

Many years ago, I worked at an organization that decided the programming staff was overpaid and generally had a bad attitude. (No, this wasn’t due solely to me. In fact, unbelievably, I was one of the easier to get along with people on the technical staff).  So … they hired some people at low salaries who had, I believe, a three-month training course in SAS. Most of the senior people avoided the cube farm where these new hires were housed, believing that it would be apparent soon enough that you get what you pay for.

I would generally come in around 10:30 or 11 and leave the office around 8 pm. I couldn’t help but notice several times that some of these new programmers were still there when I left. Leaving one evening, I saw one woman in tears in her cubicle, so I stopped and asked what was the matter. She said she had come into the office at 6 a.m. and was still waiting for her program to run. I sat down with her and looked at her program, which was a simple thing to create a few total and subtotal scores and get statistics on these by state. Her program looked like this:

 

LIBNAME  in “directory”;

Data Alabama ;
set in.us ;
If var1 = .  then var1 = 0 ;
If var2 = .  then var2 = 0 ;
If var3 = .  then var3 = 0 ;
Total = var1 + var 2 + var 3;
If state= “Alabama” ;

run;
Proc means data = alabama ;
var total ;
run;

REPEATED 50 TIMES (50 states + Washington, DC) for a total of 562 lines of code (there is only one Libname statement).

The reason it was taking so long is that she was reading in this dataset with millions of records 51 times. There are many ways this could be fixed. Since I was on my way home, I sat down and did this.

libname mydata “directory”  ;
data test ;
set mydata.us ;
total = sum(var1,var2,var3) ;
keep total state ;

Proc tabulate data= test ;
class state ;
var total ;
Table state ,(total*(n*f=comma12.0(mean std)*f=comma8.2) );
run ;

My program was 10 lines, read the dataset in once and produced a nicely formatted table.

So, was she 60 times more productive? I don’t think so.

Story number two happened in the last week. I have been working on improving our two games, Spirt Lake, and particularly Fish Lake. A major improvement has been merging multiple scripts into one.

Here is what we did with our prototype, since we had to meet a deadline:

  • Wrote a script to handle multiple choice tests.
  • Wrote another script to handle tests that had an integer or decimal answer.
  • Wrote a third script to handle tests that had a fraction as an answer, like 4/5 , to be sure it also accepted 8/10, etc.
  • Wrote a fourth script to handle tests where the answer was dragged and dropped.

etc.

Now obviously, de-bugging would be simpler if we have only one or two scripts. So, this week, I have been taking a couple of scripts and making them more generalizable and deleting many others.

Another thing I’ve done is create a CSS style sheet for each game and included that link in files instead of having the common classes defined in each page.

 

The number of code in the project has gone DOWN by hundreds of lines, but I think the ease of maintenance and documentation has gone UP.

Now, if you asked me how many lines of code I have written in my life, that might be a relevant question. (True story, I once worked on a job where I did repeated measures ANOVA so many times for so many projects, I got so bored, I started writing statements backward beginning with the semi-colon.)

Well, I better get to bed since it is well past midnight, I have seven teenagers sleeping over at my house and I have to get up in the morning and take them all to Disneyland for The Spoiled One’s birthday.

7 Generation Games Logo

BTW – You can buy Spirit Lake: The Game here 

Next Page →