Sunday, April 27, 2008

First week with Jens.

So this was our first week with Jens lecturing for this paper. We started with an overview of the history of object oriented programming language. Where they came from and their various evolution. (i.e., Java;s syntax is similar to C++ but works with more smalltalk like principles.)

Carrying on from that came the principles of OOP: Overloading and Polymorphism, Inheritance, Separating Implementation and Declaration, Encapsulation etc.

We were told about other programing 'things': Null, what it is and what in tales. The principles of equality vs identity that Some objects may have the same value but are the same identical (to to with memory pointers etc.) These 'things are common to most programming languages not just java, C++, and other OOP programming languages.

We also covered exception handling, object/class life cycles,advanced and nonstandard features etc.
Thorough out the lectures on these point these were brought back to the real world implications with the business use cases etc. And how their development affects business and how business affect the development of languages ant their use.

Most of the things that were discussed were things that I generally understand however good to go over again. Actually a lot of this I have covered with Jens in 159.201 (algorithms and data structures) earlier in the semester. Every time you go over some thing it cements it further so it is easier to utilise and or avoid gotchyas in the future (and therefore build better quality software).

Sunday, April 20, 2008

UML [351]

So in the past week we have been learning about modeling. Modeling with UML and we touched on extending it with OCL. We learnt about how UML defines itself. It was kind of confusing concept to understand at first but it is like how we define English using English. (I wonder if it would be possible for a child to argue that they refuse to do their English home work because it esoteric, recursively reasoned, and is not a scientifically shown proof. I guess they would get give detention; supervised by the maths teacher.)

So the way things go is that you have a system (which is the real world thing we want to create) then we have a model of that system showing the various class instances and attributes etc. Then we have a model of the model showing the the classes (of which various class instances in the model etc., will be instances of). Then we have a model of the model of the model. This models what models and attributes are. Finally we have a model of the model of the model of the model. This defines what how models showing classes etc are modeled. This final part seems the most confusing but is most similar to the concept of modeling the English language using English.

UML was also discussed how It can be used in Business process modeling. When you think about it money, products (and components being manufactured into products) services and systems all are very similar to how information is passed around and how you have instances of objects etc (e.g., people , casting and forging plants etc.) and there for can be model easily using UML.
We also discussed how due to the limitations we cant just use a model (UML) and just feed that into a system and have it generate code directly. That it still is ambiguous and is not able to do this with out human intervention. That it is easy to for systems to get things syntacticly correct but not able to create something that is semantically what we want.


We also discussed some of the previous exams and what type of answers that are expected, and what is going to be looked for in them.

Thursday, March 13, 2008

Ethics [351]

We had an interesting discussion on ethics in software development today.

We touched on the ethics of data mining. I.e., when making puruches with your credit card. Would it be reasonable for the health authorities know that despite you being on an expensive treatment program for you health problems, which are brought on probably because you your diet lifestyle , that you are buying unhealthy food? I think the general consensus was no. Because we have rights to privacy.

We discussed the case of Jake Baker. With his newsgroup posts violent sexual fantasy's of which he used a name of one of his fellow collage classmates.The world is changing what you day on the inter net is much easier to publish than if you were publishing someting in say a news paper. We discussed the importance of free speech, the need to be aware of what you say on the internet that it can come and bite you. Employers will often google your name, you need to be careful what you say on say you drunken photos on face book etc. We also discussed when when does free speech become more than that. Such as free speech could also be abuse or assault.

We discussed the ethics of what to do if you find that you software may not be following the best morals. We specifically discussed how an overall 'good' game portray characters extra musclebound men and extra curvaceous women. What are the implications of that. Does it mean that boys have a lead on to IT because of the games are aimed at the general male psyche
and that is possibly a large factor in why there are not many women in IT. Do we need more women in IT. Yes but why? If nothing else because we need more developers. Jo Chapman puts forward a good case for this here http://notethat.blogspot.com/2007/07/in-need-of-people.html
Our culture is also a reason why women who are quite capable do not enter into the IT field. Who are the stake holders in such a game how much influence do and should they have. If muscled men make the game sell what are the chances of being alowd to remove or tone down that aspect of the game? Where are the publics place in all this.

Patients died from overdoses with therapeutic radiation from a Therac-25 radiation therapy machine. Which poor software design was one of the primary causes. Who is accountable can you blame one engineer when the rest of the team and systems didn't safe guard against that.
There will always be bugs in code it is mathematically impossible to remove all bugs from a complex piece of code. is that a valid excuse?

Sunday, March 9, 2008

Metrics [351]

This mornings class for software engineering was on metrics in software development.

There are various things that can be measured with in project. Metric are useful but can be difficult to implement. For example just measuring lines of code [LOC]can be tricky because one developer may write compact code with the same functionality that another write in a much more convoluted way (ergo using more LOC). Different programing languages require different amounts of LOC for the same functionality. Then there is different measures of LOC i.e., With or without blank lines, with or without comments, etc etc. All measures have have there various nuances which you have to be careful of and must be aware of when using them.



Care should should also be take on how this information is used; who has access to this information, what it is used for, who the information will affect in the future.
Data from the metric can be useful if shared within a team. Analyzed results, indicating the health of the project would be good for management, but individual performance would not. Metrics which will have an effect individuals rather that something of a larger scale (i.e., a project) can not be reliably used if the individual concerned is able to affect the results of the metric concerned. For example just using LOC as a measure for performance appraisal, may lead a programmer to write extra unnecessary code.
This would can lead to skewing of the result of the metrics; reducing the metrics usefulness.

The wider implication of this can be quite large. I have read somewhere (but unfortunately can not find the reference) proposing that Enron changed from a company, which transparency, honesty and accountability were core values, to one where corruption and deceiving practices were the norm (which lead to its scandalous down fall)because of the practice of firing of the lowest performing team members based on flawed metrics. (This policy was introduces by the CEO create competition between team members (out of fear of being the bottom performing member and then getting fired) which would lead to increased productivity. This performance was based on flawed metrics which could be skewed. This is an extreme example but it shows the importance of getting it right.

Metrics are often more useful when measure against another measure i.e., errors found per LOC or LOC per person month.

There are many different metrics that can be used not just LOC


There is an importance in storing metrics data for later use (there is no point in making the measurements if you are not going to use them later) A project may take a year or more, so data will need to be stored in a useful manner for years to come.


My own thoughts on what metrics implies:

The question is then what to do with the data!?
It can be used to provide feedback to improve the weighting factors used in estimating the size of projects. For example if you used (say) 6.5 function points is equivalent to one person month. But found from your metrics that 6.2 was a better weighting factor for estimation. It could also be used in a similar way to mile stones to gauge progress of a project.
Then there is using data in the context of a Deming (or PDCA, or Shewhart) cycle (http://en.wikipedia.org/wiki/PDCA )to measure performance, isolate a possible weak area, plan ways to improve, do something to the effect of the plan and measure again (and the cycle continues) PDCA cycles work best is there is some hard data to act upon (other wise you may be making things worse when they don't need changing because you acted on some subjective (non)data. )

Deming http://en.wikipedia.org/wiki/W._Edwards_Deming is a personal hero of mine so I had to put in a reference to him.

Monday, February 25, 2008

159.351 stuff

Software Eng today we as small groups (1/3 of the class), discussed the differences of the various stages of software development( teams design coding deployment //find out all of steps//) when doing student project coding vs professional development.