class HELLO_WORLD create make feature make do print ("Hello, World!%N") end end
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).
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.
Exceptions in Eiffel are handled using the 'rescue' clause. The 'rescue' clause contains the code to be executed when an exception occurs.
'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.
The 'deferred' keyword is used to declare a class or method that is not fully implemented and must be implemented in a subclass.
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.
The basic principles of Eiffel are Design by Contract, Multiple Inheritance, Genericity, Uniform Access, and Agent Oriented Programming.
Readability is important for maintainability and collaboration. Eiffel's syntax encourages clean, readable code.
Generic classes are a key feature of Eiffel that allow for code reuse and type safety.
Multiple inheritance is a powerful feature of Eiffel that allows for more flexible and reusable code.
Exception handling is a key part of robust software development, and Eiffel has its own unique approach to it.
Eiffel is an object-oriented language, so experience with its OOP features is important for building complex applications.
This is a fundamental concept in Eiffel programming and a good understanding of it is crucial for effective development.
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.
Genericity in Eiffel is used to create classes that can operate on data of any type. It is implemented using the 'like' keyword.
'Expanded' types are value types that are stored directly, while 'reference' types are stored as references to the actual data.
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.
Multiple inheritance in Eiffel is implemented using the 'inherit' keyword followed by the names of the classes to be inherited.
Design by Contract provides a clear specification of the software, improves software correctness, simplifies debugging, and enhances software documentation.
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.
class HELLO_WORLD create make feature make do print ("Hello, World!%N") end end
class INTEGER_DEMO create make feature make local i, j: INTEGER do i := 5 j := 10 print (i + j) end end
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
class THREAD_DEMO create make feature make local t: THREAD do create t.make agent print ("Hello, World!%N") t.launch end end
class PERSON feature name: STRING age: INTEGER end class STUDENT inherit PERSON feature grade: INTEGER end
class ADVANCED_DEMO create make feature make local p: POINTER do p := {PERSON}.name print (p) end end
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.
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.
'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.
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.
Agent-oriented programming in Eiffel is implemented using the 'agent' keyword to create objects that encapsulate actions.
The Uniform Access Principle enhances encapsulation, improves code readability, and simplifies code maintenance.
Back-end App Developer
Front-end Web Developer
Full Stack Developer (Java)
Full Stack Developer (.Net)
Full Stack Developer (MEAN)
Full Stack Developer (MERN)
DevOps Engineer
Database Engineer (AzureSQL)
Database Engineer (Oracle)
Database Engineer (General)
Solution Architect (.NET)
Solution Architect (Java)
Solution Architect (Ruby)
Solution Architect (Python)
AI Engineer (Python)
Sr. AI Engineer (Python)
AI Strategist (Python)
Business Intelligence Engineer
Systems Analyst
Mainframe Developer (COBOL)
Mainframe Developer (General)