A journey through programming languages in Industrial Engineering

Great deal of industrial engineering involves the optimization of processes. For that purpose, IE’s will be exposed to several computer tools for statistics, operations research, 3D modeling, and simulation. Depending on your area of specialization, those tools could be enough; however, there are several scenarios where strengthening your programming skills will pay-off.  For example,

  • Real world problems, most often require adapting or extending the capabilities of existing software. This is very common in simulation projects, where you will have to add extra code yourself on top of the general components that tools provide.
  • Automation of report generations or repetitive processing of information. Sure, your staff manually use spreadsheets, but are not you suppose to look for cuts on those labor costs anyways?
  • Some famous computer tools are very expensive and sometimes you do not require their full capability, then you will be better off developing a simple tool based on open-source ready to use code.
  • Combine functionalities of several tools. Sometimes, your problem requires some data analysis, before passing parameter to an optimization solver. You could manually use a separate software for each tool, but with a little programming under the hood, you can automate the whole process.
  • User interface. You need users within your company with no technical background on a specific computer tools to use to; then, wrapping up your code on an interface will do the trick.

There are many programming languages to choose from such as Fortran, C++, Matlab, Mathematica, Visual Basic, Java, Ruby, C#, and Python. To help navigate among these options, I share my experience with them by use case. IEs are not developers. We have different use cases; in general, we are a looking for a popular language that is easy to use, facilitates data analysis, has a reach ecosystem of mathematical and statistical tools, help us to design effective interfaces, facilities the programing experience, and has a low cost.


Visual Basic for Applications (VBA) is well known because it is built into most Microsoft office applications, which every IE must master and most professionals are familiar with. It was the first programming language I learned and used for a real world application. A lot of entry level jobs for IEs involve the generation and analysis for reports, which involves heavy use of MS Excel and Access. VBA helps you to automate procedures within those applications, extend their capabilities, and integrate processes that require to multiple applications. It is a great way to analyze data, calculate performance indicators, and develop simple tools. In one project, I used it on top of a MS excel application to track the utilization of the outbound truck fleet. The tool consisted of an user interface on an excel sheet, the automatic pulling of data from the information system, some VBA code to process the information, some pivot tables, and graphics to display the output.

Pros:

  • It is easy to use: the documentation is great and most MS applications have developer tools that you will do a lot of the programming for you. If you are an advance excel user, you can pass from no knowledge to developing a working tool in a few days.
  • No entry barrier for the users of your tool: most people is already familiar with MS application, so your tools will be easy to share.

Cons

  • Its flexibility comes at the cost of slow processing and other computational limitations in terms of the amount of data it can process.
  • It is has a very limited set of mathematical tools available. If you need some sophisticated algorithm, you will most probably have to implement it yourself.

MATLAB and Mathematica are great environments when your dealing with problems that require advance computational techniques like routing trucks, time series analysis, and production scheduling. These tools are ideal if you need to develop tools for your own use or to develop prototypes for problems where requirements are not specifics (sometimes you do not know what the best solution is until you see it). I used them a lot during my bachelors and masters degrees to develop tools for one time decisions and compare algorithms to solve a problem. Also, professionally in consulting projects. In one project, I used them to analyze demand patterns and compare inventory policies.

Pros

  • Easy to use. The documentation is fantastic and they have a vast number of very efficient computational methods already built-in that you can use with one line of code.

Cons

  • Expensive
  • It is significantly more capable than VBA, but it is still slow compared to complied languages. MATLAB for example is mostly written in Java, C++, and Fortran, so there is a lot it does for you to integrate the code under the hood.
  • Although possible, creating interfaces can be challenging. Users must need to install plug-ins or additional software to be able to use your tools; sometimes users will not know how to do that or will not be allow to do it in a company computer. Mathematica has better tools such as webMathematica, but still it is targeting one-page simple tools.

It came the time when I needed to share my tools with others. In this case, I was looking for a language that allow a great user experience. These high level programming languages are among the most popular languages among developers. You get all the flexibility of general purpose language with mature libraries to develop interfaces for desktop and web applications. However, coming from mathematical environments, they look a little verbose. Bottom line, I found them perfect to create applications that did not require a highly technical back-end (processing algorithms) and needed to be used among several users.

Pros

  • Easy to learn
  • Great tools to create user interfaces for desktop and web applications. Ruby on rails is a great example of this.

Cons

  • As is targeted to developers, advance methods to handle matrices, optimization tools, or a statistical test will not be easily available. In some cases, this can be a show stopper.

In the middle of my PhD, I found the perfect comprise between a language that help me to share my tools with other users while still provides a rich ecosystem for scientific computing. In the aforementioned programming langues, before starting an application, I had to do a lot of research before writing the first line of code to make sure all difficult calculations and algorithms were already available within the language. In Python, I know I am covered. Python excels at having mature numerical and scientific libraries available, from matrix manipulation, statistical analysis, optimization solvers, plotting, symbolic operations, and data analysis. It is also a dynamic language, which means that it is less verbose, making your code easier to share and maintain. In consequence, it is a growing in popularity an introduction to programming languages for engineers (Wang, et. al.)

Pros

  • Easy to learn.
  • Great tools to create user interfaces for desktop and web applications (Django).
  • Rich ecosystem for scientific computing.

Cons

  • For computational expensive tools, Python is slower than compiled languages. This is only relevant for big optimization problems. With current computing power of PCs, it will not be a problem in most cases.

As an industrial engineer, it will be rear the case you are navigating around here, but if your optimization problem is too computationally expensive it may require the use of compiled languages as C++ and Fortran that excel at speed. As a downside, you will have to deal to memory management and other hardware related topics that the above language were handling for you. Many optimization solvers are written in C++ and numerical libraries in Fortran. Usually, there will be a way to call them from a user-friendlier language like Python or Ruby, but there can be the case that your code can run 100 times faster when using directly the compiled languages. For that reason, they are most common among mathematicians, physicist, and computer scientists.

Pros

  • Computational speed

Cons

  • Hard to learn.
  • Greater developing time than Python, Ruby, and other high-level languages.
  • Doing interfaces is challenging.

Summary

  • Python : My pick. It is a great place to start, provides a full-stack environment, and a rich ecosystem for scientific computing.
  • VBA: great to create simple tools within MS office applications.
  • MATLAB/Matehmatica: great for prototypes and applications for one user, when highly technical algorithms are required.
  • Java, C#, Ruby: great when user experience is the primary concern and there is no a heavy requirement for scientific computing.
  • Fortran/C++: best for applications that require computationally expensive algorithms.