Monthly Archives: May 2017

A Rough Guide to the Greek University System

Throughout my career I have had the pleasure of working with a quite a few Greek computer scientists and I have to say that I have found their skill level to be very good overall. I find a fairly higher than average ratio of female to male Greek developers, and I also find a lot of developers have gone on to study further and achieved PhDs. So it was in this vein that I decided it was time to look into what the explanation of this could be.

Greek Universities

Sunshine, Ionic columns and a high academic bar characterise the best Greek institutes for Computer Science.

Only the higher academic achievers study Computer Science

After completing the equivalent of A-levels (the Apolytyrion), Greek students who wish to attend university then take the “Panhellenic National Exam”, a national test that covers a broad variety of 6-7 subjects (making it much closer in variety subjects tested to a Baccalaureate than the more subject-specialist British A-level system). Each student is then nationally ranked and the students with the best scores get to choose what subject they want to study, at which Higher Education institute, naturally choosing the most demanding courses at the most prestigious places, and vice versa, the lowest performing students get the least choice of subjects to study, at the least prestigious HE institutes. In effect this makes highly demanding subjects like medicine and engineering (including Computer Science) at the very best universities the hardest to be admitted to.

Which means that in Greece not just anyone can choose to study computer science at University, and only the very brightest get to attend the very best institutes.

 

The Top Greek Universities for Computer Science are not “Universities”…

These are the top 3 Greek universities for computer science:

  1. National Technical University of Athens (aka EMP)
  2. Aristotle University of Thessaloniki
  3. Technical University of Crete

However none of them are strictly speaking “Universities”, the “National Technical University of Athens” is a polytechnic, as is the “Technical University of Crete”, and the “Aristotle University of Thessaloniki” has two parts to it, its Engineering Faculty which is a Polytechnic and the traditional “university” part teaches everything else. This is because in Greece Computer Science is often taught by an Engineering Faculty, and Engineering is almost exclusive taught by polytechnics, not by universities.

In general the Polytechnics give a more rounded, more practical level of Computer Science education and so, as with Poland and France, in Greece it’s regarded that Polytechnics Are Better Than Universities. As you can see from the three top universities above, somewhat unhelpfully its quite hard to actually tell from the institute’s name if its a polytechnic or a university.

Within these universities, different institutes have reputations for different things. So for instance the University at Crete has a long established reputation for being one of the top Universities in Greece but today it is considered that Computer Science is very well taught there. It has a lot of new equipment and seems to have attracted a younger set of professors who are more likely to have worked or taught abroad to teach the course. Athens EMP on the other hand is considered to have a more traditional approach to teaching its course, and an older set of professors.

Honourable mentions also include the University of Patras and the University of Ioannina for their computer science departments, and it’s also worth pointing out that there are many universities in the city of Athens, and as a whole they have a generally good academic reputation, although the National Technical University of Athens (aka EMP) is considered the best for Computer Science.

athena

Athens, named after the Greek Goddess of Wisdom (and War) has many good universities to attend.

Only Public Universities Are Recognised

In Greece although private Universities exist, they are not strictly permitted and the education you receive from them is not supposed to be recognised (for instance you would struggle to get a job as a civil servant with a degree from a private university). Only public universities are recognised, and these are considered the best. There are no tuition fees to attend university, although students must still pay for their cost of living, becoming a potential factor when considering Post-Graduate exams.

 

 

How do you know if it’s a good degree?

So apart from the name of subject that was studied and the name and type of institution it was studied at, there are 2 main ways to tell if someone has excelled at their degree.

One is the length of time they have studied. It takes a minimum of 4 years to complete a university degree and 5 years to complete a polytechnic degree, which is equivalent to a Masters, or MEng. As with private universities before, the Greek Government does not recognise 3 year degrees. However, students are allowed to retake exams if they don’t get the grade they were hoping for. Meaning that in general any degree achieved in under 6 years is considered to be very good. When students take longer than 6 years to complete a degree in Computer Science you can start asking questions as to just how many times each exam had to be retaken until the desired grade was achieved.

The other key factor is the final grade. Greek students graduate with a percentage mark out of 100, in a weighting that is pretty similar to the UK system. Any mark above 80% is exceptional, a grade above 70% is very good, and 60% is still good being treated in a similar way to a 2:1 is in the UK. The professors in Greece joke that no-body except God gets a 100% mark, and that 90% is for the professors only!

 

What’s covered in the Computer Science curriculum?

