Eiffel Developer Hiring Guide

Hiring Guide for Eiffel Engineers

Ask the right questions to secure the right Eiffel talent among an increasingly shrinking pool of talent.

The Eiffel programming language, developed in the 1980s by Bertrand Meyer at Eiffel Software, is an object-oriented language known for its strong emphasis on design by contract, simplicity, and reliability. It was named after the iconic French engineer Gustave Eiffel as a tribute to his emphasis on solid structural design. The language is recognized for its inherent support to develop high-quality software that is easy to maintain and adapt. Its key features include a clear syntax, powerful modularization facilities, and advanced run-time mechanisms. These attributes have made it an influential language in the software development community, despite not being as widely used as some other languages (source: "Eiffel: The Language" by Bertrand Meyer).

First 20 minutes

General Eiffel knowledge and experience

The next 20 minutes of the interview should attempt to focus more specifically on the development questions used, and the level of depth and skill the engineer possesses.

How would you handle exceptions in Eiffel?

Exceptions in Eiffel are handled using the 'rescue' clause. The 'rescue' clause contains the code to be executed when an exception occurs.

Describe the difference between 'once' and 'frozen' in Eiffel.

'Once' is used to ensure that a function or procedure is executed only once, while 'frozen' is used to prevent a class from being inherited.

What is the purpose of the 'deferred' keyword in Eiffel?

The 'deferred' keyword is used to declare a class or method that is not fully implemented and must be implemented in a subclass.

How would you define a class in Eiffel?

In Eiffel, a class is defined using the keyword 'class' followed by the class name. The class body is enclosed in 'feature' and 'end' keywords.

What are the basic principles of Eiffel?

The basic principles of Eiffel are Design by Contract, Multiple Inheritance, Genericity, Uniform Access, and Agent Oriented Programming.

The hiring guide has been successfully sent to your email address.
Oops! Something went wrong while submitting the form.

What youre looking for early-on

Has the candidate shown the ability to write clean, readable Eiffel code?

Readability is important for maintainability and collaboration. Eiffel's syntax encourages clean, readable code.

Does the candidate understand how to use Eiffel's generic classes?

Generic classes are a key feature of Eiffel that allow for code reuse and type safety.

Can the candidate effectively use Eiffel's multiple inheritance feature?

Multiple inheritance is a powerful feature of Eiffel that allows for more flexible and reusable code.

Is the candidate familiar with Eiffel's exception handling mechanism?

Exception handling is a key part of robust software development, and Eiffel has its own unique approach to it.

Has the candidate demonstrated experience with Eiffel's object-oriented programming features?

Eiffel is an object-oriented language, so experience with its OOP features is important for building complex applications.

Does the candidate have a solid understanding of Eiffel's design by contract principle?

This is a fundamental concept in Eiffel programming and a good understanding of it is crucial for effective development.

Next 20 minutes

Specific Eiffel development questions

The next 20 minutes of the interview should attempt to focus more specifically on the development questions used, and the level of depth and skill the engineer possesses.

How would you use genericity in Eiffel?

Genericity in Eiffel is used to create classes that can operate on data of any type. It is implemented using the 'like' keyword.

Describe the difference between 'expanded' and 'reference' types in Eiffel.

'Expanded' types are value types that are stored directly, while 'reference' types are stored as references to the actual data.

What is the purpose of the 'check' instruction in Eiffel?

The 'check' instruction is used to assert a condition that must be true at a certain point in the program. If the condition is not true, an exception is raised.

How would you implement multiple inheritance in Eiffel?

Multiple inheritance in Eiffel is implemented using the 'inherit' keyword followed by the names of the classes to be inherited.

What are the benefits of using Design by Contract in Eiffel?

Design by Contract provides a clear specification of the software, improves software correctness, simplifies debugging, and enhances software documentation.

The hiring guide has been successfully sent to your email address.
Oops! Something went wrong while submitting the form.

The ideal back-end app developer

What you’re looking to see on the Eiffel engineer at this point.

A skilled Eiffel engineer should demonstrate strong proficiency in Eiffel programming, excellent problem-solving skills, and knowledge of software development principles. Red flags include lack of practical experience, inability to articulate complex concepts, or unfamiliarity with modern Eiffel tools and libraries.

Digging deeper

Code questions

These will help you see the candidate's real-world development capabilities with Eiffel.

What does the following Eiffel code do?

class HELLO_WORLD create make feature make do print ("Hello, World!%N") end end

This code prints 'Hello, World!' to the console. The 'make' feature is the constructor of the class, which is automatically called when an object of the class is created.

What will be the output of the following Eiffel code?

class INTEGER_DEMO create make feature make local i, j: INTEGER do i := 5 j := 10 print (i + j) end end

The output of the code will be 15. The code declares two local variables 'i' and 'j', assigns them the values 5 and 10 respectively, and then prints the sum of 'i' and 'j'.

What does the following Eiffel code do?

class ARRAY_DEMO create make feature make local arr: ARRAY [INTEGER] do create arr.make_filled (0, 1, 5) arr.put (10, 3) print (arr.item (3)) end end

This code creates an array 'arr' of integers, fills it with zeros, and then replaces the third element with 10. It then prints the third element of the array, which will be 10.

What does the following Eiffel code do?

class THREAD_DEMO create make feature make local t: THREAD do create t.make agent print ("Hello, World!%N") t.launch end end

This code creates a new thread 't' and assigns it a routine to print 'Hello, World!'. The 'launch' feature starts the execution of the thread.

What does the following Eiffel code do?

class PERSON feature name: STRING age: INTEGER end class STUDENT inherit PERSON feature grade: INTEGER end

This code defines a 'PERSON' class with features 'name' and 'age', and a 'STUDENT' class that inherits from 'PERSON' and adds a new feature 'grade'. An object of the 'STUDENT' class will have all three features: 'name', 'age', and 'grade'.

What will be the output of the following Eiffel code?

class ADVANCED_DEMO create make feature make local p: POINTER do p := {PERSON}.name print (p) end end

The code will output a memory address. It creates a pointer 'p' and assigns it the address of the 'name' feature of the 'PERSON' class, then prints the address stored in 'p'.

Wrap-up questions

Final candidate for Eiffel role questions

The final few interview questions for a Eiffel candidate should typically focus on a combination of technical skills, personal goals, growth potential, team dynamics, and company culture.

How would you optimize the performance of an Eiffel program?

Performance optimization in Eiffel can be achieved by using efficient algorithms and data structures, minimizing object creation, and using the 'inline' keyword to reduce function call overhead.

Describe the difference between 'invariant' and 'variant' in Eiffel.

'Invariant' is a condition that must always be true for an object, while 'variant' is a condition that must decrease each time a loop is executed.

What is the purpose of the 'obsolete' keyword in Eiffel?

The 'obsolete' keyword is used to mark a class or method that is no longer recommended for use, but is still available for backward compatibility.

How would you implement agent-oriented programming in Eiffel?

Agent-oriented programming in Eiffel is implemented using the 'agent' keyword to create objects that encapsulate actions.

What are the benefits of using the Uniform Access Principle in Eiffel?

The Uniform Access Principle enhances encapsulation, improves code readability, and simplifies code maintenance.

The hiring guide has been successfully sent to your email address.
Oops! Something went wrong while submitting the form.

Eiffel application related

Product Perfect's Eiffel development capabilities

Beyond hiring for your Eiffel engineering team, you may be in the market for additional help. Product Perfect provides seasoned expertise in Eiffel projects, and can engage in multiple capacities.