Software Engineering from Scratch — Part 1: Introduction and Shopping List

Ori Cohen
2 min readDec 6, 2020

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.

--

--

Ori Cohen

An applicable math and computer science enthusiastic.