Greek students will tend to begin a course in computing or informatics or applied informatics, and will then specialise their studies in to areas like programming and software engineering in the second year. Because the first year covers quite a broad computing curriculum many Greek developers will have a basic foundation in areas like networking, infrastructure, electronic engineering, etc.

It’s very common for students to have completed some kind of academically related extra-curricular activity alongside their degree, such as contributing to post-graduate research or a complimentary programming project which will often be published in an academic journal.

Alongside main stream subjects, graduating in computer science will also involve studying mathematics to quite a deep level. There seem to be mixed feelings about this, some people say it doesn’t do any harm, whilst others believe the depth of mathematical competency that must be achieved in order to graduate is too much. Any for students who want to specialise in areas like networking, it is simply irrelevant.

Top 5 Things To Get Ready For Your Job Search: NUMBER ONE, Work Out What You Want To Do

Whether you’ve got a job right now and you’re looking to take your next career move, or whether you’re beginning your search from a standing start, here are my top 5 things that are going to help you get ready to begin your search.

Getting ready

This is aimed at software engineers looking for a permanent position (PAYE), most of the things I’m talking about will be applicable to day-rate contractors, but not 100%:

NUMBER ONE: Work Out What You Want To Do

As anyone who’s recently finished looking for a new job will tell you, it doesn’t take many conversations to work out that you actually need to have a really good understanding of what you want to do next before you start to talking to anyone.

The key point here is that for the hiring managers the interview process is all about risk. Working out which candidates are going to be worth interviewing from their CVs is an obvious example (which candidates looks like they’re least likely to be a waste of time interviewing). But for the hiring manager it isn’t just the time spent on the initial search for the right candidate, what’s also at stake is the huge amount of time that stands to be wasted if the candidate they hire never really wanted the job in the first place. If the successful candidate goes on to leave after the first couple of months, then that’s potentially hundreds of hours of time wasted, involving training, mentoring, showing them around the company, including them in future plans, wasting the hiring manager’s time, their colleague’s time, their team’s time, their boss’s time…, reputational damage, their judgement and competency questioned, a huge amount of budget potentially wasted, IP at risk, etc, etc, etc.

Which means that during an interview when you’re asked “what kind of job are you looking for” or “what are the main things you want to get from your next job”, you’re going to want to have worked this out already. Because the man who walks into an orange fruit shop and starts talking about other fruit they’ve had in the past that they liked, and “that they really don’t mind what kind of fruit they buy because they’re just hungry”, or even that “actually their most favourite kind of fruit they ever had was an apple, but as they’re here now they’re happy to consider oranges”, isn’t going to go down as well as the man who confidently tells the shop keeper “I’m an orange-kind of guy. I like oranges and I’m here to buy oranges.”

So, going into the job market armed with nothing more than a bunch of vague ideas about what you kind of job you’d like to have is not going to help you.

Operational Hypothesis vs Re-iterating

Have a good think about it, talk it over with someone else, and then be comfortable with the idea that you’re probably going to refine your idea of what you’re looking for after you’ve started your search, but time spent working it out before you begin will be time well spent.

Some Food For Thought:

To help get the brain juices flowing, here are some ideas. You could say a Software Engineer can go in 1 of 3 general directions with their career:

  1. Team Management
  2. Sales and Product
  3. Architecture / Technical SME.

Here is a simple list of the main factors that Software Engineers’ tell me they’re looking for:

  • How much time you want to spend hands-on coding? Do you just want to code, or do you want to be paid for other things as well (design, architecture, requirements gathering, scrum mastering, stakeholder facing, client facing, deployment, support, testing, code reviews, people management, project management, etc)?
  • What size of company do you want to work for? A big corporate? A mid-tier company? A start-up? A small company?
  • Would you discount a company that had lots of problems, or would you see that as an appealing factor?
  • Does it matter if the team is all located in the same office or is spread around the world?
  • Are you looking for technical authority?
  • Is formal training and investment important to you?
  • Is any the “package” element of the job important to you (pension contributions, medical insurance, nice office, flexible working hours, working from home, lots of colleagues etc)
  • What kind of office locations you want to commute to / are you prepared to get to?
  • Is a new (“greenfield”) application important to you?
  • Is working with the latest and greatest tools and technologies important to you?
  • Do you have some kind of preference for the people you work with (senior to you so you can learn from them, same age as you so can easily get along, etc)?
  • What kind of industry/industries do you want to work in? Does it matter to you?
  • Is it important that the application you work on is something you find exciting or high profile?
  • Do you want to work for a well-known company?

