If you want to set up the Best environment for software development in Linux Mint (or Ubuntu and other Debian based distros), this is the right article for this.

Every software developer organizes their development environment for programming using a mix of technologies and tools to use to program, improve productivity and that has their personal preferences.

In this post I’ll show you how I organize my development environment, starting telling you that there is no best but the most appropriate development environment.Here I show the my best operating system configuration, programming and other tools according to my context, but it can help you in yours.

Context#

First we will establish the context of the development environment you want to assemble.

My most common need is web software development. It does not mean that this environment after configured cannot be used to develop desktop or mobile applications, but that in these context it may be that the environment needs some adjustments for your context.

To develop desktop for Microsoft Windows, Apple Mac iOS or iPhone, it is possible that the operating system itself, the basis of the entire environment, needs to be exclusive to the platform.

This is why this technical contextualization is important, in my case the list of technologies that I use in my applications:

  • Applications Model: Web Softwares
  • Backend: PHP, Laravel, Eloquent, NodeJS, NPM, Express.js, Asp.NET Core, C#
  • Databases: Mysql, PostgreSQL, Sqlite, MongoDB, Redis
  • Frontend: HTML, CSS, Blade, Javascript, jQuery, Webpack, Laravel Mix, NPM
  • Versioning: Git

Operational system: Linux Mint#

Linux Mint

Starting at the beginning, choosing the operating system to run as web development tools is crucial. For me, since 2005, developing software has required the use of a Linux distro.

A little of my story with Linux: I made the first attempts to use it in the late 1990s, but focusing on developing software and not working like Sysadmin, I found it very painful to configure hardware and resolve several small conflicts. I used the Brazilian distro called Connective which later became Mandriva.

A few years later, in 2005, developing corporate web applications using Eclipse to develop in Java, JSF and run JBoss application server, on Windows (ME or XP), the frustration with performance was constant. Several minutes to up the server and application with each small code change and test.

I decided to give Linux a new chance and chose the distro sensation of the time: Linux Ubuntu.

I was very pleased to be able to install a dual boot much faster and easier than my first experiments with Linux, and I was much more than satisfied, in ecstasy, when I ran the first tests with the Eclipse/Java/Jboss stack, and performance (start up speed mainly) exceed 70% compared to Windows.

I had no doubt, 2 months later I no longer used dual-boot between Windows and Linux and had decided to adopt Linux as my primary operating system for my web software development environment, and other professional or personal activities.

Around 2012 when Ubuntu decided to adopt a new window manager, Unity, several problems began to displease me in the user experience, as well as the performance that degrade too much. At this time a new change, and after testing a few distros, I decided adopting Linux Mint - and I’m using it till today, initially using Mate Window Manager (GNOME version 2 fork) and more recently I started use Cinammon Manager (fork of the Gnome version 3).

Installing Linux Mint#

These are the steps I use to install Linux Mint on my computers (soon I write a detailed tutorial):

  1. Download the latest ISO image at Mint web site
  2. Then build a bootable USB using Rufus
  3. In my computer run the boot by USB port, then I execute the installation by the USB Live version of Linux Mint
  4. When you reach to the point of deciding on the formatting or advanced installation, I choose advanced and define the partitions of the disc as follows:
    • Bootable area for EFI - 540 MB
    • Mounting point of Boot, /boot - 50 MB
    • Swap, /swap - twice the amount of RAM memory
    • General mounting point (root), / - at least 120 GB
    • Home mounting point, /home - the rest of the free space

After installing the Linux Mint operating system my the development environment is ready to be configured and personalized.

Docker#

That’s right, the next step is to install a virtualization tool to make flexible the different environments that need to run different projects. I do this even before installing my programming IDE.

I am talking basically about installing Docker, perhaps Virtualbox, and other tools in this context that allow me to contain my environment, run up and stop services according to the project.

Installing Docker on Linux Mint, Ubuntu, Debian#

Read the tutorial which explains how to install Docker on Linux Mint, Ubuntu and Debian based distros.

After installing Docker and Docker-Compose, we are ready to install the basis of our programming languages, databases and other tools in Docker containers without “polluting” the installation of the host operating system, as well as having the advantage of start and stop services when necessary and use different versions of programming languages for each project.

For example, you can read de Laradock series to know how to use different PHP versions for each Laravel project you have.

Containers Docker for PHP Laravel#

