Hiring guide for Smalltalk Engineers

Smalltalk Developer Hiring Guide

Smalltalk is an object-oriented, dynamically typed, and reflective programming language. It was created as the language to underpin the "new world" of computing exemplified by human-computer interaction. Smalltalk's design principle revolves around simplicity and uniformity; everything in Smalltalk is an object from integers to classes themselves that can receive messages, process them, and send them to other objects. The language was developed at Xerox PARC in the 1970s by Alan Kay, Dan Ingalls, Adele Goldberg among others. Its development was influenced by the idea of a computer program as a network of communicating objects. One unique feature about Smalltalk is its development environment which provides numerous tools such as an integrated debugger and a class browser not typically available with other languages. The syntax is quite simple and small enough that it could fit on a postcard. Smalltalk has been influential in inspiring or directly influencing many later languages including Python, Ruby, Objective-C etc., but despite its influence it hasn't gained widespread commercial use due primarily to performance issues compared with more low-level languages like C++.

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

First 20 minutes

General Smalltalk app knowledge and experience

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

How would you define Smalltalk?
Smalltalk is an object-oriented, dynamically typed, reflective programming language. It was created as the language to underpin the 'new world' of computing exemplified by 'human–computer symbiosis'.
What are the key features of Smalltalk?
Key features of Smalltalk include: everything is an object, classes and methods are objects, every operation is a message send, it supports dynamic typing, and it has automatic garbage collection.
Describe the difference between instance variables and class variables in Smalltalk.
Instance variables are specific to each instance of a class, while class variables are shared across all instances of a class. This means that changing a class variable will affect all instances of that class.
How would you create a new class in Smalltalk?
You can create a new class in Smalltalk using the ClassBuilder class. For example: 'ClassBuilder new subclass: #MyClass of: Object instanceVariableNames: 'var1 var2' classVariableNames: 'Var3 Var4' poolDictionaries: '' category: 'MyCategory'.
What are blocks in Smalltalk?
Blocks in Smalltalk are objects that contain code. They are similar to lambdas or closures in other languages. They can be assigned to variables, passed as arguments to methods, and can also have local variables.
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 solid understanding of Smalltalk syntax and semantics?
Has the candidate demonstrated problem-solving skills?
Is the candidate familiar with the Smalltalk development environment?
Can the candidate effectively communicate their thought process and reasoning?

Next 20 minutes

Specific Smalltalk 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 use a block in Smalltalk?
You can use a block in Smalltalk by enclosing the code in square brackets. For example: '[1 to: 10 do: [:i | Transcript show: i printString; cr]] value' will print the numbers 1 to 10.
Describe the difference between a binary message and a keyword message in Smalltalk.
Binary messages in Smalltalk are messages that take one argument and are usually used for arithmetic operations, like '+', '-', '*', '/'. Keyword messages can take one or more arguments and are identified by the colon (:) in their name.
What is the purpose of the doesNotUnderstand: method in Smalltalk?
The doesNotUnderstand: method in Smalltalk is a method that gets called when an object receives a message that it doesn't understand, i.e., there's no corresponding method in the object's class or superclasses. This can be used for error handling or for creating proxies.
How would you handle exceptions in Smalltalk?
You can handle exceptions in Smalltalk using the on:do: method. For example: '[...code...] on: Error do: [:ex | ...handle exception...]' will catch any Error exceptions and pass them to the block for handling.
What is metaclass in Smalltalk?
A metaclass in Smalltalk is a class that defines the behavior of a class object. Every class in Smalltalk has a corresponding metaclass.
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 Smalltalk engineer at this point.

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

What does this simple Smalltalk code do?
Transcript show: 'Hello, World!'.
This code prints the string 'Hello, World!' to the Transcript, which is Smalltalk's equivalent of a console or standard output.
What will be the output of this Smalltalk code?
5 factorial.
This code calculates the factorial of 5. The output will be 120.
What does this Smalltalk code do with the array?
| array |
array := #(1 2 3 4 5).
array do: [:each | Transcript show: each printString; cr].
This code creates an array with the elements 1 to 5. It then iterates over each element in the array, printing each element to the Transcript on a new line.
What does this Smalltalk code do related to threading?
[Transcript show: 'Hello, World!'] fork.
This code creates a new process (or thread) that prints 'Hello, World!' to the Transcript. The 'fork' message starts the new process.

Wrap-up questions

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

How would you define a method in Smalltalk?
You can define a method in Smalltalk in the class definition. For example: 'MyClass >> myMethod [ ^'Hello, world!' ]' defines a method called myMethod in the class MyClass that returns the string 'Hello, world!'.
Describe the difference between shallow copy and deep copy in Smalltalk.
A shallow copy of an object in Smalltalk creates a new object with the same instance variables as the original, but both objects share the same references to other objects. A deep copy creates a new object and also creates copies of all objects referenced by the original object.
What are traits in Smalltalk?
Traits in Smalltalk are a way to reuse code across unrelated class hierarchies. They are similar to interfaces in other languages, but they can also provide default implementations.

Smalltalk application related

Product Perfect's Smalltalk development capabilities

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