* [https://docs.google.com/document/d/1JHHRGrhe96rJXw6lIM-X3WJKoD14_8PwqjjP45UI0tg/ Intro to WPILib: Commands & Subsystems] * Software Engineering: * Design from the top down, build from the bottom up * Never put cleverness before clarity * when choosing between a clever algorithm and one that will do the job and is easier to understand, use the latter. * document your code thoroughly so someone else can read and understand it. Good code contains at least as many lines of ''good'' comments as of executable code...no matter how readable you think your code is. * clean up your code before you check it in. Don't leave gobs of test code and debug print statements in your code. When you make your code available to others, that should all be removed and the code should be clean and readable. * Understand [https://www.agile-code.com/blog/cohesion-vs-coupling-separate-concerns/ coupling vs. cohesion] deeply. These are the two most important concepts in software engineering, everything else is an attempt to increase cohesion and reduce coupling. Every block of code (class or function) should be a stand-alone black box with cleanly defined inputs and outputs. You should not need several files open to understand how one method works. * Read [https://www.joelonsoftware.com/ Joel on Software] * Tool wars are for noobs * Appreciate [https://stackoverflow.com/questions/84556/whats-your-favorite-programmer-cartoon programmer humor]