Internet Software Systems

About the Internet Computing Workshop

Introduction

There is a more formal statement of aims and objectives in the module description. The main aim is to help you to learn how to build internet software systems. This is much more than teaching you about programming languages. It's also much more than teaching you how to write Java programs or how to debug the programs that you have written.

To effectively build a software system you need to be able to analyse problems, build specifications, create architectural and detailed designs, show that the system that you have built meets the specification and many more things. This involves exploring alternatives, evaluating these alternatives and making rational decisions about which is most appropriate - not necessarily best in any absolute sense, but the most appropriate given the constraints and requirements that you have.

A lot of the skills you need are not even directly concerned with programming. For instance, you will need to learn how to find information and software, understand that software and how to install and use it, work to other people's specifications, work to standards, document your systems, designs and rationales.

There are a lot of skills and knowledge that you need to acquire in a fairly short time. Remember that at the end of this course you will have to undertake a large individual project!

One most important things to remember is that you do need to work hard but that you also need to work intelligently. You need to take advantage of all the help, advice and resources that are available. You need to keep on top of the work - programming is not something you can muddle through without understanding. Most importantly, you need to enjoy it!

Programming's hard

It isn't easy to learn to program. It's even harder to learn how to do it well. It isn't something that can be picked up quickly from books or that you can muddle through.

You really do have to both develop a sound understanding of the principles and then learn how to apply these principles to problems. This last part is time consuming. You need to work through problems, look at examples and get feedback on your attempts.

Clearly some people are more naturally talented than others but even these people only succeed because they have worked hard to develop their understanding and skill.

How to learn & what we do to help you

Most of what you need to learn is taught within the course but there are some topics which are covered in other modules. For instance, techniques for validation and verification (e.g. testing), data structures, algorithms, programming methodologies and software engineering are taught formally elsewhere. We will expect you to apply some of this knowledge and these techniques within the workshop exercises.

One crucial issue is that many of the concepts, techniques and practices are interdependent: to be able to properly understand and apply one idea you need to have an understanding of several others, but these may in turn depend upon the first. The way we address this is by revisiting some topics several times.

A related issue is the balance between introducing things formally and then exploring their application versus using something and then looking at its formal definition. This is partly a function of each individual learner and the particular topic - some people are more comfortable one way than the other, some topics are better introduced one way. So, we will use a mixture of approaches. Some topics are introduced formally in lectures first and then applied through exercises. Other topics will be introduced through exercises and then later explained more formally in class.

To try to help you learn what you need to know and do, there are several resources provided. You may not all take advantage of every one of these but you will probably find each form of help useful at some point in the course:

  • Lectures. The first aim is to provide a framework which will support the other aspects of the course. The lectures will cover the important topics. They will cover these formally but also try to give examples and show how features of the programming languages should be used and why. They are not meant to be monologues - if you don't understand something then ask questions because other people are likely to have the same problems.
  • Tutorials. These will be in groups and are focussed around the exercises. They will introduce new pieces of work and review the new techniques that you are expected to use. They will review the exercises that have just been submitted and will give you feedback on your work. The aim is that the tutor for your group will get to know you and your work and be able to help you on a one to one basis. The tutorials, even more than lectures, require your active participation if they are to be effective. If you have any questions then ask them, if you're not quite sure what the question is, then still try to ask I!
  • Exercises. The exercises are there to help you develop a better understanding of the concepts and to learn to apply these in order to develop good software. At the start, the exercises will be fairly small and very prescriptive but they will become larger and less tightly defined. You will be expected to make more decisions about what the software should do and how it should do it, as time goes on. Each exercise will introduce new ideas and most of them will require you to do some research' in order to undertake the exercise. For instance, we might require you to generate random numbers as part of the exercise. This will mean that you need to learn how to find this information from books or on-line resources - developing good research skills is very important.

