Introduction

Basic info

  • First name: Gianluca
  • Last name: Costa
  • Gender: M
  • Year of birth: 1986
  • Nationality: Italian
  • Education: M.Sc. in Computer Engineering (110/110 with honours)
  • Favorite emoticon: ^__^

Software engineering

I bought my first PC in June 1998 and compiled my first program - written in Delphi 1 - in January 1999: since then, I have studied and employed a wide variety of technologies, both on my own and for work.

Over the years, I have created software mainly in Object-Oriented Programming (Java, Delphi, C#, Python, ...), especially in the context of Domain-Driven Design and, since 2015, I have been passionately focusing on Functional Programming (in particular Erlang, Elm and Haskell), as I believe it revises and extends the best ideas of other methodologies, leading to more effective design and development, with fewer bugs and cleaner code: an example is EighthBridge, my hybrid OOP-FP library dedicated to graph modeling and interactive rendering - which is the Elm-inspired evolution of Arcontes, another library that I published years ago.

Currently, my favorite language is Scala, as it enables a smooth transition to the concepts of Functional Programming while supporting previous investments in OOP and in the Java ecosystem; at the same time, I employed Java 8 in the development of EasyPmd 10, and I was very positively impressed by the fluency enhancements introduced in the language - in particular, streams, lambdas, static and default methods in interfaces are new, invaluable aspects.

Build tools are another domain I am keen on - especially Gradle, although I employed Maven and Ant as well, also writing plugins which you can still find among my GitHub projects. My plugin for Gradle is Aurora, designed to be the core of every modern open source application or library I have released for the JVM (Scala, Java, Groovy), greatly simplifying software distribution; you are also invited to visit Hephaestus, my Gradle/Maven repository.

For a quick overview of all the main technologies I have employed in my life, please have a look at my CV.

Human languages

Human languages are even more important than software languages - as they convey a much broader stream of ideas - and I am definitely passionate about several aspects of linguistics - morphology, syntax, phonetics...

My native language is Italian, and I studied English and French at high school, later reaching certified C1 level in both.

In 2015 I discovered Duolingo, so I decided to begin learning my 4th language - Dutch - and the result was quite positive. Therefore, in July 2016, I also started German, getting Goethe Zertifikat B1 about 10 months later, in May 2017.

From time to time I like approaching new languages For example, I studied a bit of Spanish - and I am currently learning a bit of Chinese! 我喜欢学习! ^__^!

To know more about my progress in Duolingo, please visit my Duolingo profile.

Education, work experience and awards

My first award dates back to 2003: I was among the winners of a competition, held by Rubiconia Accademia dei Filopatridi, consisting in the translation of a speech composed by the Latin orator Cicero.

I attended a scientific high school - Liceo Scientifico "Enrico Fermi" - and received my diploma in 2005, with a score of 100/100.

After graduating with honours in Computer Engineering at the University of Bologna in 2009, I spent about 4 years in the IT industry, working on a few different activities:

  • Software development on a variety of technologies, mainly in the C# and Java ecosystems - including Silverlight, ASP.NET MVC and Struts
  • Teaching to junior developers - especially C# and OOP good practices, as well as brown-bag sessions to colleagues (for example, on Python and Regular expressions)
  • Database querying and scripting - in Oracle 10g, SQL Server and MongoDB
  • Build tools: I introduced Maven and Hudson in one of the companies I worked for, so as to vastly enhance and simplify the management of Java artifacts

For details on my work experience, please consult my LinkedIn profile.

In the meantime, I continued studying on my own in several fields - web technologies and OOP languages - in addition to creating open source software: in January 2014, Geertjan Wielenga interviewed me on EasyPmd, my plugin for NetBeans.

In 2014 I decided to return to University, in order to achieve Master's Degree in Computer Engineering (in December 2016) - and I am definitely satisfied about my choice in terms of acquired skills; furthermore, I worked hard to delve into Functional Programming, releasing didactic hybrid (OOP-FP) Scala projects - for the most part dedicated to Operations Research and Artificial Intelligence - such as KnapScal, Chronos and GraphsJ.

In July 2016 I was awarded the prize dedicated to the 30 most brilliant engineering students at the University of Bologna during the previous year and in December 2016 I achieved - with honours - Master's Degree.

Music

I adore music - from classical (Mozart, Chopin, Bach, ...) to opera (Rossini, Donizetti, Verdi, Bellini, ...), up to modern (Édith Piaf, Queen, Dschinghis Khan, ...) and contemporary music (Jörn Schlönvoigt, Lady Gaga, ...).

In particular, I'm fond of modern arrangements of classical pieces, such as David Garrett's violin masterpieces and some symphonic metal (Nightwish, Dark Moor, Rhapsody, ...), as I think they brilliantly combine classical style with modern sound and technology.

Philosophy

Aristotle used to say that Philosophy is a natural aspect of mankind - born from the very act of wondering in front of natural phenomena, which leads us to posing questions and finding answers.

In this regard, at high school I passionately studied the ideas of many different philosophers - from Ancient Greece up to the XX century - and I believe it was a very formative experience in the definition of a personal view of the world.

As time passed, of course, I have developed my own preferences, and I'd say that my favorite philosophical trail is the Enlightenment - because personalities such as Voltaire, Beccaria, Goethe and many others (including contemporary thinkers like Popper and Russell) were not only brilliant philosophers, but also intellectuals caring for the evolution towards a more human society.

Hobbies

In my spare time, I usually like:

  • Hanging out with friends
  • Biking
  • Reading
  • Learning languages
  • Listening to music
  • Playing videogames
  • Going to the theatre
  • Composing poems

About elegance

Elegance always matters... but, apart from the artistic, creative aspect I want to underline in the process of software development, what does it mean?

Unfortunately, elegance is a concept really difficult to define, which should always be inscribed in a context; however, we can take a different approach and name a few misconceptions about elegance:

  1. Elegance is not "any set of practices just slowing down software development"

    This is perhaps the worst misconception and the most expensive one, easily leading to unmaintainable, buggy and frustrating blobs of spaghetti code.

    Indeed, perfection is almost impossible and projects are usually assigned a budget in terms of resources such as time and money - but I think it is paramount to strive for achieving the clearest and most maintainable code structure among the feasible ones. Well, this might actually be a good definition of elegance in software engineering! ^__^!

  2. Elegance is not necessarily wearing formal or expensive garments

    Needless to say - this aspect might contribute to overall elegance, but I believe that what matters first are concepts, principles, skills and ideas.