To work with Laravel PHP on my projects, I install PHP and various tools with Docker. I like to be productivity in the local environment without having to worry about extreme configurations for containers, so I use a set of setting files for Docker-Compose called Laradock Project.

In addition to these containers bringing the installation of PHP language, I also use databases in Docker, the Docker-Compose Setting Laradock for MySQL, Mariadb, PostgreSQL, Mongodb, Redis, Elastic Search, Memcached.

I have also containers for other tools such as Phpmyadmin, Pgadmin, Rabbitmq, Beanstalkd, Selenium, Graph, among others.

Information about what is the Laradock and how to install or solve problems you find in these posts on my site: Laradock Tutoriais

Integrated Development Editors - IDE#

Integrated Development Environments - IDE, are the well known editors for programming. I mainly use PHPstorm to develop on PHP and Laravel, which also serves me in development with JavaScript, Vuejs, Nodejs.

Although I find it necessary to keep several IDES installed to enjoy the best environment according to Stack. For quick editions I use MS VSCode (Visual Studio Code of Microsoft), especially for JavaScript and my Technical Writing in Markdown .

Installing VSCode on Linux Mint, Ubuntu and Debian#

Visual Studio Code is a greate source code editor that provides comprehensive support and easy understanding for editing, navigation and code debug.

VS Code comes with integrated support for JavaScript, TypeScript and Node.js, has a rich ecosystem of extensions (plugins) for other languages (such as C++, C#, Java, Python, PHP, GO) and Runtimes (like .NET and Unity).

You can easily install extensions to add new interface languages, programming languages, themes, debugers and to connect to additional services such as databases or APIs.

To install VScode on Linux Mint, Ubuntu and Debian, click here to read the tutorial on the blog.

Installing PHPStorm on Linux Mint, Ubuntu and Debian#

PhpStorm is perfect to work with Symfony, Laravel, Drupal, WordPress, Zend Framework, Magento, Joomla!, CakePHP, Yii e other PHP frameworks.

FTP and file synchronization#

FTP - File Transfer Protocol, is protocol, which even not being the ideal tool for deploying web applications, it is a greate tool to have installed when you need any quick access to servers to download or send files in a contextual situation.

Of course there are extreme use for FTP transfer, but in software development context, its use to me is secondary.

In addition to FTP it is very useful to keep synchronized data, such as backup, and cloud sync. I am not talking about maintaining “backup” from your source code files, your versioning management should be performed with Git or another source code versioning system. But to keep your work files as documents from text editors, spreadsheets, images and other media, synchronized and safe.

For this I also use keep a signing from Google Drive - $9.99 to 200 MB, and synchronize the data using Insync.

Insync license is very accessible and lifetime, click here to get yours.

Installing Filezilla#

Filezilla is my favorite FTP client for over 2 decades.

Security#

For my passwords and other sensitive data I use an Open Source password management application from one of the oldest projects in this segment: Keepassxc.

Essential for any computer user, essential work tool for developers.

As I use Linux Mint, I only maintain two internet browsers installed: Firefox and Chrome. In the past I even kept Chromium but gave up its use despite the chrome privacy invasion abuses. But this is a topic for another article.

Database clients#

How to work with software development without a tool that allows the management of databases, both for SQL commands for relational databases, such as navigation of their structures and [Reverse Engineering](/Engineering-Reverse-Systems-e-dated-migration-softwares-legged banks/) for visualization in diagrams.

My favorite software for decades for this purpose is DBeaver Database Client.

APIs interaction and tests#

Any modern software performs integrations or exposes its functions through APIs (Application Programming Interface), on HTTP Protocol.

To develop in a productively, document and test APIs, I use Postman.

Communication and Teamwork#

They were already essential to software development teams, now that remote work has been consolidated (finally) even more teams should use effective tools for communication and collaboration.

The ones I generally use are “online” in the browser, such as Google Suite (Google Workspace), email customer (usually Gmail), teams collaboration as Slack.

But some find it more productive locally installed, which is the case with Microsoft Teams.

Productivity#

Many tools are useful for increasing everyday productivity for software development professionals in various areas: web, desktop, mobile, UX, design, etc.

Screenshot#

One of the recurring tasks in software development is the capture of desktop screens. For various reasons it is necessary to perform a screenshot: facilitate conversation with a user person, write software manuals, demonstrate code blocks.

For many years I used Shutter as my official Linx Mint and Ubuntu screenshot tool. But as its development is in a slow pace, although it’s still an excellent application, I have currently using and adopted as my official scrrenshot software Flameshot.