Hiring guide for Emacs Lisp Engineers

Emacs Lisp Developer Hiring Guide

Emacs Lisp is a dialect of the Lisp programming language used as a scripting language by Emacs, a text editor family first developed in the mid-1970s by Richard Stallman. The primary purpose of Emacs Lisp is to customize and extend the functionality of Emacs. It was influenced by Maclisp, one of oldest member of lisp family and its development has been integral to GNU Project's mission for free software movement since 1985. Unlike many other languages, it was designed for interpretive use from inception due to its close integration with C-coded Emacs editing functions. Today, it remains an essential tool for programmers seeking extensible and customizable text editing capabilities.

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

First 20 minutes

General Emacs Lisp app knowledge and experience

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

How would you define a variable in Emacs Lisp?
You can define a variable in Emacs Lisp using the 'defvar' or 'setq' function. For example, '(defvar my-variable 10)' or '(setq my-variable 10)'.
What are the basic data types in Emacs Lisp?
The basic data types in Emacs Lisp include integers, floats, symbols, cons cells, strings, vectors, hash-tables, and functions.
How would you define a function in Emacs Lisp?
You can define a function in Emacs Lisp using the 'defun' keyword. For example, '(defun my-function (arg) (message "Hello, %s" arg))'.
What is the purpose of the 'car' and 'cdr' functions in Emacs Lisp?
'car' and 'cdr' are used to access the elements of a cons cell. 'car' returns the first element and 'cdr' returns the rest of the elements.
Describe the difference between 'let' and 'setq' in Emacs Lisp.
'let' is used to create local variables, while 'setq' is used to set the value of an existing variable. The scope of a variable defined with 'let' is limited to the 'let' expression.
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 demonstrate a deep understanding of Emacs Lisp?
How well does the candidate understand the Emacs ecosystem?
Is the candidate able to articulate complex Emacs Lisp concepts clearly?
Does the candidate have experience with other Lisp dialects?

Next 20 minutes

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

How would you handle errors in Emacs Lisp?
You can handle errors in Emacs Lisp using the 'condition-case' function. It allows you to catch and handle exceptions.
What are the different types of loops available in Emacs Lisp?
Emacs Lisp provides several types of loops including 'while', 'dolist', 'dotimes', and recursion.
How would you read and write files in Emacs Lisp?
You can read files using the 'insert-file-contents' function and write to files using the 'write-region' function.
Describe the difference between 'eq', 'eql', 'equal', and 'equalp' in Emacs Lisp.
'eq' tests if two symbols or cons cells are the same, 'eql' tests if two values are the same and of the same type, 'equal' tests if the structure of two values are the same, and 'equalp' does the same as 'equal' but ignores case for strings and considers numbers of different types to be equal if they represent the same numeric value.
How would you manipulate strings in Emacs Lisp?
Emacs Lisp provides several functions to manipulate strings, including 'concat' to concatenate strings, 'substring' to extract a substring, and 'string-match' to match a regular expression.
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 Emacs Lisp engineer at this point.

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

What does this simple Emacs Lisp code do?
(message "Hello, World!")
This code prints the string "Hello, World!" to the Emacs echo area, which is typically used for displaying messages.
What will be the output of this Emacs Lisp code?
(setq my-list '(1 2 3 4 5))
(car (cdr my-list))
The output of this code will be 2. The 'setq' function sets the value of 'my-list' to a list of numbers. The 'car' function returns the first element of a list, and the 'cdr' function returns a list that is a copy of the original list without the first element. So, '(car (cdr my-list))' returns the second element of 'my-list'.
What does this Emacs Lisp code do?
(mapcar 'sqrt '(1 4 9 16 25))
This code applies the 'sqrt' function to each element of the list '(1 4 9 16 25)', and returns a new list with the results. So, the output will be a list of the square roots of the original list's elements: '(1 2 3 4 5)'.
What does this Emacs Lisp code do?
(defun async-sqrt (n callback)
  (run-at-time 1 nil (lambda () (funcall callback (sqrt n)))))
This code defines an asynchronous function 'async-sqrt' that calculates the square root of a number 'n' after a delay of 1 second, and then calls a callback function with the result. 'run-at-time' is used to schedule the calculation, and 'funcall' is used to call the callback function with the result.

Wrap-up questions

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

What are macros in Emacs Lisp and how would you define one?
Macros in Emacs Lisp are a way to define new control structures or other language features. You can define a macro using the 'defmacro' keyword.
How would you interact with the operating system in Emacs Lisp?
You can interact with the operating system using functions like 'shell-command', which runs a shell command, or 'start-process', which starts a new process.
Describe the difference between 'load', 'require', and 'autoload' in Emacs Lisp.
'load' reads and evaluates a file, 'require' does the same but checks if the module is already loaded, and 'autoload' only loads the file when a certain function is called.

Emacs Lisp application related

Product Perfect's Emacs Lisp development capabilities

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