Skip to content

Commit 32a2716

Browse files
committed
Massive OverHaul
1 parent 7cd87ed commit 32a2716

File tree

115 files changed

+195
-6107
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

115 files changed

+195
-6107
lines changed

.prettierrc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"tabWidth": 2,
3+
"useTabs": false
4+
}

Assests/SoftwareLogo.png

21.3 KB
Loading

Assests/github.png

2.79 KB
Loading

Assests/image.png

27.1 KB
Loading

Assests/mac.jpeg

-1.62 KB
Binary file not shown.

Assests/mac.png

91.5 KB
Loading

Assests/revit.jpeg

6.4 KB
Loading

admin/goals/index.html

Lines changed: 0 additions & 130 deletions
Original file line numberDiff line numberDiff line change
@@ -48,136 +48,6 @@
4848
</ul>
4949
</div>
5050
<div class="body">
51-
<h1>Goals</h1>
52-
<button type="button" class="collapsible">
53-
<p>The following is a list of goals the software team tries to meet each
54-
year. They inform decisions regarding our curriculum design and operating
55-
procedures.</p>
56-
</button>
57-
<div class="content">
58-
<ul>
59-
<li>Produce an effective product</li>
60-
<li>Employ industry best practices</li>
61-
<li>Expand our knowledge and capabilities</li>
62-
<li>Involve less experienced team members</li>
63-
<li>Create an autonomous software team / encourage learning</li>
64-
</ul>
65-
</div>
66-
<div class="Info">
67-
<h2 id="Curriculum_design_guidelines">Curriculum design guidelines</h2>
68-
<ol>
69-
<l>
70-
<button type="button" class="collapsible">
71-
<b>Teach incoming members enough C++ to be useful</b>
72-
</button>
73-
<div class="content">
74-
<p>Integrate modern C++ development paradigms, tools, and practices.
75-
The C++ language has improved a lot since 2003; we don't need to
76-
program in the dark ages anymore.</p>
77-
</div>
78-
<button type="button" class="collapsible">
79-
<b>Teach a set of skills motivated by industry best practices</b>
80-
</button>
81-
<div class="content">
82-
<p>By industry best practices, we don't mean extremely conservative,
83-
waterfall model practices. We're more focused on breaking down and
84-
solving problems using industry standard tools. We emphasize
85-
reliability, but reliability and innovation aren't mutually
86-
exclusive.</p>
87-
<p>Software shall meet embedded and <a href=
88-
"https://en.wikipedia.org/wiki/Real-time_computing">real-time</a>
89-
requirements.</p>
90-
</div>
91-
<button type="button" class="collapsible">
92-
<b>Prepare students for Computer Science at university</b>
93-
</button>
94-
<div class="content">
95-
<p>The focus should be on "Design before build". That is, developing a
96-
specification for behavior before implementing it. Teach common
97-
development practices like Git and code review.</p>
98-
</div>
99-
<button type="button" class="collapsible">
100-
<b>Teach an introduction to control theory for those interested</b>
101-
</button>
102-
<div class="content">
103-
<p>This is also needed for a reliable / maximally efficient robot and
104-
includes state machines, motion profiles, filters, and
105-
feedback/feedforward controllers.</p>
106-
</div>
107-
</ol>
108-
</div>
109-
<h2 id="Lab_design_guidelines">Lab design guidelines</h2>
110-
<ol>
111-
<li>
112-
<b>Provide implementations for things unrelated to the lab's learning
113-
outcomes</b>
114-
<p>The student shouldn't get bogged down in setting up infrastructure
115-
for their solution if the lab is intended to teach something specific.
116-
For example, the state machine lab <a href=
117-
"../../ci/state-machines/state-machine/">here</a> provides a template
118-
with all the subsystems necessary to implement a robot's state machine.
119-
The comments tell the student where to insert their state machine
120-
logic, as practicing writing state machine logic is the purpose of the
121-
lab.</p>
122-
</li>
123-
<li>
124-
<b>Assuming a few prerequisites is acceptable to enable showcasing a
125-
topic's utility</b>
126-
<p>By showcasing advanced topics in an approachable, introductory way,
127-
students can appreciate the breadth of knowledge they can and will
128-
learn. If prerequisites are skipped, the lab should provide requisite
129-
knowledge as it is needed to understand or implement dependent
130-
concepts.</p>
131-
</li>
132-
<li>
133-
<b>Labs should encourage students to develop practical methods for
134-
solving problems</b>
135-
<p>Labs exist to provide hands-on experience with a topic. They should
136-
supplement the theoretical material covered in lecture to foster
137-
practical or intuitive understanding. After finishing a module and its
138-
labs, students should be capable of applying topics initially
139-
introduced in lecture.</p>
140-
</li>
141-
<li>
142-
<b>Use graphical tools to gain insight</b>
143-
<p>Basically, a picture or movie is worth a thousand words. The
144-
following are good examples of visualization tools.</p>
145-
<ul>
146-
<li>
147-
<b>Common wisdom imparted through lectures should be motivated in labs
148-
with data</b>
149-
<p>For example, it is understood that mutexes are preferred over
150-
lock-free data structures unless there are scalability requirements for
151-
distributed, concurrent accesses. A lab requiring the implementation of
152-
an atomic data structure may motivate the exercise by making a mutex
153-
implementation first, then benchmarking both. (This would be a good
154-
opportunity to show the utility of and best practices for benchmarking
155-
software, by the way.)</p>
156-
</li>
157-
<li>
158-
<b>Use industry standard tools to handle auxiliary tasks</b>
159-
<p>Students should be able to leverage existing tools to make their
160-
jobs as software developers easier. Labs are encouraged to use tooling
161-
if it doesn't automate what the student is intended to learn through
162-
practice.</p>
163-
<p>In the previous example, Clang's thread sanitizer tool may be used
164-
to verify correctness of the data structures' synchronization.</p>
165-
</li>
166-
</ol>
167-
<div class="Info">
168-
<h3 id="Veterans">Veterans</h3>
169-
<p>Us mentors assume you already know how to write software. Software
170-
engineering is what we really want to teach you. If you can explain this
171-
year's robot code and why you designed it <i>that</i> way versus the other
172-
possible designs, you have succeeded and have likely earned a <a href=
173-
"../varsity/">varsity letter</a>. It shows you contributed in the design
174-
phase and know the trade-offs (engineering is essentially the process of
175-
choosing the least bad design based on some criteria and justifying that
176-
choice). Our role as mentors is to show you what tools are available in the
177-
C++ language so you can make an informed design decision.</p>
178-
</div>
179-
180-
18151
</div>
18252
<script src="../../Collapse.js"></script>
18353
</body>

