Software Engineering from Scratch — Part 1: Introduction and Shopping List
In the recent days a new person has joined my R&D team. This person, call him Bob, has never been in any position where has developed software, but instead has focused on research on an academic level. Being a team that both researches and develops prototypes, it is necessary to give him a quick instruction in software engineering, including best practices, technologies we use and our team’s development habits.
In a world where more and more academics are entering the industry, especially in machine learning R&D positions, there is a greater and greater need to teach those who do the research how to also bring their ideas into fruition by developing software correctly.
I hope that the journey I describe will help others who find themselves in similar positions. I aim for this series of posts to contain various exercises and tasks I found useful to teach, alongside links to lectures and readings I gave Bob to watch and read, in an attempt to create a tool anyone in a similar position can use.
Bob came to us as a promising individual. A young man with a master’s degree in machine learning, he looked to be a great boost to the team. Unfortunately, academics can’t write code. I have made this sentiment to my team several times in the past, and so I have been put in charge of teaching Bob how to write good code. Entirely. From. Scratch.
I set to planning how to teach him software engineering, something it usually takes years to properly learn. Our team is pretty diverse in it’s technological uses. Language-wise, we use SQL and Python for data analysis and initial prototypes, alongside more production-oriented languages such as C#. Our technical arsenal also makes use of various products, we have an Oracle Database, use Elasticsearch, Redis, Kafka and RabbitMQ. Being an R&D team, we use the best technology for the task, and that leads to having a lot of things that need to be covered when teaching a new team member.
All in all, here is a summarized list of technologies to teach:
Concepts and Basics:
- SOLID principles & code design
- Git
- CRs & team reviews
Languages:
- Python
- C#
- SQL (yes, i consider it a language, more on that later)
Storage:
- Oracle (Relational DBs in general)
- Elasticseach
- Redis
Messaging:
- RabbitMQ
- Kafka
This is a daunting task, one which I need to perform well in order to have a team member who can contribute to the team at the level we want him to.
Let’s get to it.