Why are Algorithms such a popular test for a developer’s skills?

In my experience, although there are lots of different ways of assessing a developer’s technical ability (from verbal technical interviews, to logical and numerical tests to the dreaded “paper and pen” exercises) most technical interviews fall into broadly one of two schools of thought: either ask them to complete an exercise which requires solving a real-life business problem, or ask them to solve written-for-purpose puzzles by writing algorithms.

 

THE EXERCISE-BASED CAMP

The exercise-based camp always made sense to me, apart from the common trap that the hiring manager who writes the exercise basically writing a test that says “can you guess how I think” and then marking the result on how close they got to their own solution, it’s a clear indicator of what a programmer’s development skills might be on the job. Does it solve the challenge? Did they complete their solution? Does they solution make sense? Is it elegantly written in the development language of choice? Is it extendable / documented / follows TDD / etc etc? Naturally coding in the time sensitive, pressured environment of an interview doesn’t suit everyone, but it is unarguably a rock solid example of what the candidate can actually do.

 

THE ALGORITHM-BASED CAMP

And for years the algorithm test camp has puzzled me. Algorithms are often written in the main language that the job requires skills in (write your algorithm in Java if it’s a Java developer role), but sometimes answers can be written in pseudo-code and that’s just as acceptable – which seems counter-intuitive. Often when my candidates fail the algorithm writing part of the interview and are “no’ed”, they tell me that they were asked to write a kind of sorting algorithm that they hadn’t looked at since their university days (typical example is a Bubble Sort) and their mind goes blank. Which seems unfair.

bubble sort

A better gauge of your coding skills than anything you write in an IDE.

 

And I can’t help but wonder how easy it is to game algorithm-based technical tests. Many developers who are actively looking for a new position know they’ll come up against algorithmic challenges to complete during the interview process and I wonder to what extent you can simply train yourself to become “good” at solving the most commonly ask kinds of question. I know for a fact that I’ve seen some very good developers dismissed for developer jobs they were good fits for, completely out of hand after failing a algorithm test. And I’ve then seen the same developer go on to successfully complete algorithm based challenges and get job offers after having practised solving challenges at home. I personally recommend codility.com as a great preparation tool to the developers I work with.

 

It’s also very rare that writing algorithms from scratch will be a part of s developer position’s day job, so my candidates are being tested on a skills they don’t need to have to be able to do the job they’re going for.

 

So with so many pitfalls, I began to ask my candidates and hiring managers why algorithms are so highly valued as an interview tool.

 

ALGORITHMS ARE A RELIABLE TEST

The first thing I learnt is that it the ability to write an algorithm is considered one of the few reliable tests of how good a developer is (despite concerns about “gaming”). The field of study to be a competent Java developer (or C# developer or [insert chosen language here] developer etc) is so deep its hard to actually come up with a reliable, catch-all test that doesn’t take hours and hours, in the absence of a better model, algorithms are a tried, tested and trusted way of assessing how good someone’s core development skills are. When asked about “gaming” algorithm writing tests, I’m told that most tests these days can be gamed, and that its up to the hiring manager to keep the exercises fresh. Which doesn’t sound like an unreasonable requirement!

merge_sort.png

Ahhh, the old “merge-sort two step”

ALGORITHMS ARE TIMELESS

New algorithmic challenges can be written, but the principles by which they are solved still rely on the same set of fundamental skills, its just the style of implementation that changes (hence the willingness of some hiring managers to accept answers written in pseudo-code). On the basis that development languages change over time, and dexterity with the latest tool or framework will probably soon be made redundant, a test of someone’s ability to solve an algorithmic-based challenge is kind of timeless.

 

EACH ALGORITHM IS A MINI-PROGRAM

Each algorithm-based challenge is good all round mini-test requiring the candidate to demonstrate the core concepts of software development:

  • Problem solving
  • Structuring the solution
  • Refactoring it
  • Testing it
  • Proving it
  • Optimising it if necessary

They’re all key skills required to be able to “code”.

 

AN ALGORITHM CAN BE WRITTEN COMPARATIVELY QUICKLY

Its common for developers to be set 1 algorithmic puzzle per 15 minutes, with taking up to 30 minutes to complete not being considered an automatic rejection.

 

So there you have it, for as long as a more reliable, less time-intensive form of testing a candidate’s development skills is unforthcoming, the algorithm-based technical test will continue to form a common stage of a developer’s interview.