Software Engineering Principles

In software engineering, most of our time is spent on solving specific problems. We don't often sit around thinking about what our IDE, Version Control, Automated Quality Assurance, and Build Systems are doing for us. And that is the point - these tools are meant to do their thing quickly and quietly, letting us focus on more interesting aspects of development. However, to be truly successful at software engineering, we need to understand how the tools we use and decisions we make affect the overall product. To this end, I will review five points that I think software engineers need to know.

Q: What three groups of people do you need feedback from to accomplish the three prime directives of open source software?

A: Remember that the three prime directives are that the system accomplishes at least one useful task, that a new user can successfully install and use the system, and that a new developer can understand and enhance the system. The original developer does not have the correct perspective to verify that these three directives are met in their own software. Regular feedback from external users, installers, and developers are required to ensure that these directives are met.


Q: Why is participation in open source projects useful for software engineering students?

A: There are a number of reasons to become involved in open source projects. Obviously work on any project results in valuable programming experience, but open source can go beyond that. Projects are often collaborated on by distributed groups. This makes documentation, standards, version control, and build systems much more important than in an individual project, or even a group project where everybody is working closely together. Another important advantage for students is the ability to share the code publicly. This means that potential employers can actually see the code they've written, how they've worked with the group, and what tools they have used. This gives the potential employer much more confidence in the student's abilities.


Q: In Java, why is the choice of a collection class important?

A: In the most general sense, a collection is a group of objects of the same type. The various flavors of collections have different properties. For example, some allow duplicates and others do not. Some impose ordering on the objects or keep them sorted. Selecting a collection class that matches the requirements of the program not only saves the developer some work, but also acts as a sort of in-code documentation. When other developers see what collection class is used, they immediately know something about how it will be used.


Q: In Java, what is one advantage and one limitation of generic types?

A: Generic types allow developers to reuse the same code over multiple data types, while still preserving type consistency within any particular usage. It makes code easier to read and understand, and catches any errors at compile-time rather than run-time. However, the type consistency is only guaranteed internally. Type errors can still occur when interfacing with databases, user input, or other external systems.


Q: What are the four general principles of coding standards?

A:

  1. Adhere to the style of the original
  2. Adhere to the Principle of Least Astonishment (simplicity, clarity, robustness, completeness, consistency)
  3. Do it right the first time
  4. Document any deviations


Of course these five questions do not even begin to cover everything a software engineer needs to know, but they provide a starting point to anybody who wants to review some of the more important concepts in this field.

Comments

  1. Andrea your blog has been so helpful to me in my masters project..I still have challenges with esper with listeners and casv adapter..I will need more from you please...thanks

    ReplyDelete
    Replies
    1. Hi Osbert,
      I haven't worked with Esper much since writing the post, but if you have any specific questions feel free to add a comment to that post. I might remember or somebody else who comes across the page might be able to help.
      Andrea

      Delete

Post a Comment

Popular posts from this blog

Working with Esper: Problems and Solutions

Writing and Testing FizzBuzz in Eclipse