Hiring guide for Cello Engineers

Cello Developer Hiring Guide

The Cello computer software programming language is a high-level, object-oriented language introduced in 2013 by Daniel Holden. It was inspired by Python and C, aiming to provide the simplicity of Python with the efficiency and control of C (Holden, "Cello"). The key feature of this language is its ability to handle generic programming without losing type safety or requiring complex syntax. It also supports advanced features like garbage collection, exception handling and polymorphism ("Cello: High Level Programming in C"). Despite being relatively new compared to other languages, it has gained attention for its unique approach to combining high-level abstractions with low-level control.

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

First 20 minutes

General Cello app knowledge and experience

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

What is the primary use of Cello?
Cello is primarily used for generic data structures in C. It provides features like polymorphism, classes and exceptions.
How would you define a new type in Cello?
In Cello, you can define a new type using the 'new' function. For example, 'var x = new(String, "Hello, World!");' will create a new string type.
What are the primary data types in Cello?
Cello supports several data types including Int, Float, Bool, Char, String, List, Tuple, Dict, and File.
How would you handle exceptions in Cello?
Cello provides a 'try' and 'catch' mechanism for handling exceptions. You can use the 'try' function to encapsulate the code that might throw an exception and the 'catch' function to handle the exception.
Describe the difference between 'new' and 'construct' in Cello.
'new' and 'construct' are both used to create objects in Cello. However, 'new' allocates memory for the object and calls the constructor, while 'construct' only calls the constructor on an already allocated memory.
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 Cello's architecture and components?
Has the candidate demonstrated problem-solving skills during the technical assessment?
Is the candidate able to communicate their thought process and solutions effectively?
Has the candidate shown an ability to write clean, efficient, and maintainable code?

Next 20 minutes

Specific Cello 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 implement polymorphism in Cello?
In Cello, polymorphism is implemented using interfaces. You can define an interface with a set of functions and then implement those functions in your data type.
What is the purpose of 'var' in Cello?
'var' is a universal data type in Cello. It can hold any type of data and is used for creating generic data structures.
How would you create a list in Cello?
You can create a list in Cello using the 'list' function. For example, 'var x = list(Int, 1, 2, 3, 4);' will create a list of integers.
Describe the difference between 'del' and 'destruct' in Cello.
'del' and 'destruct' are both used to destroy objects in Cello. However, 'del' deallocates the memory for the object and calls the destructor, while 'destruct' only calls the destructor on an already allocated memory.
What are the main features of Cello?
Cello provides several features like generic data structures, polymorphism, garbage collection, exceptions, and constructors/destructors.
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 Cello engineer at this point.

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

What does the following simple Cello code do?
var(x, Int); set(x, $I(10)); show(x);
This code declares a variable 'x' of type 'Int', sets its value to 10, and then prints the value of 'x' to the console.
What will be the output of this Cello code?
var(x, Array); set(x, $A(Int, $I(1), $I(2), $I(3))); show(x);
This code creates an array 'x' of integers, sets its values to 1, 2, and 3, and then prints the array to the console. The output will be '[1, 2, 3]'.
What does the following Cello code do?
var(list, List); push(list, $I(1)); push(list, $I(2)); push(list, $I(3)); foreach(x, list) { show(x); }
This code creates a list, pushes the integers 1, 2, and 3 to the list, and then iterates over the list, printing each element to the console.
What does the following Cello code do?
var(m, Mutex); mutex_lock(m); mutex_unlock(m);
This code declares a Mutex 'm', locks the mutex, and then unlocks it. It's a basic example of using a mutex for thread synchronization in Cello.

Wrap-up questions

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

How would you implement garbage collection in Cello?
Cello provides a garbage collector that automatically frees unused memory. You can use the 'gc_start' function to start the garbage collector and the 'gc_stop' function to stop it.
Describe the difference between 'var' and 'type' in Cello.
'var' is a universal data type that can hold any type of data, while 'type' is used to define new data types in Cello.
How would you create a dictionary in Cello?
You can create a dictionary in Cello using the 'dict' function. For example, 'var x = dict(String, Int);' will create a dictionary with string keys and integer values.

Cello application related

Product Perfect's Cello development capabilities

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