Internship Story — From Imperative Javaist to a Functional Clojurian

Andreas Pogiatzis
4 min readAug 15, 2018

--

Hey folks! So I finally finished my internship as a Software Engineer in US at a company called LookingGlass (https://www.lookingglasscyber.com/). Interestingly, out of all my work experience, I believe this one may had the most profound impact on my future career. I will explain that in a second.

It is true that from every internship/project/work you always learn something new right? It is only natural that working with a new technology you will expand your technical skills towards the area of what you are working on. Which is great! But the problem is that if you don’t continue practicing what you have been doing, you will most likely forget about it. I mean, of course it may be easier to pick it up again but I bet that it would be hard to remember things from the top of your head.

Now given that, I believe there is a hierarchy of abstraction in terms of what you learn. More particularly, the more abstract/general the knowledge is the higher the chances of using it again and thus sticking with it. This is exactly, what happened with my internship.

I had the chance to work with functional programming in a professional context. More specifically programming with Clojure. Coming mostly from an imperative programming background, getting a grip initially was quite a challenge but after the first month I felt comfortable while programming and I started to deeply understand the concepts of functional programming and how to use them. It was at that moment that I noticed, it wasn’t just another technology, it was a completely different mindset! That is, the way you think about developing something, the way you visualize it in your head, even the way you describe it! The complete thought process is affected! it can be practically applied anywhere. Even in object oriented programming, I will most likely do stuff different now rather from how I would’ve built something before using Clojure. This is what I mean it had the most profound impact on me.

In the company there were two kinds of people, those who hated Clojure and those who favored it as a religion. Most often those who hated it were the people that had to use them occasionally rather than full time. And indeed I don’t blame them, Clojure used to get a lot of shit talking from me when I first started, but in the process, I slowly realized its flexibility, compactness and elegance.

Using pure functions, macros, immutable data structures, lazy collections, avoiding state modification… all these made programming more elegant. Instead of using a loop, create a collection apply a transformation and get a new collection is a brief example of the functional way of doing stuff.

When I was first introduced to the codebase that I was working on, the first thing that popped up in my mind was:

“What is wrong with this syntax? How can they even maintain this thing?”

However, interestingly enough, using Clojure for building a web app was robust af! The compactness was unbelievable! Doing something in one line in Clojure could easily be 15 lines of JAVA. Having very little code that changes state made it extremely hard for bugs to hide deep within the codebase. And guess what? All this, without worrying for concurrency since it is already built in by immutable data structures.

Clojure is essentially Lisp compiled to JVM bytecode which means you can potentially do anything that JAVA does. If you are interested in Functional Programming (Even if you don’t….cause I wasn’t before that internship) I highly recommend you to experiment a little bit with it and you will understand what I am talking about.

To conclude I am very glad that I had the opportunity to be exposed to functional programming through this internship. Of course a major contribution was the feedback and guidance from my supervisors while interning which I am really thankful for. To put the long story short, I truly feel that this experience positively affected my programming cognitive process and technical skill. If you have the willing and time you should definitely try it out.

PS: Having an internship overseas was an amazing personal experience. Travelling and leaving in US for 3 months is a priceless lesson, adventure and memory. I would like to specifically UoG Careers Service and UoG Alumni for providing such opportunities.

For all aspiring young student programmers out there: Don’t be afraid to get an internship overseas, instead seek out for such opportunities and chase them. Getting out of your comfort zone always, always always has the most learning outcome.

--

--

Andreas Pogiatzis
Andreas Pogiatzis

Written by Andreas Pogiatzis

☰ PhD Candidate @ UoG ● Combining Cyber Security with Data Science ● Writing to Understand

No responses yet