Month: July 2006

SOA is not about replacing OO. SOA is about one aspect (Yes AOP works
great with SOA) of your application.
Your application still needs to be designed well and that typically means
application of all the OO design principals which you have come to know and love
(or hate).

A principle of SOA is to not expose complex types (#1), yes. But this is best done < ?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />IMO through a facade (not necessarily the
pattern) or aspect which still uses well designed objects underneath. (#2)Using composition much more is not
really a requirement. In fact I
wouldn’t change my approach to OO design because of SOA, but using composition
to expose services is a great approach, often through use of a the facade
pattern.

Separating business logic and process from the business data really has
nothing to do with SOA and everything to do with a good OO design. If you arenâ€™t already doing this, then
it is likely your OO designs could use some improvements. Since many of us are already doing this,
we are just more read for SOA when we choose to implement that
aspect.

I’m a huge fan of
DTRT, do the right thing. So far I have observed that SOA doesn’t change
the right thing, and that 99% of the time the right thing is continuing OO
design.

Its actually something I think about often, but often dwelling on such
thoughts will surface new ideas. This is what I came up with:

Maybe it is because now it is a JOB, where you have to make MONEY doing it,
which often means doing what others want instead of doing what you want. I
think if you were to quit your job, take a month off, away from technology
entirely, preferably on sandy beaches some place, then you could find your
“buzz”. I just call it the love. Some computer folks have the love,
and others just do it because it is a job. Unforntunately sometimes those
of us with the love loose the love when our jobs slowly derail us from the
things we really love.

The environment is definitely still there, its just that jobs in that
environment are not high paying. Jobs supporting hobbyists are often not
high paying. You could make a living at it, but it would not be the same
kind of salary as working corporate IT. Corporate IT and even Corporate
systems programming does typically not involve fun with “cheap 3D video cards,
commodity parts, and the malleability of most open source projects”.
Instead, most businesses buy Dell, HP or IBM for their desktops and replace
entire PCs, not components, when something goes wrong. Most businesses
don’t have the time or money it takes to pay an administrator or programmer to
deal with open source anything unless a business case can be made, and even then
in many environments there is an illogical fear of the lack of accountability
that comes with using open source software.

This is the 4th Grade/Office Space career test. If you had one million
dollars, then what would you do? Lets update the question, because one
million just isn’t that much these days, so instead lets say, if you had one
billion dollars, what would you do? Not with the money, with
yourself. What would you do? I certainly wouldn’t be working this
job. I’d probably take some time off and reaccess myself. But I know
myself well enough to know that I wouldn’t leave the computer world. I’d
probably start a software company and practice all the things that I love.
I’d practice good software engineering and use open source. I’d sell
software product, services, and support. I’d hire young programmers and
shape them into great software engineers. We would score very high on the
Joel Test.

Now the point of the exercise is that this is what I’m supposed to do NOW,
even without one billion dollars. Quite frankly, I don’t have the
guts. An unfortunately working in this life sucking cube all day just
makes me more bitter and more disgusted with the computing world that it is
possible that when or if I do decide to make the jump and try my hand at
starting a software company, I’ll fail. I’ll fail for all the reasons I
would have failed anyway, but I will also fail, and maybe faster, because I
carried with me something which I should not have. I lost the love by
working the life sucking cube for too long. This is my ultimate
fear. The only solution is to quit my job and start now, but fear tells me
that I won’t make mortgage payments and that beans and rice aren’t as fun as
going out with friends on the weekend. I need to be strong and make the
jump!

Nilotpal writes about Smart People. I’ve been feeling that way about my
current job for months. I don’t so much consider myself /Smart/ as I
consider many of the people with whom I work stupid. Or as Nilopat says
far more PC “below par”.

All I ask that my team have a few things. I’d like to score at least a
2 (but a 6 or more would really make me happy) on The Joel Test. If I have to know anything about someone else’s
code, I’d also like them to have a distant clue about what Object Oriented
Programming and Design is. Programmers please, heed my plea, stop using OO
Languages as procedural. Classes are for classifying
objects. Objects are for grouping similar things into classes
(polymorphism anyone? WHAT IS THAT???)

If you don’t already know everything that uncle bob says about Object Oriented
Design, then you aren’t an object-oriented anything and you shouldn’t be
programming with object oriented tools. Like with most tools you are more
dangerous using them when you are untrained than you are simply not touching
them. Get trained to use these tools first. You would wave a razor
sharp katana around aimlessly would you? You would? Well, then you
get what you deserve. I hope you loose a limb, or better yet, part of your
skull and your brain chops in half immediately saving the rest of the world from
you.

In the same vein of just deserts, you deserve what you
get by using programming tools which you don’t understand. That shoe
string of classes which group unrelated data and methods into meaningless
modules WILL become unmanageable. You WILL suffer compared to your skilled
competitors. Your bosses and team leads get what they deserve when you
leave to torture someone else, because they allowed you to waste your time and
theirs by writing unmaintainable code. Or less pessimistic, you deserve
what you get when you are let go by your boss when they and your team lead
realize that since you haven’t trained yourself to use these tools which you are
misusing, that you must be dumber than they had thought when hiring you.
Have fun drifting from job to job, I’m sure you can find a group that doesn’t
realize that you are “below par” where the boss is also “below par” and you can
fit right in. Fill business needs for 10 times the cost of a good
programmer. I hope said company which you found is highly profitable.

I know there are many good programmers out there. What is so hard about good design? I’d like your input. My only thought is
that much of the time no time is spent in thought
about design at all. The “below par” programmer just sits down
and starts writing code. Does anyone have any thoughts?

I like this post because it really hits home for
me. In my tiny development group, we don’t have any testers.
Therefore I am the perpetual noisemaker. I challenge every bad design
(which is most of them). I challenge every line of source code I see
(which is very few of them). I drive my team lead crazy. I try to
make our software “better”. But in my eyes, no one else sees the benefit
of writing better software and using better designs. The team has the
unfortunate property of cowboy style development being OK.

In this case I don’t view any such challenges to
the “bad things” as being CLM. Rather if it does limit my carreer, then I
am better off for it, as this is not an environment in which I wish to
work. Of course, I am not working at Microsoft like Nick. Keep
fighting the good fight Nick. Make Microsoft’s software better! God
knows there is plent of need and room to do that.

This was in my ubuntu-devel folder July 4th. What a
nice holiday gift.

“the latest apt upload (0.6.44.2ubuntu2) to edgy has support fortracking
of automatically installed dependencies” … “Use “apt-get remove –auto-remove”
to see a list of suggestions what packages are auto-installed and no longer
needed.”

This is VERY awesome. I get tired of tracking down unknown unneeded
packages. Especially since Debian and Ubuntu are very good about keeping
packages granular, so often there are many small packages rather than one large
package. Details on usage is in
the forum. Many sysadmins should
rejoice. Their systems will be cleaner than ever. Much thanks to Michael
Vogt and team.

Greg has an opinion on Fixed Price Bids over on Code Better. I agree
with his concerns. They are definitely important. Agile
methodologies are all about trust and contracts are all about protection.
I think Greg is using the wrong analogy and asking the wrong questions.

“an you imagine for a minute going to a builder in a new development around
the corner from your house and signing a $300,000 contract for them build you
a house without a floor plan or other specifications being included in the
contract?”

No, I can’t. But, consider that as detailed as a home
plan is, it is often not followed very closely. Ask some friends who have
built homes and they will describe where the contractor messed up, or places
were things are different than the plans, sometimes significantly
different. Further, I propose that the complexity of most software
projects are far more complex than building a house. Instead I compare it to building a highway and including large
bridges over waterways.

The highway part is the part of the software that is pretty common and you as
the developer have no worries and can see the outcome already. The bridge
part is the complex part and the part that you know may have to be modified some
part way into the project. Medium to Large software applications aren’t
written nearly as often as houses are built. The process is not as nearly
as refined. If it were, many of these methodologies which are discussed and being adopted right now would
have long been adopted and there would be no question.

The point is, that the contractors who build huge bridges and highways are
often off the mark, and often enough sometimes 40-50% off the mark on
costs. I’m not sure what the contractual and legal deals look like in
projects of this nature, but my gut tells me that they have more in common with
a large software project than does the construction of a house.

Parallel BZIP2 is awesome. I know bzip2 is a
step up from gzip, but often I wonder if the added CPU cost is worth the extra
compression. Parallel bzip2 is a parallel implementation which uses
pthreads to achieve near-linear speedup on SMP machines. It uses libbzip2
underneath so you get full compatibility.

Why would one want this? Well, I have a quad xeon at work which
takes a very long time to compress certain files which are of 10-20G+
size. bzip2precompiled for win32 pegged one CPU for hours on end. I
figure any speedup would be a good thing.

Why not just use zip? Well, it turns out that I was doing just that
using infozip and running into a limit with zip files in general. 4GB max file
size. At first I thought about some workarounds, but I realized that the
best solution was probably to use something without such a limit.

Windows CMD.EXE seems so limiting compared to borne, korne, or bash.
Yet, there are some gems in there that make simple things simple.

I’m using this command script weekly to zip up some logs.

@echo off
FOR
%%F IN (*_bak) DO c:\sysmaint\bzip2.exe -f %%F

The Parallel Bzip2 page is missing a precompiled win32
version, so I made one using mingw. I just followed the directions in the
pbzip2 README file, but still, it took a while to download mingw and msys and
get the pthreads library and build bzip2 because I wanted it statically
linked. So depending on your unix/win-fu using this prebuilt stuff could
save you anywhere from 10 minutes to half a day of time