Hiring guide for Emacs Lisp+++ Engineers

Emacs Lisp+++ Developer Hiring Guide

Emacs Lisp+++ is an advanced version of the Emacs Lisp programming language, primarily used for extending the functionality of the GNU Emacs text editor. Originating from MIT's AI Lab in the late 1970s, it was developed under Richard Stallman as a part of his GNU project. The '+++' denotes enhancements and improvements over its predecessor, offering more features and capabilities. It is known for its flexibility and power in manipulating Emacs software or implementing new functionalities. This high-level language has been instrumental in shaping modern integrated development environments (IDEs).

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 is the use of the 'setq' function in Emacs Lisp?
'setq' is used to set the value of a variable. It is short for 'set quoted' and is used to avoid evaluating the variable name.
How would you define a function in Emacs Lisp?
Functions in Emacs Lisp are defined using the 'defun' keyword. The basic syntax is '(defun function-name (arguments) "documentation" (interactive) body)'.
What are some common data types in Emacs Lisp?
Emacs Lisp has several data types including integers, floating-point numbers, symbols, cons cells, lists, vectors, hash-tables, and strings.
How would you create a list in Emacs Lisp?
You can create a list in Emacs Lisp using the 'list' function. For example, '(list 'apple 'banana 'cherry)'.
What is the purpose of the 'car' and 'cdr' functions in Emacs Lisp?
'car' and 'cdr' are used to access elements of a list. 'car' returns the first element of the list, while 'cdr' returns all elements except the first.
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 strong understanding of Emacs Lisp+++ and its features?
How comfortable is the candidate with functional programming concepts?
Can the candidate solve complex problems using Emacs Lisp+++?
Is the candidate familiar with Emacs text editor and its environment?

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.

Describe the difference between 'let' and 'let*' in Emacs Lisp.
'let' and 'let*' are used to bind variables. The difference is that 'let*' evaluates and binds the variables in sequence, allowing each binding to see the ones before it, while 'let' does not.
How would you use '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. For example, '(mapcar 'car '((a b) (c d) (e f)))' would return '(a c e)'.
What is the use of 'lambda' in Emacs Lisp?
'lambda' in Emacs Lisp is used to create anonymous functions. These are functions that are not bound to a name.
What is the purpose of the 'cond' function in Emacs Lisp?
'cond' is a conditional function in Emacs Lisp. It evaluates each condition in turn and returns the result of the first condition that is non-nil.
How would you handle errors in Emacs Lisp?
Errors in Emacs Lisp can be handled using the 'condition-case' function. It allows you to specify a block of code to execute in the event of a specific error.
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?
(setq x '(1 2 3))
This code sets the variable 'x' to the list '(1 2 3).'
What will be the output of this Emacs Lisp code?
(if (> 5 3) 'yes 'no)
The output will be 'yes'. The if function evaluates the condition (> 5 3), and since it is true, it returns the first result, 'yes'.
What does this Emacs Lisp code do, which is related to array or collection manipulation?
(mapcar #'(lambda (x) (* x x)) '(1 2 3 4 5))
This code squares each element in the list '(1 2 3 4 5)'. The mapcar function applies the lambda function to each element of the list.
What will be the output of this Emacs Lisp code related to threading or concurrency?
(defun async-sqrt (n) (make-thread (lambda () (sqrt n))))
This code defines an asynchronous function that calculates the square root of a number. The function creates a new thread to perform the calculation. The output will be a thread object.

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 constructs and computations that are done at compile time. You can define a macro using the 'defmacro' keyword.
How would you implement recursion in Emacs Lisp?
Recursion in Emacs Lisp can be implemented by having a function call itself. Care must be taken to ensure that the recursion terminates, otherwise it can result in a stack overflow.
Describe the difference between 'eq', 'eql', 'equal', and 'equalp' in Emacs Lisp.
These are all comparison functions in Emacs Lisp. 'eq' tests if two objects are the same, 'eql' tests for same value and type, 'equal' tests for structural equality, and 'equalp' tests for equality, ignoring differences in case and precision.

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.