Assignment 1 – Form a team, write a memo and a first attempt to design
1 The team
2 The memo
3 And the design attempt

Assignment 1 – Form a team, write a memo and a first attempt to design

Due Thursday 10/3 11:59pm for the first task, Sunday 10/6 11:59pm for the second one, and Monday 9/30 11:59pm for bonus points for the third one.

Follow the instructions for the deliverables to the letter, otherwise our scripts may not be able to find your submissions.

1 The team

Your first task is to find a partner and form a team.

Deliverables: Send one email per team to Christos cc’ing Lukas with the title "Our Team for Software Construction Fall19". The email’s body should have exactly two lines, one per member of your team. Each line should be of the form "Y" "X" Z where Y is your last name, X is your first name and Z is your github id.

2 The memo

Your second task is to write an 1-page memo to justify the selection of the language your team will work with for the rest of the quarter. It is always a wise choice to pick a language you already know well and you are confident that it is a good fit for the project you are working on. What you know at this point is that the project demands: (i) support for running programs on the school’s lab machines (UNIX) and your laptops from the command line with a single command without code changes; (ii) support for UNIX-style STDIN, standard I/O and TCP/IP sockets; (iii) modular programming (think modules, functors, packages etc.); (iv) reading and writing JSON; (v) loading code dynamically; (vi) automatic unit testing and test coverage and (vii) an IDE with support for exploratory programming. Your memo should justify your choice of language given these requirements. For instance, if you claim that your language supports JSON processing through a library, you have to provide the name library. The title of the memo should be "This is why I commit to X and rely on it to help me succeed." where X is the name of your language of choice.

Deliverables: In your team’s GitHub repository, first create a directory named "Deliverables" and then inside it create another directory named "1". Finally create inside "1" a directory "1.2" and place there a PDF named "memo.pdf".

3 And the design attempt

Your third task is to design the interface between two components of a simple software system. The system consists of a front-end service that accepts input from users and delegates its processing to a back-end service. In detail, the interraction between the two components goes as follows: (i) the front-end service reads JSON objects from STDIN; (ii) when the input is complete, the component divides the objects into lists of 10 and sends them (in the same order as they appear in the input) to the back-end service one by one; (iv) the back-end service receives each list, sorts it and returns it back to the front-end service before receiving the next list; (v) after the client-service receives the last sorted list, it prints all the lists to STDOUT as an array of sorted arrays of JSON objects. The interface between the two components should describe (i) what operations they offer to each other; (ii) what are the expectations of each component for the arguments and results of these operations; (iii) any other relevant information that is necessary for describing i and ii; and (iv) which component controls what part of this information.

Deliverables: In your team’s GitHub repository, in "Deliverables/1" create a directory "1.3" and place there a PDF named "interface.pdf".