admin/index.html

Lines changed: 0 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -48,97 +48,6 @@
4848
</ul>
4949
</div>
5050
<div class="body">
51-
<h1 id="Administration">Administration</h1>
52-
<div class="Info">
53-
<h2 id="Student_organizational_structure">Student organizational
54-
structure</h2>
55-
<p>Since 3512 was founded, the software team has enjoyed a certain level of
56-
autonomy. With that, we've been free to establish our own internal
57-
leadership structure. Rather than a typical top-down leadership structure,
58-
we operate more like a "software committee". Everyone is equal and
59-
contributes to the code base on their own volition with mentors performing
60-
quality control. There is a software lead who handles meetings and shields
61-
the members from administrative stuff, but the title doesn't imply any
62-
superiority or power over the other members.</p>
63-
<p>This works best when everyone is equal in skill level, so the mentors
64-
work hard to promote learning among rookies to raise their level of
65-
competency to that of their peers. We encourage collaboration with the
66-
other students to aid in this process.</p>
6751
</div>
68-
<div class="Info">
69-
<h2 id="Role_of_the_mentor">Role of the mentor</h2>
70-
<p>Pursuant to the goals listed <a href="goals/">here</a>, the mentors
71-
teach rookies the basics of writing software and enough of the tools to
72-
make them productive contributors. The veterans already know how to write
73-
software, so the mentors can focus on actually teaching them software
74-
engineering. Ideally, the students contribute during the design process and
75-
are able to justify their design decisions.</p>
76-
<p>The students learn the subject matter most efficiently with mentor
77-
guidance, so the mentors are fundamentally in a partnership with the
78-
students. While the students should do the work, the mentors should use
79-
their experience to inform the students of available tools and potential
80-
pitfalls so an informed design decision is made. In this sense, the mentors
81-
are primarily in an advisory role.</p>
82-
<p>Furthermore, mentors should always provide an unbiased analysis.
83-
Transparency helps build trust, and specific solutions always have
84-
drawbacks. The mentor should be honest about them so the students develop a
85-
level-headed view of the world.</p>
86-
<p>However, the mentors also possess the long-term vision for the team and
87-
should push the boundaries of the team's accomplishments each year to
88-
achieve it. To do this, the mentors may implement tricky bits of framework
89-
code, but the students should still understand what has been written and
90-
should be walked through it step-by-step if necessary. Remember that FIRST
91-
is a mentor-based program, but it is for the <i>students</i>; giving them a
92-
sense of accomplishment and ownership keeps them engaged and returning each
93-
year.</p>
94-
</div>
95-
<div class="Info">
96-
<h2 id="Learning_versus_reuse">Learning versus reuse</h2>
97-
<p>I like to take the "add tools to the toolbox" approach with my software
98-
team. We try some random alternative to improve on previous architecture,
99-
and a student or two takes that on as an R&amp;D project. They usually
100-
stabilize and end up on the robot by the time competition occurs. We've
101-
done probably four different approaches to state machines at this point,
102-
and our controls solutions have evolved a lot. Prefer evolution over
103-
revolution.</p>
104-
</div>
105-
<div class="Info">
106-
<h2 id="Why_I_mentor">Why I mentor</h2>
107-
<h3 id="Tyler_Veness">Tyler Veness</h3>
108-
<p>My time as a student in FRC was basically one giant R&amp;D experience
109-
for me. By always being on the cutting edge of 3512, I learned a <i>lot</i>
110-
along the way (successes and failures included). This exercise in
111-
independent learning made a big impact on my future, and I want to give
112-
students here the same opportunity.</p>
113-
<p>Even in college, hands-on engineering projects like FRC are rare. I was
114-
on an FSAE team at UCSC. We didn't receive any support from the engineering
115-
department (and not for lack of trying) because they are more focused on
116-
research. Students should make the most of their FRC experience while they
117-
can.</p>
118-
<p>I tell college students this often: "Don't let schooling interfere with
119-
your education.". Seek out projects that you're interested in and learn
120-
everything you can. It opens a lot of avenues for you later.</p>
121-
</div>
122-
<div class="Contain_links">
123-
<div class="Direct_links_1">
124-
<h2 id="Goals"><a href="goals/">Goals</a></h2>
125-
<p>Contains our goals, curriculum design guidelines, and learning
126-
outcomes.</p>
127-
</div>
128-
<div class="Direct_links_1">
129-
<h2 id="Varsity"><a href="varsity/">Varsity</a></h2>
130-
<p>Contains our varsity letter requirements.</p>
131-
</div>
132-
<div class="Direct_links_1">
133-
<h2 id="Software_for_non-software_members"><a href=
134-
"software-for-non-software-team-members/">Software for non-software members</a></h2>
135-
<p>What non-software team members should know about the software team.</p>
136-
</div>
137-
<div class="Direct_links_2">
138-
<h2 id="Style_guide"><a href="styleguide/">Style guide</a></h2>
139-
<p>Contains the software team style guide.</p>
140-
</div>
141-
</div>
142-
</div>
14352
</body>
14453
</html>

