Open Invitation to help design a programming game for FRC

With recent speculation about the state of programming in FRC, it is hard to argue that it is in a good state. FRC has largely failed to To raise awareness of this field of engineering, and does not do it justice to demonstrate what computer science really is.

In an attempt to inspire future computer scientists, I am proposing a programming game of sorts. The basis of this game is to demonstrate to its participants what computer science really is by solving a task, or tasks.

The game has not been decided yet, and there is still much work to be done. We are short on man power, and could use all the help we can get with the task. Anyone is welcome to help; no programming knowledge or experience is required.

PM me or email me if you are interested in helping: hunter.park11235@gmail.com

The programming in FRC is extremely underappreciated because you can often get away with very simple code. However, good code is one of the things that separates the good from the best, so it deserves a lot more recognition than it gets.

Want to write code for my quad quidditch robot? :smiley: In all seriousness, it’s a challenge based on a hypothetical game, given a hypothetical robot with hypothetical design constraints. It seems to fit exactly what you’re talking about. Perhaps when people begin to reveal their designs, you might be able to use it for this programming challenge.

FRC programming ultimately fails to demonstrate what computer science really is. With very little algorithm design and no requirement for efficiency, it is not the game that we are looking for unless you make the game into a simulation with scoring to allow for people to write AIs to play it.

To put things into perspective, here is the game I designed but ultimately decided it wasn’t the game we were going to go with:

There are two seeds that are siblings in the ground, Mark and Jessica. They want to be reunited, but cannot see or talk to one another. They can grow their roots in an attempt to find each other, as well as resources. First, they must be reunited by touching roots, and then they can begin gathering resources in the ground to be as healthy and big as possible. It is a 3d map and there are boulders in the ground that cannot be moved and cannot be moved through.

Task: Design and write an algorithm that each tree will use to find each other as well as find resources.

Scoring would be based off of speed (efficiency) of the algorithm, as well as organization and structure of code. Bonus points would be provided if you provide the big-O of your algorithm as well as prove mathematically that as the iterations approach infinity, the probability of convergence approaches 1.

Then do it for more than 2 trees, say 5, and more dimensions than 3, say 100

I completely agree! people have no idea the work that goes into getting the data from a joystick to the roborio. and the roborio is quick enough you could write absolute crap, and it would be fast enough! make them program something useful on a ti-83 calculator. thats when efficiency matters! You could have a program challenge where they have to make a program to calculate digits of pi, and the fastest one wins.

Faust - I love that you are stirring the computer science and software pot here in the CD forums. That’s definitely a good thing.

But, you lose me (and maybe a large fraction of the readers you hope to motivate) when you make extraordinary claims like this one.

Be willing to cast your net a little more broadly, and I think you find that FRC topics like hard-deadline real-time scheduling, automated testing, distributed processing, high-availability, communication protocols, executable specifications, and … are allowed into the computer science tent by most definitions.

Maybe you can come up with a game/challenge that includes some of those aspects of CS, along with the ones you already emphasized? I’ll bet the audience here in the CD site would be more excited by a challenge that manages to include something from several of the domains we have collectively mentioned.

Blake

I completely disagree.

If software does and is, what it is required to do and be, it’s a defect-free success.

PS: See the XKCD cartoon at the URL in EricH’s post.

To what degree of accuracy? 10? 100? 10000000? Something about nobody finishing that one yet…

Just to give something that’s actually helpful:

First, what is the broad objective? Teach good programming practice, right? (Clean code, good algorithms, etc.–all the usual “good programming” goals.) I remind you of this.

Second, what is the device that will run the program? Laptop (and which OS)? RIO (c or Robo)? That’s going to affect some of the structure, you know.

Personally, I’d use a particularly nasty heat transfer over time problem… Wait. Got one. PM inbound.

Software is generally considered a failure if it fails to adapt to allow for an unforeseen, but plausible, use for the user.

For the most teams, their code cannot adapt. Their autonomous routine cannot adapt. The code fails to generalize across seasons.

Why not just address this issue, then? I don’t feel that the problem is FIRST giving the wrong programming challenge, more like teams are not addressing that challenge correctly. Like you said, most teams’ code fails to generalize across seasons. Therefore, if we as a community emphasized this idea to teams, we would see better results rather than throwing a completely irrelevant “challenge” at them. I know my team does not try to write generalized code, rather we practically start from scratch each year.

