Engineering Standards

During its 30 years of existence, CSDL has worked with many programming languages (Lisp, C++, Python, Rust, Javascript, Typescript, etc), operating systems (Solaris, Windows/NT, Linux, MacOS), hardware platforms (Unix workstations, Windows/NT workstations, Solaris servers, MacOS laptops), and too many libraries and quality assurance tools to list.

One thing that is clear to me from this experience: the velocity of research benefits greatly from engineering standards, in other words, standardized development tools, languages, and procedures. While students often have personal preferences, and sometimes feel like they would be more productive personally with a given tool or process, I find that having everyone use a common set of engineering standards results in greater overall progress for the following reasons:

  • The learning curve is "flattened". When a tool or technique is used by just a single person, then any problems or questions have to be addressed by that single person. When the entire group is using a single tool or technique, then problems or questions are addressed by the group, and this is generally results in a much faster resolution.
  • Computational communication is simplified. When everyone is using common tools and techniques, then it is easier to communicate what you are doing to others.
  • One achieves fluency faster. The final goal for any tool or technique is for it to fade into the background. You no longer think about it much, you focus all your attention on the actual computational problem. This is "fluency" with the technology. When everyone in the group is using the same tools or techniques, it is easier to obtain fluency because you are able to see how others are using it, and learn more advanced usages from them.

With that in mind, here is an initial set of engineering standards for the RadGrad project.

Communication. Slack and Zoom. If there is the chance of a question or answer being relevant to more than one person, then please post it to Slack so that everyone can benefit.

IDE. IntelliJ IDEA. For the technologies to be developed in this project, IntelliJ IDEA is as good as any other, and better than most. Please do not "cheat" and use your personal preference, thinking that "no one is going to know". Actually, eventually you'll be needing to code in Zoom with someone else, and then it will become obvious. If you're having problems with IntelliJ, post a question and let's see if we can help you.

Language. Javascript preferred, or Typescript.

ESLint. All code should pass ESLint.