1 — Your Favorite Programming Language

Due Sunday, 17 January, midnight

The assignment consists of two related tasks. The objective is to decide which programming language you wish to use for the semester project. To give you an idea of how this may play out in the real world, the first task sketches out a scenario distilled from a real-life anecdote of a Software-Development graduate. It was her first task to write such a memo and she did so well that she is now on the list of 20 most influential women in IT.

You may wish to study the second task and factor the experience into the decision you must make for the first task.

Task 1 Your group is to implement a project from scratch for a new customer. The project has no connection to any pieces of the existing code base in your company, meaning you are free to choose whatever programming language and programming IDE you wish to use.

Here are the constraints that your manager has spelled out. The chosen language must come with support for
  • modularity (packages, modules, functors, units);

  • automatic unit testing (often called xyzUnit, after the original sUnit);

  • reading and writing JSON, S-expressions, or XML;

  • dealing with tcp/ip sockets;

  • constructing graphical user interfaces.

The IDE should make it easy to write exploratory code. In addition, the language must satisfy two deployment constraints:
  • the code will be deployed on the Linux lab machines of the College of Computer Science (think of it as the first customer), and

  • the code should run without any real changes on your own computer/OS as well so that you have a proprietary development machine.

Your task is to make the choice, justify it, and write a draft memo for your manager that spells out the justification.

Formality Address your memo to your manager’s manager, a powersuit-wearing woman who hardly ever shows up in the office. Use your own names in the "from" field of the memo; you know that your lazy-bum manager will change it to his name before he passes it on. The subject is "programming language choice for super-hot project."

Format Your memo is not to exceed a single page (letter format, 11pt font, 16pt base line, 1.5in margin all around), including the memo header. Your grade will depend on the memo format, its English correctness (style, grammar, organization), and the content.

Delivery Deposit your memo at the appropriate place in your College github account and name it our-teenage-heartbreak-language.pdf.

Task 2 The new product is a test bed for simulating a widely popular card game, 6 Nimmt!, which your company released and for which it receives numerous inquiries concerning strategy.

At a minimum, the simulation must comprise the following three components:
  • a dealer component, which manages the game, especially the rounds and turns;

  • a player component, which uses some strategy to decide which cards to play per turn and which stack to pick up when necessary;

  • the main program, which combines a dealer with some number of players to run complete game simulation.

    The main program retrieves a natural number n from the command line, instantiates the player component n times, links them with an instance of the dealer component, and then asks the dealer to simulate one complete game. When the game is over, it system displays the results of the game on standard out.

Eventually someone will plug in a number of distinct player implementations that pursue different strategies and to translate the results of these simulations into hints for real-world players.

An off-shore subsidiary located in Foomanistan will implement the player component. Initially this subsidiary will deliver one prototype player that your team can plug into the system.

Your task is to specify the interface between the player component and the rest of the system. You may assume that all components are written in the same programming language and linked statically. You may also assume that the players will play by the rules (the programmers in Foomanistan are really that good).

Format If your chosen programming language is sufficiently expressive, you may use it to formulate the interface. Alternatively, you may also use plain English to articulate your design. In all likelihood, you will use a mix of English and programming elements.

Delivery Deposit a plain text file in your College github account and name it player-interface.txt.