You just outlined the problems that teams need to overcome with the Computer Science challenge from FIRST; now we need to put more emphasis on the teams to address these issues.

See previous posts in this thread. In general, you are supposed to start from scratch, unless you are legitimately attempting to publish something other teams will find useful.

That said, attempting to build a modest level of flexibility/generality into your code will probably (but not necessarily) help your team satisfy the requirements they impose on their producton processes and on the robots they produce; and writing some advice/examples along those lines into your team’s training materials for future programmers, is probably a good idea.

In addition to this, teams could volunteer to help develop software for non-profits. Maybe attend hackatons? I see a lot of unused software+outreach opportunities.

By whom?

If you are the proverbial customer, you defined what the software must do and be. If adapting to unspecified conditions wasn’t in your specification, the software isn’t a failure.

If you aren’t my customer, your opinion is interesting, but not particularly relevant or motivating, until it can be linked to something I or my customer require.

My guess is that a game or challenge that (mostly) matches what FRC is, instead of what someone says FRC should be, will have greater success.

On the other hand, anything that is both fun and easy to participate in stands a good chance of succeeding.

If we want people to make adaptable code, we have to create a challenge that requires adaptability. If we want code to be generalized, we must design a challenge where modularity is a bigger advantage than the cost of the time taken to code it. FRC games are neither of these things. Doing these things definitely makes good code, but they aren’t required for FRC. We can’t compare the code we want submitted to what we think “should” be written for FRC. We have to make people do these things by showing the advantages of doing them, not berating people who don’t.

That was the most fantastic piece of writing I have read all week.

Teams are building a robot to play the competition. Teams don’t have many unforeseen circumstances, hence they don’t plan for them.

Now, if the autonomous mode allowed, or even REQUIRED teams to intersect, like in the recent VRC challenge, you would see a lot of interesting code pop up as well as use of sensors like this one (a darn shame it’s not a vex legal or cheap)

In the meantime, I’ve found robocode to be an amazing exercise in autonomous programming. Maybe it wouldn’t be too hard to set up a competition surrounding it, and livestream official battles between submissions?

Heck. I’ll do that. Who’s with me? I have 4mbps up so I should be fine streaming 720p on twitch.

This is a great idea. Set up a server than organizes and runs games with the code submissions and have a real time leaderboard then at the end have a tournament of everyone’s latest code.

For students that want an added programming challenge, I recommend checking out https://projecteuler.net. Tons of problems, many of which explore interesting solutions - you may be able to quickly come up with a solution that solves a problem, but that program then takes hours to run. A little more thinking and focus will get you a program that can solve the same problem in under a minute. The problems are designed to make you think about efficiency, and good programming practices make solving them easier - many problems deal with similar topics, so creating utility classes to hold common algorithms will help a lot. I’ve challenged my students in the past to tackle some of them!

The best part? Language doesn’t matter, the hardware your running it on doesn’t matter. Once you solve it, you get access to a forum thread about the problem, allowing you to see other solutions in a dozen different languages!. It’s a great learning tool, in my opinion.

I have been interested in trying RoboCode in the past. If I can find the time (30%? chance) I would want to give it a try.

I was/am little hesitant because I would think that optimal strategies already exist for any default configuration of the playing field; but maybe not; and/or maybe the playing field is easily customized enough to keep the competition(s) interesting.

One of my dreams when we were developing the 5th Gear FRC simulations was exposing an API that would let users compete in fully autonomous matches (neural nets could be trained, heuristics could be developed, etc.); but there are only so many hours in the day, and we were never able to get that far with any of the the 5th Gear simulations (close, but nothing was ever really deployable).

Finally, the MIT BattleCode tools should get a look. At one time I tried to contact someone to learn more about them, but never got a reply. Someone should try again (or maybe Woodie still has some pull back on campus? ;)).

I was actually thinking of something a bit more fun, have actual live battles (best out of 10?) akin to what MIT does for battle code. Maybe add some inaccurate commentary on the various strategies. Not quite as good at telling which program is the “best” but at least a tad interesting.