I’m on Team 1126, where I am the Software team lead. As part of a new project, we’re holding small sessions over the Summer to experiment with new code methods. In addition, we’re inviting potential new students to attend these sessions to familiarize themselves with our level of programming.
And here’s the problem:
Our method of training leaves much to be desired. Right now, all we do it basically walk the new students through the code, and explain what each section does. Fine, in theory, but we’re looking for a more… interactive approach.
So, I’m asking if anyone has any suggestions on ways to train new students. Each of the new students knows the basics of JAVA syntax, so we’re not looking for a way for them to learn JAVA, but for a way for them to get used to the level of coding we use for the robot.
(Also, if there is another sections of the Forums for this topic that I missed, could you please be so kind as to direct me to it? Thank you.)
we’re holding small sessions over the Summer to experiment with new code methods
could you please elaborate a bit on what you mean by the phrase “new code methods”?
Each of the new students knows the basics of JAVA syntax, so we’re not looking for a way for them to learn JAVA, but for a way for them to get used to the level of coding we use for the robot.
could you please explain what you mean by “level of coding”. do you mean coding style? or something deeper?
I think you’ll better-targeted answers if you clarify a bit.
Whenever possible I’ve found letting students learn trying is the best option.
What I’ve tried in the past is to assign each student a logical subsection of code (arm control, drive control, driver feedback, etc.), remove that piece from the existing code, and let them try to recreate a functional version of it.
Here are a few rules I’ve used for this method:
Do not show them your final code.
Answer any questions they have, but don’t show them how to write it.
Start simple. Don’t use sensors/feedback if possible, reduce the requirements to the minimal needed to get the robot to do anything.
During this process suggest they follow any code conventions/source control processes you use.
Once their code does anything increase they reqirements adding sensors/feedback, more advanced input/motor mappings, etc.
An alternative to this is to give them the final code, and ask them to add some functionallity. However I find that the additional functionallity usually wasn’t implemented for a good reason, often difficulty.
You can also do this is pairs/groups, but that usually leads to only one person learning/doing anything unless they have coded together before.
When I say new code methods, I mean different ways to write out code to make it more effective. Currently, we are experiments with PID loops, but we’re gonna hold off on letting the new kids experiment with new stuff until A) They’re more familiar with the rest of the code and B) We (the returning students & mentors) are more familiar with it, so we can help them understand it better.
Also, by level of coding, I mean the general difficulty of writing the code. The schools our team is made up of offers a Java course, which both of the new students have taken, but the class teaches nothing like coding to operate motors or sensors or anything like that. So, what we’re trying to do is introduce them to this new level of coding so they have an idea of how to write the robot code WITH the motor control and sensors.
When I say new code methods, I mean different ways to write out code to make it more effective. Currently, we are experiments with PID loops…
Also, by level of coding, I mean the general difficulty of writing the code. The schools our team is made up of offers a Java course, which both of the new students have taken, but the class teaches nothing like coding to operate motors or sensors or anything like that. So, what we’re trying to do is introduce them to this new level of coding so they have an idea of how to write the robot code WITH the motor control and sensors.
It sounds like the problem is not coding but rather control theory. It sounds like what these students you are attempting to train to “code at a new level” with “new methods” actually need is an introduction to control theory to give a foundation to build on.
There are lots of online resources available. If the students are motivated self-learners, they may be able to pick up enough by going through some online tutorials or overviews… but it might be faster and less frustrating if there’s a mentor who could teach it in a more easily digestable form, with more practical advice and less theory.
well im not sure if this will help but, the incoming students have a basic understanding of Java and coding in general. they have some experience with the use of methods, but almost none with creating methods and reading documentation. and none of them have any experience with programing without a clear and defined goal. this is just adding on to my teammates analysis.
I suggest that you assign the programmers a challenge involving a simple action done by the robot. One example is to make an omni bot drive around in a circle autonomously, but there is a catch: do it while it faces the same side where the side with 2 wheels is the front. It was what my mentor challenged me to do at the beginning, I did not accomplish it. I got very close, but the robot slips, so I can not get a good circle. Since I have been programming for the computer for years, I had a rough start. Since it actually takes time for the actuators to actually do their thing, for loops weren’t a good idea when controlling actuators since it when through the loop every cycle. That being said, I went basic to the basic on last year’s robot. I have not even made a class, it was just straight up C style coding, which I personally do not like. Object oriented is the way to go for my autonomous project. Well I digress, give the programmers little blocks of time to actually run the code on the robot, while the others code their own solutions. Award the first one to finish correctly and find if any one did it more efficiently.
One thought could be showing the new students the code from last year; what each program looked like and how said level of programming works.
Afterwards, give them a task relating to that level of programming (have them write a program for a standard tank-drive chassis, etc.), check up on each of the students and correct them on what they are doing and how they can make their program better.
Before the meeting is over, gather all of the students and review the code for the program.
Its so the students get hands-on work of intermediate/advanced programming, and they will learn the thought process in the end. Hope this helps!