Nikos Glikis, Software Engineer — Paphos, Cyprus

Thoughts from a Cypriot Software Developer

Kevin R. Brown
HR Innovate
Published in
8 min readMay 24, 2019

--

Coding in Paphos. From Family to Golang, Nikos shares his story.

Hey Nikos! Thanks for taking time to talk with me.

Thanks for having me!

Tell us about yourself.

I am a software developer from Cyprus. I am married and I have 2 kids (twins), 3 years old, which I adore. I code, or think of code most of my waking hours, which I think Is not very healthy. I like solving problems with code, simplifying people’s lives and simplifying complicated procedures. Except of my full-time job, I maintain a series of pet projects, some more successful than others. The only thing that takes me away from computers is a daytrip with my wife and kids, a good Science Fiction novel or a beer with a good friend.

You have a pretty cool personal website.

Thanks. At some point I realized that it’s funny that as a software developer, that I have created dozens of websites and web projects, didn’t have a personal website, so I decided to create an online CV. At that time, I was really into Information Security (still am) and the posts reflect that. Interestingly enough, the updates stopped when the twins were born and my priorities changed. I still work with Information Security and programming at home, but I don’t have much time for updates.

You told me you recently moved back to Paphos. Why Paphos?

Actually, I lived in Paphos, and until recently I commuted to Limassol. Me and my wife are from Paphos and we decided that we are going to stay in Paphos. Since Limassol has more opportunities, especially in the IT sector, I looked for a job in Limassol after trying various things in Paphos. My guess was correct, in Limassol I had good pay at a stable company and I learned a lot. But then the twins were born and my priorities changed. I quickly realized that during workdays I only saw my kids 1–2 hours per day. Many people have asked me: “why ?” The answer is: You cannot raise children with one hour a day. Also, the 2 hour commute per day seemed a lot like wasted time.

So, I started looking for something in Paphos and a position in Statare Solutions popped up. I did some research and it seems it’s the only serious player in Paphos right now. I applied for the job, got a decent offer, and the rest is history. It did really pay off, I am now closer to my family than ever before and I have more time for myself.

But that is my personal story. In general, Paphos is great. It’s a large city, by Cyprus standards, with all necessary amenities. It has more natural beauty than the other districts, we hardly ever have any traffic and most days you don’t need a booking to go somewhere — you just show up. Also it is cheaper than Limassol and Nicosia, things like owning a house in the City, is actually still possible. In large cities, things like parking and traffic are real issues. These things add to your stress levels, I always preferred a simpler life style. I remember on our chat, you left DC for similar reasons, so I think you can appreciate my point of view.

Let’s get into the guts. As a Software Engineer, what’s your preferred language and why?

Asking a geek about his trade, prepare for a long answer!

This is a big chapter. I have my favorites, but I use different languages for different tasks. I am a firm believer of choosing the right tool for the job. I have several criteria:

1. Is what I am writing a temporary tool that it will run once and I will throw away?

I will most probably write Java, or whatever I feel like at the time, many times I use something new just to play with it.

2. Is this a tool that I will have to maintain for a long time? Are other people involved?

When I am choosing a framework for something I do at work, with my team, I have different criteria. Here not only the programming language is important, but also the framework. If it is web, my first choice is Symfony PHP framework. If it is not web, probably Java Spring framework, or something similar. Someone who has used both, will tell you that they are quite similar. The new PHP frameworks, hide PHP’s ugliness and the best one for this is Symfony. When you are working with a team, or if you are going to deliver your code to someone else to maintain it, you need a strict framework. You don’t just write PHP/Java, you implement something the “Spring way”/”Symfony way” which is standard and someone can pick it up and continue. Code you write should be clean and understandable for your team member. Also object-oriented code helps you enforce the architecture you design.

You also need something that is also easily testable. What is different between hobby and professional programming, is the duration and size of the project. You need to be able to maintain and add new features to the project easily. Also, when you are adding a new feature, or fixing a bug, you should be able to answer the question “Did I break anything else?”. Large frameworks give you an easy way to achieve that, being Test friendly.

3. Is Machine Learning involved?
Python for the tricky parts. Lots of libraries exist to help you.

4. Do I need raw performance/have memory limitations/CPU limitations/problems scaling?

Go! (Golang)

