Hiring guide for Viper Engineers

Viper Developer Hiring Guide

Viper is a programming language developed specifically for Ethereum, a blockchain-based platform. It is designed to be simple, secure, and auditable with Python-like syntax. Viper makes it easier to write smart contracts on the Ethereum platform by providing developers with better control over the execution of their code. Unlike other Ethereum languages like Solidity, Viper doesn't have class inheritance or function overloading features which make it less prone to errors and more efficient. Additionally, its ability to handle static types and fixed point decimal numbers enhances its overall performance in contract development.

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

First 20 minutes

General Viper app knowledge and experience

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

How would you explain the role of a presenter in the VIPER architecture?
The presenter acts as the middleman between the view and the interactor. It receives user actions from the view, processes them, and updates the view with the new data from the interactor.
What are the key components of VIPER architecture?
The key components of VIPER architecture are View, Interactor, Presenter, Entity, and Router.
Describe the difference between MVC and VIPER architecture.
MVC is a design pattern where the application is divided into Model, View, and Controller. In contrast, VIPER is an architecture pattern that stands for View, Interactor, Presenter, Entity, and Router, providing a more structured and clear division of code responsibility.
How would you handle a situation where you need to share data between two modules in VIPER?
Data sharing between two modules in VIPER can be handled by creating a data store or a service that can be accessed by both modules. This service can be injected into the modules as needed.
What is the role of the Router in VIPER architecture?
The Router in VIPER architecture is responsible for navigation between screens. It encapsulates the logic related to the creation of view controllers and their stack.
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

Do they have a solid understanding of Viper's architecture and principles?
Have they demonstrated a capacity for problem-solving using Viper?
Can the candidate provide examples of past Viper projects?
Are they updated with the latest changes and updates in the Viper language?

Next 20 minutes

Specific Viper 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 test a VIPER module?
Testing a VIPER module involves creating unit tests for each component of the module. For example, testing the Presenter would involve checking if it correctly calls the Interactor and updates the View.
What is the role of the Interactor in VIPER architecture?
The Interactor in VIPER architecture contains the business logic as specified by a use case. It manipulates Entities and communicates with the Presenter.
How would you handle a situation where you need to use the same Interactor in multiple modules?
In such a situation, I would create a shared service that encapsulates the shared functionality and inject this service into the Interactors of the modules that need it.
What is the role of the Entity in VIPER architecture?
The Entity in VIPER architecture represents the basic model objects used by the Interactor. It encapsulates the data and their manipulations.
How would you handle complex navigation logic in VIPER?
Complex navigation logic in VIPER can be handled by creating a separate Router for each flow of screens. These Routers can then be coordinated by a parent Router.
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 Viper engineer at this point.

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

What does the following simple Viper code do?
x: int128 = 10
y: int128 = 20
z: int128 = x + y
The code declares three variables x, y, and z. It assigns the values 10 and 20 to x and y respectively. Then, it adds the values of x and y and assigns the result to z.
What will be the output of the following Viper code?
@public
def foo() -> int128:
    return 100
@public
def bar() -> int128:
    return self.foo()
The code defines two public functions foo and bar. Function foo returns the integer 100. Function bar calls foo and returns its result. Therefore, calling bar will return 100.
What does the following Viper code do that is related to array manipulation?
@public
def push(arr: int128[5], value: int128) -> int128[5]:
    arr[4] = value
    return arr
The code defines a public function push that takes an array of five integers and a value as parameters. It assigns the value to the fifth element of the array and then returns the array.
What does the following Viper code do that is related to threading or concurrency?
@public
def foo():
    self.storage_var = 100
@public
def bar():
    self.storage_var = 200
The code defines two public functions foo and bar. Both functions modify the same state variable storage_var. This could lead to race conditions if both functions are called concurrently.

Wrap-up questions

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

What are the advantages of using VIPER architecture?
VIPER architecture offers advantages like clear separation of concerns, improved testability, and easier management of complex projects by breaking them down into distinct modules.
How would you refactor a large MVC project to VIPER?
Refactoring a large MVC project to VIPER would involve breaking down the project into distinct modules, each with its own View, Interactor, Presenter, Entity, and Router. This process should be done incrementally to avoid introducing bugs.
Describe the difference between VIPER and MVVM architecture.
While both VIPER and MVVM provide a clear separation of concerns, VIPER breaks down the application into more components, leading to a more modular structure. MVVM, on the other hand, has a simpler structure with fewer components.

Viper application related

Product Perfect's Viper development capabilities

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