Hiring guide for Emacs Lisp### Engineers

Emacs Lisp### Developer Hiring Guide

Emacs Lisp is a high-level, interpreted programming language that serves as an extension to the Emacs text editor, developed by Richard Stallman and Guy L. Steele Jr. in the mid-1980s. It is primarily used for implementing most of the editing functionality built into Emacs, the extensible, customizable, self-documenting real-time display editor. Its design is based on the Lisp programming language with extensions to support text editing. The language has been maintained by the GNU Project and its source code is freely available under GPL (GNU General Public License). The detailed documentation of Emacs Lisp can be found in "The GNU Emacs Lisp Reference Manual".

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.

What are the basic data types in Emacs Lisp?
There are several basic data types in Emacs Lisp, including: numbers, symbols, lists, arrays, strings, hash tables, and others.
How would you define a function in Emacs Lisp?
In Emacs Lisp, you define a function using the 'defun' keyword. For example, '(defun hello-world () (message "Hello, World"))' defines a function that prints 'Hello, World'.
What is the purpose of the 'setq' function in Emacs Lisp?
'setq' is used to set the value of a variable. For example, '(setq x 5)' sets the value of x to 5.
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 existing variables. Variables created with 'let' only exist within the scope of the 'let' block.
What are the uses of the 'car' and 'cdr' functions in Emacs Lisp?
'car' and 'cdr' are used to access the elements of a list. 'car' returns the first element of the list, while 'cdr' returns the rest of the list.
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 deep understanding of Emacs Lisp?
Has the candidate demonstrated the ability to solve complex problems?
Is the candidate familiar with the Emacs environment?
Can the candidate write clean, maintainable code?

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 create a lambda function in Emacs Lisp?
In Emacs Lisp, you can create a lambda function using the 'lambda' keyword. For example, '(lambda (x) (* x x))' creates a function that squares its argument.
What is the purpose of the 'mapcar' function in Emacs Lisp?
'mapcar' is a function that applies a given function to each element of a list and returns a list of the results. It is similar to the 'map' function in other programming languages.
How would you handle errors in Emacs Lisp?
In Emacs Lisp, you can handle errors using the 'condition-case' construct. This allows you to catch and handle errors in a controlled manner.
What is the difference between a major mode and a minor mode in Emacs?
Major modes are mutually exclusive and each buffer has exactly one. They define the basic editing behavior of Emacs. Minor modes, on the other hand, provide additional functionality and can be turned on and off individually.
How would you write a recursive function in Emacs Lisp?
Recursive functions in Emacs Lisp are written in the same way as in other languages. You define a base case, and then call the function itself in the recursive case. For example, a function to compute the factorial of a number could be written as '(defun factorial (n) (if (<= n 1) 1 (* n (factorial (- n 1)))))'.
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 message buffer.
What will be the output of the following Emacs Lisp code?
(setq my-list '(1 2 3 4 5))
(car my-list)
The output will be 1. The 'car' function returns the first element of a list.
What does the following Emacs Lisp code do?
(setq my-list '(1 2 3 4 5))
(mapcar (lambda (x) (* x x)) my-list)
This code squares each element in the list 'my-list'. The 'mapcar' function applies the lambda function to each element of the list.
What does the following Emacs Lisp code do?
(defun async-func (func)
  (run-at-time 0 nil func))
(async-func (lambda () (message "Hello, World!")))
This code defines an asynchronous function that executes the passed function after a delay of 0 seconds. It then calls this function with a lambda function that prints "Hello, World!".

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 is the purpose of the 'eval' function in Emacs Lisp?
'eval' is a function that takes a Lisp expression as an argument and evaluates it. This can be used to execute dynamically generated code.
How would you manipulate strings in Emacs Lisp?
Emacs Lisp provides a number of functions for manipulating strings, including 'concat' for concatenation, 'substring' for extracting substrings, and 'replace-regexp-in-string' for replacing parts of a string based on a regular expression.
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. They are defined using the 'defmacro' keyword. For example, '(defmacro unless (cond &rest body) `(if (not ,cond) (progn ,@body)))' defines a new 'unless' control structure.

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.