Hiring guide for Common Lisp Engineers

Common Lisp Developer Hiring Guide

Common Lisp is a high-level, general-purpose programming language, first developed in the 1980s as a standardized version of Lisp, one of the oldest high-level programming languages. It was designed by a group of researchers led by Guy L. Steele Jr., who aimed to unify the diverse Lisp dialects into a single language. The language is known for its flexibility, allowing programmers to choose the best approach for their specific task, whether it's procedural, functional, or object-oriented. It has been widely used in artificial intelligence research and continues to be popular in academia and industry. The development and standardization of Common Lisp are documented in Steele's book, "Common Lisp the Language" and the ANSI Common Lisp standard.

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

First 20 minutes

General Common Lisp app knowledge and experience

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

What are the basic data types in Common Lisp?
Common Lisp has several basic data types, including: integers, floating-point numbers, characters, symbols, cons cells, arrays, hash-tables, structures, and functions.
How would you define a function in Common Lisp?
You can define a function in Common Lisp using the DEFUN macro. For example: (defun function-name (parameters) function-body)
What is the purpose of the 'let' construct in Common Lisp?
'let' is used to create local variables in Common Lisp. It allows you to bind variables to values for the duration of the body of the 'let' construct.
Describe the difference between 'eq', 'eql', 'equal', and 'equalp' in Common Lisp.
'eq' tests if two items are the same object, 'eql' tests for the same object or equal numbers/characters, 'equal' tests for structurally similar objects, and 'equalp' tests for structurally similar objects with type conversion.
How would you implement recursion in Common Lisp?
Recursion in Common Lisp is implemented by having a function call itself. The function must have a condition to stop the recursion to avoid infinite loops.
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 show a strong understanding of Common Lisp's syntax and semantics?
How well does the candidate understand and use data structures and algorithms in Common Lisp?
Is the candidate familiar with the Lisp ecosystem and libraries?
Can the candidate effectively debug and optimize Common Lisp code?

Next 20 minutes

Specific Common Lisp 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 macros in Common Lisp and how do they differ from functions?
Macros in Common Lisp are like functions, but they operate on the code itself at compile time, not on the runtime values. This allows for code generation and transformation before execution.
How would you handle exceptions in Common Lisp?
Exceptions in Common Lisp are handled using the 'condition' system. You can use the 'handler-case' or 'handler-bind' forms to catch and handle exceptions.
What is the Common Lisp Object System (CLOS) and what features does it provide?
CLOS is the object-oriented programming system in Common Lisp. It provides features like multiple inheritance, multimethods with multiple dispatch, and method combination.
How would you create a class and an instance of a class in Common Lisp?
You can create a class using the 'defclass' macro and an instance using the 'make-instance' function. For example: (defclass class-name (superclasses) (slots)) and (make-instance 'class-name).
Describe the difference between 'progn' and 'prog1' in Common Lisp.
'progn' and 'prog1' both execute a sequence of expressions, but 'progn' returns the value of the last expression, while 'prog1' returns the value of the first.
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 Common Lisp engineer at this point.

At this point, a skilled Common Lisp engineer should demonstrate strong problem-solving abilities, proficiency in Common Lisp 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 Common Lisp.

What does this simple Lisp code do?
(defun add-numbers (x y) (+ x y))
This code defines a function called 'add-numbers' that takes two arguments, 'x' and 'y', and returns their sum.
What does the 'let' keyword do in this Lisp code?
(let ((x 5) (y 10)) (+ x y))
'let' is used to bind variables. In this code, 'x' is assigned the value 5 and 'y' is assigned the value 10. Then, their sum is returned.
What will be the output of this Lisp code that manipulates a list?
(let ((my-list (list 1 2 3 4 5))) (append my-list (list 6 7 8 9 10)))
This code will output a list from 1 to 10. It first creates a list from 1 to 5, then appends another list from 6 to 10 to it.
What does this Lisp code do related to threading?
(bt:make-thread (lambda () (format t "Hello, World!")))
This code creates a new thread that prints 'Hello, World!' to the standard output. 'bt:make-thread' is a function from the Bordeaux Threads library for multithreading in Common Lisp.

Wrap-up questions

Final candidate for Common Lisp 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 Common Lisp application deployments. Inquire about their experience in handling system failures and their approach to debugging and troubleshooting.

What are the uses of the 'format' function in Common Lisp?
The 'format' function in Common Lisp is used for formatted output. It can output to a string, a stream, or the console, and it supports a wide variety of format directives.
How would you implement a loop that iterates over a list in Common Lisp?
You can use the 'dolist' macro to iterate over a list in Common Lisp. For example: (dolist (var list) body)
What is tail recursion in Common Lisp and why is it important?
Tail recursion in Common Lisp is when the recursive call is the last operation in the function. It's important because it can be optimized by the compiler to use constant stack space, preventing stack overflow.

Common Lisp application related

Product Perfect's Common Lisp development capabilities

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