Software Engineering and the Meaning of Life
This page will be used to answer philosophical questions about Software Engineering.
What makes Software Engineering different?
Q I'm currently finishing off my second year of software engineering, and its beginning to hit me: where do I want to go from here? I have a lot of electives to choose, and a general direction in which I should head, but I have no idea where to go. I've begun to see that its very easy to let a Seng degree turn into a trumped up compsci degree, simply by studying all the compsci subjects like networks and OS and that sort of thing ...but I want to be a Software Engineer, not a computer scientist with an engineering degree! I was wondering, what sort of courses would you recommend that are most likely to give me the skills I need as a software engineer, or impart indespensible knowledge for software engineers? Are there any subjects that have a strong emphasis on software engineering? A It's really satisfying to hear questions like these that show that you are thinking deeply about the program you are undertaking, and that you are taking the name of your program, Software Engineering, seriously.
Actually, I believe that you are already on the way to answering your own questions, since the difference between Computer Science (CS) and Software Engineering (SE) is a question of objectives and values rather than a question of different courses. But you will recognise --and probably have already recognised-- that many of our standard CS courses could have a more SE orientation.
Software engineers should be concerned with building safe, reliable software systems. System design is quite different from programming, although it might involve programming, and I'm not saying that software engineers shouldn't be good at programming.
We don't have a lot of courses that are specifically for software engineers, and that's a pity, but not as bad as it seems; read on. We do have the SE workshops and they are intended to get you to focus on SE development. You have probably learned more than you think from the workshops; ask yourself about this in two years time.
I would like to emphasise that a lot --probably just about all-- of the courses that you might identify as CS courses are also important for software engineers. A software engineer needs to know about networks, operating systems, compilers and so on. I could give you a long list, and you would notice that they are not core SE courses, so what is going on? Well, we could easily name more courses than could fit in the program, so what do we do? We could argue over which are most important, but we would not get agreement, so we have decided to make most of these courses elective. That simply acknowledges that there is only so much that you can fit into 4 years; there will always be some subject areas that are not covered. You have to understand that you need to keep learning after you graduate.
I am not going to suggest specific courses except to recommend that you do COMP33710 and COMP3720. It is certain that we are going to add a project management course to the core of the SE program in the near future.
For the rest, I would suggest that you keep reflecting on how you should apply the information and techniques you are learning in an engineering way.
Why are we using B in second year?
Q I know there is a course which takes B a bit further, but is B used much in the industry? B is cool, but is it a real-world sort of thing? I hope you understand where I'm coming from... I s'pose I want to build myself a skillset that will be most useful to me as a software engineer, rather than a skillset more suited to a computer scientist. A You've asked about B (the B Method) and where it fits. B plays a role at a number of different levels.
Let me first deal with your ``is B used much in the industry'' question. In Australia the answer is a pretty loud, ``No''. In Europe, especially France, and to some extent the UK, the answer is a somewhat soft ``Yes''. I've referred in my COMP2110 lectures to the use of B by Matra Transport. That company is now owned by Siemens and they are still using B. That is pretty significant. I would suggest than any company that puts in the effort to use formal methods and does so successfully will have an enormous advantage over competitors.
However you interpret the above answer, I do not make ``use in industry'' a plank in my reasons for teaching it. I will readily admit that most of you will not see B, or any other formal method, after you graduate, but I am confident that some of you will. As I will claim below all of you are able to benefit from the experience.
What are we trying to with B?
- We are trying to give you a technique of using simple mathematics to expressing a specification in a quantitative way. This allows you to explore the relations and constraints in a clear informal way, and also to carry out verification that the specification is consistent.
It's important to realise that you could do this without the advantage of a toolkit, simply using pencil, eraser and paper. It is a common experience that simply formalising your ideas helps to get them correct. This is a significant part of the advantage of high level programming languages over assembler.
- We are trying to give the software engineer a method for taking a specification through to implementation in a way that uses proof to ensure that the final implementation truthfully implements the specification. Done carefully this allows the elimination of unit testing.
You have not had the opportunity to explore this part of the B method in any significant way.
Why is this important?
Well some applications are so critical that you need to have very strong evidence that the software is ``correct''. Of course, this can be done without formal methods, but it requires lots and lots of testing. There are some applications, for example military and financial where it is already mandatory to use formal methods. For example, smartcards that allow you to withdraw money from a bank make banks very nervous; they don't want to lose money and they need to be convinced that the software on the smart card is guaranteed to work correctly. How do you do that by conventional methods?
I would conjecture that many of you, even if you never use B again will carry away a sharper, more precise way of thinking about software specification. So you should also see B as a form of mental development; it gives you new paradigms.
Incidentally, we are probably using B more intensively than any other university in the world. You can make up your own mind whether this is a major advantage or disadvantage for you. This year I've assisted three Australian universities: UQ, Monash and Western Sydney; to start using B. I know of others that are interested, so I expect more to follow.
So should you do COMP9116 --the other B subject? Yes, if you are interested in developing your capacity to think precisely about software development. You shouldn't do it because you think you will graduate and apply it in full immediately. But you might!?
|