Question 1: There are a range of issues to consider when developing multi-threaded applications in an imperative programming language such as Ada, C++ or Java. In particular, a programmer should be aware of those issues that can either result in the failure of the system or a system so degraded that it is not fit for purpose. Discuss these issues suggesting where possible, solutions to each problem that you describe.
In the discussion of these issues illustrate where appropriate, how features in an imperative programming language can help the programmer overcome these issues.
Question 2: The programming language Scala has been described as a possible successor to Java. Critically comment on this statement carefully justifying each point that you make in your answer. Remember to include arguments against as well as arguments for in your answer. In your answer specifically consider the developments in computer architecture (multiple cores on commodity PC's) that have occurred since the introduction of Java in 1995.
Question 3: Discuss in depth with critical comment the different issues and implementation choices for creating solutions that involve a client server architecture.