admin/software-for-non-software-team-members/index.html

Lines changed: 0 additions & 111 deletions
Original file line numberDiff line numberDiff line change
@@ -48,117 +48,6 @@
4848
</ul>
4949
</div>
5050
<div class="body">
51-
<h1>Software for non-software team members</h1>
52-
<blockquote>
53-
<i>This is an email Tyler sent in response to a verbal request for
54-
feedback on formal varsity letter requirements. It is being preserved
55-
here for posterity.</i>
56-
</blockquote>
57-
<p>Hi Grace,</p>
58-
<p>Since you mentioned on Tuesday that the team was putting together more
59-
formal varsity letter requirements, you may be interested in the
60-
requirements the software team has been using for the last 2+ years. They
61-
are linked on <a href="../">https://frc3512.github.io/admin/</a>. This
62-
email was originally intended just to mention that, but the fact that
63-
varsity letter requirements are even an issue implies there are more
64-
systemic issues. The rest of this email elaborates on what I mean and how I
65-
feel these issues should be addressed.</p>
66-
<h2 id="Varsity_letter_requirements">Varsity letter requirements</h2>
67-
<p>I'm hoping the software team's varsity letter requirements can be
68-
incorporated into the team-wide requirements in some way. Having every
69-
subteam document what constitutes a varsity letter in terms of specific
70-
hard and soft skills as the software team has done would not only give new
71-
students an idea of what to expect as a member of each subteam, but would
72-
also help leadership develop an appreciation for the work each subteam
73-
does. This would address frequent complaints of varsity letter
74-
recommendations being overruled, only to have them reversed when the
75-
subteam in question challenges it.</p>
76-
<h2 id="Basic_knowledge">Basic knowledge</h2>
77-
<p>As an example of what I mean by appreciation of each subteam's work, the
78-
leadership (at minimum) should be able to understand at a basic level what
79-
each subteam mentions at opening and closing meetings. At least with
80-
software, this requirement hasn't been met. When we mention our problems
81-
and plans for addressing them, one of two things happens: 1) we explain
82-
things in sufficient detail and everyone just nods, and says "oh, more big
83-
words from the software people"; 2) we explain things with hopelessly vague
84-
descriptions because we have to strip out all our descriptive terminology,
85-
then we get yelled at for being too vague. I find both of these responses
86-
disrespectful because the majority of the things we mention are basic
87-
software concepts that all our rookies learn within their first year. I'm
88-
not saying everyone needs to be an expert on every subteam, but they should
89-
at least know the basics of what each subteam is capable of and how they
90-
work. I want to avoid subteams ignoring each other's needs as well as
91-
subteams attempting to compensate for this with well-meaning gestures but
92-
useless gestures that are a result of their ignorance. The mechanical team
93-
generally knows you need a router and CAN wires going from the roboRIO to
94-
the power distribution panel and that motors require electricity across
95-
their leads to run. Why can't the same high-level basic understanding be
96-
afforded to software or business? An analog for this exists in the
97-
corporate world, by the way: technical managers. They know how to manage a
98-
team, but aren't clueless about the tasks they hand out to their
99-
subordinates. This means they know how much work something will
100-
realistically take, be able to determine if a subordinate is slacking off,
101-
and be able to plan more effectively for the future.</p>
102-
<h2 id="What_leadership_should_know_about_the_software_team">What
103-
leadership should know about the software team</h2>
104-
<p>On the software team, we've seen that if all our members know what needs
105-
to be done, the role of a lead becomes redundant because they can
106-
coordinate tasks amongst themselves. Being able to function without direct
107-
oversight from a lead and work toward a common vision has made us really
108-
effective over the years. However, a prerequisite to this is visibility
109-
into how the subteam works at all. Pursuant to this, I would expect
110-
non-software leadership to know the following about the software team:</p>
111-
<ol>
112-
<li>We have standard operating procedures and our own set of goals. They
113-
are detailed in <a href=
114-
"../goals/">https://frc3512.github.io/admin/goals/</a>.
115-
</li>
116-
<li>Software is not magic that makes the robot move. Robots follow simple
117-
instructions and basic logic, and you can write them yourself in English
118-
(If this condition is true, then do that thing. Drive for 5 meters, then
119-
turn right, etc.).</li>
120-
<li>There are important factors involved in making a mechanism
121-
controllable by software. See <a href=
122-
"https://www.youtube.com/watch?v=VNfFn-gcfFI&amp;list=PLk1Mm-3aieXWa0eyDP1_MahuzqhVsDQXd&amp;index=1">
123-
971's video on it</a>.
124-
</li>
125-
<li>Sensors are not magic, and the average electrical student should
126-
understand what kinds of sensors there are and what kinds of robot motion
127-
they can measure.</li>
128-
<li>We use version control. Each robot's code is stored in a
129-
"repository". We work on features separately in what's called a "branch",
130-
which are eventually merged into the "main" branch that always contains
131-
working code. We do this at competition too.</li>
132-
<li>We do code review for quality assurance. The site we use is
133-
<a href="https://github.com/frc3512">https://github.com/frc3512</a>,
134-
which lets us leave comments on code and push fixes to feature branches
135-
based on that review. We always push what we've worked on to that
136-
server at the end of each day, so no one programmer is required to be
137-
at a build session on any given day to continue another's work.
138-
</li>
139-
<li>If anyone wants to see the robot code's progress, they can do so by
140-
viewing the relevant repository at <a href="https://github.com/frc3512">
141-
https://github.com/frc3512</a>.
142-
</li>
143-
<li>All our curriculum is online: <a href=
144-
"../../ci/">https://frc3512.github.io/ci/</a>. Everything the software
145-
team learns on a yearly basis is documented there somewhere. This is how
146-
we've managed to do consistently well with just one local mentor and one
147-
mentor that's typically hours away. The rest of the team should consider
148-
documenting what they know somewhere so that knowledge isn't lost every
149-
time a student graduates.
150-
</li>
151-
<li>The software team is not an IT department. When the Driver Station
152-
stops connecting to the robot, we're just as clueless as you are. We
153-
usually just press power buttons at random and reboot things until it
154-
works. In fact, your average "IT expert" is basically just following the
155-
steps in this webcomic: <a href=
156-
"https://xkcd.com/627/">https://xkcd.com/627/</a>. As one of these
157-
supposed "IT experts", I can confirm this is exactly what we do.
158-
</li>
159-
</ol>
160-
<p>Hopefully this long-winded email helps explain some things.</p>
161-
<p>- Tyler</p>
16251
</div>
16352
</body>
16453
</html>

0 commit comments

Comments
 (0)