C/C++ gives you the best performance, but I avoid them at all costs. C is a fairly small language, but it makes it very easy to shoot your left in the foot and you can hunt memory problems for days. C++ is a massive programming language, that supports so many things but a program written in C++ can get unreadable/unmaintainable very quickly. The solution here is Golang. Officially its 1.5x slower than C, which is still really fast, but you can produce quality software very easy. Its creators (Google) have put much thought into designing the language in a way, that is very difficult to make a mistake. If it compiles, it will most probably run ok.

I mostly write Java now, but I find my self rewriting stuff from other languages to Golang at an alarming rate. Things like scanning the entire internet for an open port is doable with 100 lines of Golang and the best part is you can do that with a simple laptop or a small VPS in some hours.

I favor micro-services architecture. What that means is, you design your software to contain lots of small modules, clearly independent, that perform specific actions very well. That way you can create the bulk of the software — the complicated business logic in a slower language that you prefer. Then if you have performance problems, you can extract specific, easily defined, isolated tasks and rewrite them in a faster language like Golang.

But that is my take on this. Most people are ok with Python. Very easy to get started and there are a lot of libraries that can help a beginner. Also, engineers and academics of all kinds use it, so it has lots of libraries to assist with calculations, machine learning etc. But it has its limitations, like the GIL (Global Interpreter Lock), which means you don’t have true parallelism. Google used to run in C and Python, now they created and use Go. So that tells you something. If things get serious, explore a different language.

How do you see the near future of tech evolving in Cyprus?

Cyprus has become a Computer Science hub these days. We have lots of companies operating primarily in Cyprus, ranging from Forex and Maritime companies to Homeland Security and Security Research. All us Cypriot software engineers live in an environment with so many opportunities that some years ago was just a dream. Unfortunately, as Cypriots, we didn’t have much of a tech culture, but we are now just starting to have one, and us computer geeks should spread the message. I am very excited to see what the future holds. Foreign companies have helped us build a momentum that will lead us to the future. As I told you before, I expect our kids to be the awesome hackers of tomorrow.

What advice would you give to aspiring Software Developers in Cyprus?

This is a great time to be software engineer in Cyprus, but also good positions are demanding. Try to learn everything you can get your hands on and remember; experience is equally important with University education. Experience is the glue that binds together everything you know. We are lucky, as software engineers, we can have all the practice we want, with only your laptop. Try to work in various environments and learn everything you can. Work in a Startup, where you do a little bit of everything, then work for a big company to learn the procedures and how bigger projects are maintained. Start some projects, try to create something, and if you fail repeat. Show what you do to people (something I never did). There are many people eager to fund smart young programmers, find opportunities and use them. Something I learned later in life, is that you can achieve anything with hard work, dedication and clean goals.

And for a little more technical advice…

Write clean code. You spend more time reading code, than writing it. Comments are lies — write code that is so clean, it doesn’t need comments. Write only a few comments where needed.

·Write tests. Not too many, mostly integration https://twitter.com/rauchg/status/807626710350839808?lang=en

Think hard. Before starting a task and find the easiest way to achieve something.

My favorite quote is:

Fools ignore complexity. Pragmatists suffer it. Some can avoid it. Geniuses remove it.

Second favorite…

Intelligence is the ability to avoid doing work, yet getting the work done.

Planning is guessing. Always know what is your next step. Have some idea for the step after that. Have a clear end goal, but don’t try to decide every detail in the beginning of the project. Software grows organically, always revise it.

Learn your domain. The best programmers are those who understand what they are doing. Domain knowledge is really important. If you are writing accounting software, you should learn accounting. If you are writing security software, learn to hack. Ask your users, show a sincere interest in their problems and try to understand them.

Another quote (Sorry 😊):

For each desired change, make the change easy (warning: this may be hard), then make the easy change

If your architecture doesn’t support a feature, and it seems very difficult to implement then refactor your whole application to support this more naturally — to make it easy to add it. Then add it. Excellent article here: https://martinfowler.com/articles/preparatory-refactoring-example.html

Wrapping up, what is one final thought you’d like to leave our readers with?

Learn to code, even if you don’t work in tech. The world will make more sense.

Thank you so much, Nikos.

If you want to reach out to Nikos contact him at nikosglikis@gmail.com or at his website https://nikos.glikis.net/

If you are interested in exploring new opportunities in Software Development in Cyprus, visit us at https://www.hrinnovate.org

--

--

Kevin R. Brown
HR Innovate

Founder of Minabocks. Avid traveler. Fan of dogs and robots.