HomeAboutSolutionsTechnologyCareersNews & EventsContact Us
Why Work at ITA Software

Search for Jobs:  
 

Operations Programmer

It takes hundreds of different applications running 24x7 across thousands of Linux hosts to provide ITA's custom software services to its customers. We are looking for software developers who have a passion for operational infrastructure and software automation, love Linux as a platform, and possess a desire to solve complex problems. Come join our small and agile software team.


Responsibilities:

  • Build and maintain software infrastructure used to automate and control many of the complex operational functions at ITA's data centers: monitoring, deployment, process wrangling, etc.
  • Help diagnose and debug problems as they arise.  Use these experiences to formulate new requirements and success criteria.  Improve the maintainability and sustain-ability of our production environments.
  • Join a small team of like-minded programmers, writing predominantly in *Python*.  Write software that solves not just the problem at hand,but does it robustly, and communicates intent through the code itself.
  • Address customer value, not requirements documents.  We need people who focus on solving problems and seeing them through, people who do not hide behind software specifications or weasel-words.  Knowing what *not* to write is just as important as what to write.
  • Develop and leverage an in-depth understanding of the challenges associated with building and maintaining complex, cloud-based services. Work with different internal teams to understand product domains.
  • Marry these understandings with strong software engineering fundamentals to provide best-in-class operational software automation.
  • Train downstream operations staff, including the production of documentation, diagrams, and other visualization tools.
  • Build upon your existing technical expertise and add to our increasing portfolio of knowledge.
  • Enjoy yourself as we build impactful software in an industry that affects millions every day.


Qualifications:

  • Demonstrable software design/programming experience for UNIX/Linux.
  • Significant python programming experience required, Twisted python desired, shell scripting mastery a plus.
  • Experience with operational software strongly desired.
  • Network and systems programming experience strongly desired.


Knowledge and Skills:

  • Network and systems programming in UNIX/Linux environments, experience with distributed software a plus.
  • Programming expertise in multiple languages: Python, PERL, C/C++, etc.
  • Strong problem solving skills in a collaborative but sometimes self-directed environment.
  • Strong written and verbal communication skills.

How to Apply
If you are interested in this position, please fill out an application/resume form. Then solve one of the puzzles below and send your solution to us via this link.


Puzzles:

Please select and solve one of the puzzles below to give us an idea of your problem-solving ability and coding style. Unless otherwise specified, you may use any freely-available language you like. Puzzles submitted in C++, Lisp, Python, Java or Perl will be reviewed most promptly, because those are the languages we use every day; if you choose another language, it may take us longer. No pseudo-code, please!

In your submission email, please include:

  • The title of the position that interests you
  • Your source code
  • Your program's final answer
  • A brief (1-2 paragraph) description of your approach
  • Any trade-offs you made (say, for generality, speed, or ease of implementation)
  • Instructions on how to test your program  

To ensure that your puzzle solution does not get caught in our mail filters, you should zip the source code file(s) and name the archive "Programming_Puzzle_Submission-NameofthePuzzleyouSolved" e.g. "Programming_Puzzle_Submission-RollYourOwnChatServer.zip".

 

 Roll Your Own Chat Server

Implement a simple standalone TCP-based chat server, using the following protocol:

The server responds to all commands with either:
    OK<CRLF>
or, when an error occurred, with:
    ERROR <reason><CRLF>

<CRLF> indicates the bytes '\r\n'.

Upon connecting to the server, the client sends:
    LOGIN <username><CRLF>
Clients can create new chatrooms or join existing chatrooms (chatrooms begin with the character '#') by doing:
    JOIN #<chatroom><CRLF>
Clients can leave chatrooms by sending:
    PART #<chatroom><CRLF>
Clients can be in multiple chatrooms at once.

Clients can send a message to a chatroom:

    MSG #<chatroom> <message-text><CRLF>

Clients can send a message to another user:
    MSG <username> <message-text><CRLF>
When a message is sent to a chatroom the user is in, the server sends to the appropriate client:
    GOTROOMMSG <sender> #<chatroom> <message-text><CRLF>








or if the message is sent directly from one user to another:
    GOTUSERMSG <sender> <message-text><CRLF>
Finally, the client can log off by sending:
    LOGOUT<CRLF>
Here's a transcript of a sample session where a user named "alice" joins a chatroom called #news after connecting. C indicates the line was sent by the client, S indicates it was sent by the server (end of line indicates CRLF was sent):
    C: LOGIN alice 
S: OK
C: JOIN #news
S: OK
C: MSG #news hi everyone
S: GOTROOMMSG bob #news nothing much happened after that
S: OK
S: GOTROOMMSG alice #news hi everyone
S: GOTUSERMSG carol hi alice, where've you been?
C: MSG carol on vacation
S: OK
C: LOGOUT
<server closes connection>
When implementing the server, aim for scalability and robustness. (Many submissions fail due to lack of robustness!) Your submission should include a description of the steps you took towards those two goals. Keep in mind that the client may be buggy, or even malicious. For example, if a client connects to the server and sends an infinite stream of the byte 'X' with no line break, the server should deal with this case gracefully. Please do not use an existing networking framework (e.g., Twisted or asyncore for Python, ACE for C++, etc.) to implement the server. The server should support running on Linux.


 

Don't see the perfect job for you?  Sign up for our RSS feed.

 

 

 

 

 
  Contact Us


See all jobs