Hiring guide for Self Engineers

Self Developer Hiring Guide

Self is an object-oriented programming language that was developed in the late 1980s as an experimental prototype-based language. It was designed for expressive power and malleability, with a focus on simplicity and uniformity. Self is based on the concept of prototypes rather than classes, meaning that objects can inherit directly from other objects, rather than from a class structure. This allows for more flexibility and dynamism in creating and modifying object behaviors. Self also introduced the concept of just-in-time compilation (JIT), which significantly improves the performance of object-oriented languages. It has had a significant influence on the development of JavaScript, NewtonScript and Io programming languages.

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

First 20 minutes

General Self app knowledge and experience

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

How would you describe Self's prototyping feature?
Self's prototyping feature allows objects to inherit properties and behaviors directly from other objects, this is known as prototype-based programming. It allows for more dynamic and flexible coding.
What are the main components of Self language?
The main components of Self include objects, messages, slots, and blocks. Objects are the basic units, messages are the means of communication, slots hold state or behavior, and blocks are objects containing code.
Describe the difference between class-based and prototype-based languages.
Class-based languages define a blueprint (class) for creating objects while prototype-based languages, like Self, create new objects by cloning existing objects (prototypes) and potentially modifying the clone.
Can you explain how messaging works in Self?
In Self, a message is sent to an object, which then responds based on its programming. If the object does not have a method for handling the message, it is passed up the prototype chain until it is handled or an error is thrown.
What is the role of slots in Self language?
Slots in Self serve as object attributes. They can contain data or methods. When a message is sent to an object, the object checks its slots to determine how to respond.
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 the Self programming language?
How well does the candidate understand software development methodologies?
Does the candidate have problem-solving skills?
Can the candidate communicate effectively?

Next 20 minutes

Specific Self 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 Self?
Self handles errors through the use of exceptions. When an error occurs, an exception can be thrown and then caught and handled elsewhere in the program.
What is the concept of 'resends' in Self?
'Resends' in Self is a concept where a method in an object sends a message to its parent object. This allows for code reuse and behavior modification in a flexible manner.
Can you explain how garbage collection works in Self?
Garbage collection in Self is done automatically by the environment. It locates and frees up memory that is no longer in use by the program, allowing for efficient management of resources.
How would you use Self for creating UI?
Self has a built-in Morphic system which allows developers to create interactive graphical applications. It uses a prototype-based approach, where UI elements are created by cloning and modifying existing prototypes.
What is the purpose of 'traits' in Self?
'Traits' in Self are used to share behavior among multiple objects. They act like abstract classes in class-based languages, providing a set of methods that can be reused by any object.
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 Self engineer at this point.

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

What does this code snippet do?
{ 'name': 'John', 'age': 30, 'city': 'New York' }
This code snippet represents a JSON object with the properties 'name', 'age', and 'city', with respective values 'John', 30, and 'New York'.
What will be the output of the following code?
let data = JSON.parse('{ 
   "name":"John", 
   "age":30, 
   "city":"New York" 
 }'); 
 console.log(data.name);
The output will be 'John'. The code parses a JSON string into a JavaScript object, and then logs the 'name' property of the object.
What does the following code snippet do?
let arr = [ 'John', 'Jane', 'Sue' ]; 
 let json = JSON.stringify(arr);
This code snippet converts a JavaScript array into a JSON string using the JSON.stringify method.
What will be the output of the following code?
let person = { 
   'name': 'John', 
   'age': 30, 
   'city': 'New York' 
 }; 
 let json = JSON.stringify(person, null, 2); 
 console.log(json);
The output will be a pretty-printed JSON string representation of the 'person' object. The 'null' and '2' arguments in the JSON.stringify method are used for replacing values and adding white space to improve readability.

Wrap-up questions

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

How would you optimize a Self program for better performance?
Self programs can be optimized by using efficient data structures, reducing message sends, using slots effectively, and taking advantage of the Self environment's built-in optimization techniques.
What is the role of the Self Virtual Machine?
The Self Virtual Machine (VM) is the runtime environment for Self programs. It handles tasks such as executing code, managing memory, and optimizing performance.
How would you implement concurrency in Self?
Concurrency in Self can be achieved using threads. Self has a cooperative threading model, where threads must manually yield control to allow other threads to run.

Self application related

Product Perfect's Self development capabilities

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