July 22, 2008 11:23 by
dgood
I started working on a post a couple of weeks ago, but like many things, I don't know when to quit. So, here I am with an incomplete essay / research paper hybrid that I'm _still_ adding to yet trying to keep interesting enough to qualify as a blog post. Most blog posts that cross the 500 word mark are deemed large, and over 1000 are considered epic. I think what I'm going to do is finish the paper then post it here as a PDF with some meta information about it.
It's an ambitious endeavor to be sure. I don't want to give too much away since it hasn't been edited at all, but I will give the opening paragraph.
Working title:
Why software sucks: How the software industry mislead its customers through its missteps and its inability to adapt quickly to a changing technological landscape
This will be an examination of the current state of the art in computer software applications, their construction, and the people and companies that create them. I concede that that is an ambitious title and opening statement. I will attempt to analyze the state of software today by shedding light on the industry itself; the processes that contribute to the end product; a historical perspective on computing; and examining the business of software.
Perhaps sounds more like a Dateline NBC investigation, I don't know. We'll see where it goes. Yes, the title is meant to be slightly ironic.
Cheers,
Goody
Be the first to rate this post
- Currently 0/5 Stars.
- 1
- 2
- 3
- 4
- 5
February 17, 2008 20:54 by
dgood
I'm in Chicago this week for training. My employer recently purchased another company and I'm here to learn their systems for eventual integration with our software.
Day 0:
Our flight from CAK to ORD was delayed by an hour. Not bad considering the person at the ticket counter initially said it would be at least 3 hours late before we even took off. Total late: 66 minutes. When we landed however, there was "a boarding issue with the plane that was occupying our gate," so we had to wait until another became available. I'm betting the "issue" was related to the firetrucks and ambulances at the gate in front of us. Just a guess.
Getting through ORD was surprisingly easy. Our bags were on the belt when we got to the baggage claim - in and out. We caught the bus to the Avis lot, got our Malibu (surprisingly nice car) and set out for the hotel. The hotel is in the North Shore area, approximately 14 miles from ORD. This is an important point.
For some reason, we didn't get the "Where2" garmin nav for our rental. This $10 saves our company a lot. The only map we had said to take 90/94 east. This is an important point. Get a map. Go ahead, get a map, I'll wait. Look up Chicago and look at route 94 from ORD to downtown. It goes North and it goes South. It doesn't go East and it doesn't go West. The signs however say 94 East or 94 West. That's it - no 94 East to the freakin' Detriot this way or 94 West to Fargo that way. The signs suck.
So, after a while (waaay more than 14 miles) I said to Sam, "Sam, I think we're going to Indianapolis." Sam agreed, so we decided to get off at 63rd st. and get oriented. The neat thing about 63rd st. is that you can get off of 94 NorthSouthEast, but not on. The other interesting thing about cities in general is the abundance of one-way streets. After driving around for a few minutes we stopped at the red light in front of
Elmo's. A block north of Elmo's is Rambo's Liquor. It's an interesting part of Chicago that we otherwise probably wouldn't have experienced.
Fast forward - a few minutes, several turns, and numerous blocks later we figure out up from down and we're back on 94 West, which is really 94 North. 70.3 miles later we arrived at the 14-miles-from-the-airport hotel, check in, and head to
Flatlander's for dinner. Flatlander's is a nice micro-brewery in the North Shore with a great atmosphere, great service, and great food.
So, here I am 11 hours after I disembarked, I'm safe and sound blogging on the free Wi-fi.
Let's hope Day 1 holds as much adventure as Day 0.
Be the first to rate this post
- Currently 0/5 Stars.
- 1
- 2
- 3
- 4
- 5
January 3, 2008 21:51 by
dgood
Oh, I'm sure you've all asked that question to yourselves - "What do I want to be when I grow up?"
Well, quite frankly, I have no idea. I went to college to be an architect, but that fizzled out after a year when I realized that I'm good at the engineering "stuff" but not so much at being an artist. The first year of the five year Kent State architecture program turned out to be really artsy-fartsy. Way beyond anything I expected. So, I picked the next best thing - computers!
So, (eventually) I end up with this B.S. (that's Bachelor of Science, not the other B.S.) in computer science, and a good career so far. But the thing is, see, is that I feel stagnant. I've been at it for 10 years more or less and I just feel.... I dunno.... stuck in a rut. Maybe it's a mid-life crisis, who knows? One thing is for sure though, I've got to get moving in some direction.
I've been working a bit on my M.S. in computer science, and I've recently transferred back to Kent State with the thought that maybe... I dunno, that maybe I'll get my Ph.D. I'm just not sure. I could teach. I could research. I could become a museum curator. I'm a little bummed out because I work really hard to be a good geek, but there are all these other really successful geeks who have degrees in things like Psychology yet have really cool geeky geek jobs. Not that writing management and administration software for IP-PBXs and VoIP systems, and compilers for proprietary languages, and messing around with Jitter Buffers (<-- that's definitely geeky) isn't cool, but it's just not Cool with the capital C. It's cool with the lowercase c, as in "Oh, you like math? That's cool." kind of way.
So, the mission for January is to really figure out what I want to be when I grow up. <sarcasm>I'm allotting myself a whole month to figure this out, so it shouldn't be too tough. I've been toying with the idea for couple of years (decades) so it shouldn't be too tough to nail it down with a concerted effort. </sarcasm>.
Be the first to rate this post
- Currently 0/5 Stars.
- 1
- 2
- 3
- 4
- 5
October 23, 2007 19:57 by
dgood
I am America (And So Can You!) - One word: Hilarious. Technically, that's three.
Yes, I'm still alive. I've been very busy lately. I jacked up the radiator cap on my Jeep and I've been busy putting a new Jeep under it.
ProgrammingGoody, you say? Blog about software, eh?
How's this: Boxing and Unboxing in C# can be tricky operations for the inexperienced or uninformed.
Example:
struct Point
{
int X;
int Y;
public Point(int x, int y){ X=x; Y=y; }
public void Move(int x, int y){ X = x; Y=y; }
}
public static void main(string args[])
{
Point p = new Point(0, 0); // value type
ArrayList arr = new ArrayList(); // only holds reference types
arr.Add(p); // Box it
((Point)arr[0]).Move(5, 5); // Unbox it
Console.WriteLine("Point: {0}", arr[0]);
}
When the Point struct is unboxed, the pointer to the boxed Point on the managed heap is used to copy the values from the heap into a new instance of a Point value type on the stack. In effect, there are now two separate instances of Point - one on the stack and one on the heap. Using Point in this manner will not lead to the desired outcome.
The same mechanism applies to any value type stored as a boxed reference. (Hint: think Session state)
This one's for you, Classic Colin.
Cheers.
Be the first to rate this post
- Currently 0/5 Stars.
- 1
- 2
- 3
- 4
- 5
July 5, 2007 19:30 by
dgood
I'm working on an essay, more of a research paper, really.
I was listening to an interview with Grady Booch during which he mentioned that much software architecture is grown, or evolved, rather than planned.
That got me thinking about architecture in general, and brought to mind a quote from Linus Torvalds:
Nobody should start to undertake a large project. You start with a small _trivial_ project, and you should never expect it to get large. If you do, you'll just overdesign and generally think it is more important than it likely is at that stage. Or worse, you might be scared away by the sheer size of the work you envision. So start small, and think about the details. Don't think about some big picture and fancy design. If it doesn't solve some fairly immediate need, it's almost certainly over-designed.
http://en.wikiquote.org/wiki/Linus_Torvalds
I left off the last couple of sentences from Linus' quote which could provide more relevant context, I don't know, that's for you dear reader to decide. Personally I find that it doesn't provide any mitigation to the first couple of sentences, so it's irrelevant.
Then I began to think about software engineering in general, and particularly the essay that Steve McConnell wrote the other day about Software Engineering: Rumors of Software Engineering's Death are Greatly Exaggerated (aka Software Engineering Ignorance, Part II)
I think if you ask 10 seasoned software engineers to define software architecture, or software engineering, that you will likely get 10 different yet conceptually similar answers. So it sounds fairly simple. Then why are there so many contradictory philosophies?
- Problem: Too much architecture is not planned
- Solution: Need more planned architecture
- Problem: Too many people plan big fancy architectures
- Problem: Too many people don't engineer software
- Solution: Need more emphasis on the engineering aspects of software
So, I solicit your input on the following:
- When is it ok, or not ok to have Big Design Up Front (BDUF)?
- Can BDUF and Agile methods coexist?
- What separates Software Engineers from Software Architects?
- How big, or how complex should the architecture really be? (No lame answers of "only as big as it needs to be")
- In other words, If I'm sitting down today to begin creating the next generation of a complex system, how complex can the architecture be if I "start with a small _trivial_" architecture?
What gives?
Be the first to rate this post
- Currently 0/5 Stars.
- 1
- 2
- 3
- 4
- 5
June 27, 2007 20:41 by
dgood
As you can see the conversion to Subtext is complete. All in all it was fairly simple and went as smooth as I could have hoped.
I haven't looked at any source code but I'm impressed with the functionality and how well it works out of the box. It needs a little polish, but it's an impressive app for a zero dot something build. My hat is off to the Subtext team, I think you've put together a nice app.
There is this one dig I have to make, however. I switched from Wordpress 2.0 and there is no "simple" way to convert the data. I did search the Subtext forums on Sourceforge and found a thrown-together app to export Wordpress data to BlogML format for importing using the built-in Subtext import feature. I understand it would be difficult if not impossible to create and maintain converters for every other blog platform out there.
So, I'm working on a Wordpress to Subtext direct convert app. So far, it's been pretty simple. The data structures map fairly nicely. My hope is to make it available by this weekend as a simple Windows app to do straight MySQL to SQL data conversions, skipping the XML export. From there I'd like to make it flexible enough to support multiple versions of Wordpress, and from there I'd like to add a feature for advanced users to drag-and-drop map the data structures if the app can't figure them out.
Why all this work for a simple one-time-use converter? I dunno. Something to keep me occupied and fiddling around with non work-related code.
The last thing I'll say about it is that I'm posting this from Firefox 2.0 on my Mac. It works fine in Safari with the exception of the HTML editor. Mac functionality is one of the main reasons I chose it over dasBlog - sorry Hanselman dasBlog looks terrible in Safari. Other than that it's a peach in FF.
Cheers.
Be the first to rate this post
- Currently 0/5 Stars.
- 1
- 2
- 3
- 4
- 5
January 26, 2007 21:33 by
dgood
I've been working on a prototype for a new piece of software which will add new functionality to our system. It is to be a proxy between an existing Win32 MFC app written by a different engineering group and our system which has functionality that they need. The MFC app could be anywhere on a network and our system can be anywhere else. So, the prototype needs to have the ability to be somewhere else entirely as well. The real trick is, the MFC app has to work with or without the proxy - the proxy has to be completely invisible to the MFC app.
So, I wrote a multi-threaded library that opens a socket and listens on that port for incoming connections. When a connection is made it handles the tcp stream and incoming byte arrays accordingly. It's configurable with an XML file to specify how many listeners to start and on which ports they're to listen on when it starts up. It listens on a given socket for incoming connections, when a connection is made it passes it to a worker thread that does some logging and forwards the tcp packets on to another waiting socket connected to our system on the back-end. I built-in a garbage collector to clean up the worker threads if client connections are dropped, and it's got a combination of asynchronous delegates and ThreadPool delegates to dump messages into MSMQ and raise events for client subscribers (e.g. a Console app or Windows Service) to trace events.
All-in-all it works pretty good, it's scalable, and it's pretty robust. But there's this one little bug that continues to drive me mad Mad MAD! I can't put my finger on it.
The method that does both the send and receive to the socket on the back-end is synchronized so only one client can forward packets at a time. Any other packets just queue until the back-end socket gets the bytes out of the receive buffer. For this particular application it makes it more robust since the system that the back-end connects to can't handle many connections. When the tcp packet reply is received on the back-end the first byte, or first two bytes specify the size of the incoming packet, that way I know how much to receive from the stream in case a number of packets are arriving at the same time. There is a concrete rule - there is a 1:1 relationship between messages and replies. Now there's the problem. Something is bunking up my receive buffer (sporadically) on the back-end. I believe the other system is broadcasting something as an additional response to the original message that isn't expected. Consequently, there are two results - It's unpredictable and it's insanely frustrating to debug!
Good night.
Be the first to rate this post
- Currently 0/5 Stars.
- 1
- 2
- 3
- 4
- 5
December 14, 2006 18:57 by
dgood
Ever look at some code and see anything similar to this:
//
// make sure we're not null
//
if (m_settings[item] != null)
return m_settings[item].ToString();
Every Day? Me too.
Ever wonder why so many programmers assume the double identity of the variable they're currently working with when they write the comment? "make sure we're not null" As though, at runtime, the developer suddenly becomes null too.
Interesting.
Be the first to rate this post
- Currently 0/5 Stars.
- 1
- 2
- 3
- 4
- 5
July 10, 2006 18:27 by
dgood
I've discovered that grad school is a lot like drinking from a firehose.
The amount of information that is presented is remarkable. Which isn't to say that it isn't interesting or fun, quite the contrary. However, discerning the really important information from the noise is quite challenging.
I'm certain that I won't actually realize all that I've learned until the semester is over and the dust settles.
Be the first to rate this post
- Currently 0/5 Stars.
- 1
- 2
- 3
- 4
- 5
June 6, 2006 20:25 by
dgood
This is self-plagairized from a post I originally made on
Slashdot in August of 2005...
==
I'm in the "MIS/IT is not CS" camp. I don't think IS/IT or even CE grads are as prepared to enter into a career as a developer as CS grads. Having said that, I also don't believe that all CS degrees are created equal either.
One of the most frustrating things I see are 2 year schools churning out "programmers" with Associate's degrees with impressive-sounding names like "Computer Science and Engineering Technology" that turns out to be 4 or 5 semesters of vocational PHP and Java programming. If you ask any of those grads to rate themselves on a scale of 1 to 10 on their programming expertise, nearly all of them will rate themselves at or above a 6. Usually it's a case of they don't know what they don't know and, in reality, they're more like a 2 or 3. Ask them to explain MVC or the difference between composition and aggregation and they're lost. I think there's a place for these 2 year colleges but I think they are doing these students a disservice by cranking them out with some vo-tech skills and leading them to believe that they're prepared to be software developers. I would be remiss to lump all of those grads together - I've met some that are highly dedicated and passionate about compy sci and just throw themselves at learning it and bettering themselves, so don't get me wrong it depends on the individual as well.
Another problem I see frequently are programmers with a lot of knowledge about encumbrance and descent database design skills but no knowledge of their business domain. I always explain to prospective candidates that I'm interviewing that it's great that they know how to multiply a number by 4 by with a bit-shift but that's only half of what they need to know. It's not enough to be a good programmer, they have to be, or become, knowledgeable about the business too. We write accounting and human resources software. It's difficult, nay impossible, to write that kind of software without the requisite knowledge of accounting procedures and processes and learning the rules. (Believe me, there are a lot of freakin' accounting rules. Sheesh.) One has to learn how accountants work and process journal entries and how the payroll taxes are paid and filed and what the SUI and OASDI caps and rules are and a mountain of other non-CS things before writing payroll software. Knowing how to code and knowing how to design are absolutely essential. Knowing how to *learn* and knowing your business domain is just as essential too. I don't consider that a problem with computer science - it's a fact that's inherent to a lot of disciplines such as law - but it is something that seems, for whatever reason, to be minimized or overlooked frequently.
It seems that CS programs are becoming more standardized, boiler-plate curriculums that are as expected at most schools as much as accounting and business management majors. One thing that may help - it would be a step in the right direction - would be to make the CS curriculum a 5 year program and mandate, at minimum, a minor in another non-cs-related discipline. CS is a difficult major and it can be a hard life if one isn't prepared to invest in it. It takes a lot of passion and a lot of ambition to excel and it's imperative to continue learning long after college is over. Once the degree is conferred the learning just begins. I'm a believer in new cs grads are now ready to learn how to be programmers. One other thing I always ask new grads that I interview is "How does it make you feel that every language and technology you're going to learn in the next 6 months or year might be obsolete and worthless very soon?" I'm looking to assess their dedication to learning and their passion for their chosen field. If they don't have it then they won't last very long.
Be the first to rate this post
- Currently 0/5 Stars.
- 1
- 2
- 3
- 4
- 5