Bookmarks

You haven't yet saved any bookmarks. To bookmark a post, just click .

  • Software Engineer (Language)

  • Software Engineer (Language)

    Full time, onsite or remote, multiple positions

    Do you love functional programming, language tool chains, or type systems?  Do you have significant experience programming in Elixir / Elixir or another functional language?  Shoreline is hiring Elixir focused software engineers to develop our ops language: a concise, natively distributed language for detecting system events, taking actions on compute resources, and permanently solving operational problems with automated bots.    

    What you'll be doing

    • Defining the ops language including syntax and semantics and implementing in Elixir.
    • Implementing the language's tool chain and standard library in Elixir.  
    • Working with others to develop the language's run time.  
    • Developing integrations including with shell and python.  
    • Working with others to develop a cloud components library including queues, auto scaling, and warm pool components.  

    You'll use standard software development best practices such as version control and participate in software development processes such as code and design reviews.  

    We pay competitively. While this position can be remote, you may be asked from time to time to travel to and work from the main office located in Redwood City, CA.

    What you should have

    • Two or more years of experience with Elixir / Erlang & OTP or another functional language such as Haskell, OCaml, or a Lisp.
    • A love of functional data structures, algorithms, and immutability.  
    • Care about aesthetics such as code syntax and quality.
    • Verbal and written English fluency.
    • Competency with version control and writing tests.  

    Bonus Points

    • Deep knowledge of Erlang's VM, BEAM.  
    • Experience with DevOps including debugging production systems.  
    • Experience working with one or platforms including AWS, GCP, Azure, VMware, and/or Kubernetes.
    • A love of language design & implementation and an understanding of language tool chain such as lexing, parsing, type checking, and planning.  

    How To Apply

    If interested, please design and implement a solution to the following problem. Email the solution (attach or include link to repo/gist) and a resume to jobs@shorelinesoftware.com. Please include "Software Engineer - Language" in the subject of your email.

    Alternatively, you can apply directly on our job board.

    The following problem must be completed in a functional programming language. Preferably Elixir / Erlang, but other languages such as Haskell, OCaml or a lisp are acceptable as well.  Please include a suite of tests along with your solution to demonstrate correctness.  

    Problem

    We are building a social network.  In this social network, each user has friends.

    A chain of friends between two users, user A and user B, is a sequence of users starting with A and ending with B, such that for each user in the chain, ua, the subsequent user, ua + 1, are friends.

    Given a social network and two users, user A and user B, please write a function that computes the length of the shortest chain of friends between A and B.

    Please write answers to the following discussion questions and include them in your solution as comments:

    1. How did you represent the social network?  Why did you choose this representation?
    2. What algorithm did you use to compute the shortest chain of friends?  What alternatives did you consider?  Why did you choose this algorithm over the alternatives?
    3. Please enumerate the test cases you considered and explain their relevance.

    We will evaluate your solution and test suite for correctness, simplicity, clarity, and robustness.

    If you have any clarifying questions, please email: jobs@shorelinesoftware.com

    Interview Process

    1. Submit your solution and resume to jobs@shorelinesoftware.com
    2. Informational phone screen where we can get to know each other, ask/answer any questions, and evaluate fit (0.5hr).  
    3. Technical phone screen with live coding (1hr).
    4. Final round of technical interviews with the team, live coding and other questions (~4hrs).  

    We will get back to you promptly after each step in the process.