The main aim of the exercises is to help you to learn, but the later exercises will form the assessment for the course - the exercise sheet will say whether the exercise forms part of the assessment.

  • Web pages. The course web page has links to the exercises, solutions, comments sheets, on-line courses, on-line documentation, and other useful resources
  • Books. There are several books listed on the course web pages, and others will be recommended by the lectureres.
  • Study groups. It's very useful to work with other students in small groups. We don't organise these for you, but do encourage you to form them. If you want some help for your group then speak to us and we'll see whether we can arrange something.

So, there are a lot of ways to learn. Ultimately, of course, it't your responsibility to take advantage of these opportunities.

 

The exercises

The main aim of the workshop exercise is to provide you with a structure within which you can properly understand the features of the programming languages, learn to apply these, learn to solve problems and develop the wide range of skills that are necessary to undertake software development. We'll help you do this and give you feedback on your work so that you can improve your understanding and skills.

As we said above, you actually need to learn a lot more than just the syntax of the language or even how to write programs. You need to learn how to identify requirements, specify systems, produce detailed and architectural designs, demonstrate that systems work to specifications, document systems and many more things. You also need to become familiar with various tools and learn how to find out information, identify useful software and learn how to use it.

The exercises start off being very constrained and leave little scope for interpretation. Later they will become more open and will start to require you to do more thinking.

Use the exercises as a framework for your work rather than the sole end. You should aim to explore around and beyond the exercises in order to extend your knowledge.

You will have to present your solution to each exerise in a 5min. session, make should you can explain everything you have written in your code.

If you are having problems with the exercise or with deadlines then make sure we know about them

Assessment

Each piece of work will be given a mark on the normal scale:

70+

First class

60-69

II1

50-59

II2

40-49

III

<39

Fail

The final mark for the course will normally be a weighted average of the marks for the individual assessable exercises. The weight is in proportion to the amount of time allocated for the exercise.

Each exercise will specify what must be submitted and what will form part of the assessment. Typically this will be some of: program code, javadoc documentation, documentation of specification or design, testing, viva/demonstration.

What we expect of you

We expect you to work hard. The workshop is 1/3 of your workload so we expect you to spend 1/3 of your time on it. If we assume a 40 hour week that means that you should on average spend ~13 hours per week over the year. Of course you can arrange this how you want (up to a point). If you don't do any work one week, then you should expect to spend twice as long the next. Of course this is only an average; Some students may find that they need to spend more or less time.

You should attend the lectures and you must attend the tutorials each week. We also expect you to attend at least one of the lab. sessions: of course many people will use their own machines for much of the work, but the lab. sessions provide an opportunity to get feedback and a chance to work with and learn from other students.

Many students find it very useful to work together on the problems. This helps you a lot by seeing other approaches and discussing your work. This is encouraged, but you must ensure that any work you submit is really your own. The penalties for plagiarism are severe but, even more importantly, you will not learn if you start to rely too much on help from others. Even if you get away without really understanding the exercises you will eventually come unstuck when you have to take your final project.

Take advantage of the opportunity that the course provides: There are a lot of different opportunities to learn and you should make sure that you use them. Get feedback from the demonstrators and tutors, seek help if you get stuck, use the drop in sessions, read the on-line resources which the course web page links to, read the comment sheets and look at the sample code and solutions. If you do get lost or behind with the work then talk to us about it - don't start avoiding tutors or skipping sessions to try to catch up.

The role of demonstrators

Demonstrators and tutors will not do your work for you! They will help you to understand what you need to do. They will ask you questions. They'll show you where you have gone wrong. They will help you to understand things. They will guide you towards solutions. They will show you better ways to do things

At the end of the day, the exercises are there for you to learn through. Completing them is not as important as the learning you gain through doing them. If a tutor doesn't directly solve your problem, it isn't because they are being awkward. It's because they are trying to help you understand something that you will then be able to use in the future.

Enjoy it

Don't let it get on top of you. If you can keep on top of the work then it is so much easier and more enjoyable.

Remember, the exercises are meant to challenge you but they are all within your capability. Many of them may look very daunting at first, but they break down into simpler parts which you can work on fairly independently and then assemble into a larger system. Learning how to approach large and partially defined problems is probably the most important and transferable lesson you will have.