Hiring guide for Eiffel Engineers

Eiffel Developer Hiring Guide

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).

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

First 20 minutes

General Eiffel app knowledge and experience

The first 20 minutes of the interview should seek to understand the candidate's general background in Eiffel application development, including their experience with various programming languages, databases, and their approach to designing scalable and maintainable systems.

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.
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 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.
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.
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.
The hiring guide has been successfully sent to your email address.
Oops! Something went wrong while submitting the form.

What you’re looking for early on

Does the candidate have a solid understanding of Eiffel's design by contract principle?
Has the candidate demonstrated experience with Eiffel's object-oriented programming features?
Is the candidate familiar with Eiffel's exception handling mechanism?
Can the candidate effectively use Eiffel's multiple inheritance feature?

Next 20 minutes

Specific Eiffel development questions

The next 20 minutes of the interview should focus on the candidate's expertise with specific backend frameworks, their understanding of RESTful APIs, and their experience in handling data storage and retrieval efficiently.

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.
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 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.
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.
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.
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.

At this point, a skilled Eiffel engineer should demonstrate strong problem-solving abilities, proficiency in Eiffel programming language, and knowledge of software development methodologies. Red flags include lack of hands-on experience, inability to articulate complex concepts, or unfamiliarity with standard coding practices.

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.

Wrap-up questions

Final candidate for Eiffel Developer role questions

The final few questions should evaluate the candidate's teamwork, communication, and problem-solving skills. Additionally, assess their knowledge of microservices architecture, serverless computing, and how they handle Eiffel application deployments. Inquire about their experience in handling system failures and their approach to debugging and troubleshooting.

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.
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 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.

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.