Showing posts with label Programming. Show all posts
Showing posts with label Programming. Show all posts

Thursday, May 24, 2007

The Long Haul

Larry Bernstein once counseled me that one of the worst situations is to produce a product that is slightly successful always tottering on the edge of profitability and disdain from users while requiring unappreciated heroic support from maintainers. Maxim Dzoba in his log entry for my Software Architecture and Design class at Stevens, furthers the discussion on how success should be measured. He references a post from a website which should be in your bookmarks/favorites list. It is a thought provoking entry about how and when to measure success. Later!



MAXIM DZOBA'S POST:



Learning from your mistakes.



Many programmers read worsethanfailure.com (formerly thedailywtf.com). It’s a humorous blog which pokes fun at poorly written code, poorly designed applications, and ignorant programmers or management. One time the author posted a big entry that was unlike the usual humorous posts. In it, the author took on an interesting point of view about what it means for a software project to be successful or failed. He states that the common standards for a project to be considered successful are too low. Usually, as soon as a project goes live and money is paid, it is written off as a success and its authors move on to new projects. But, in reality, the product they developed might be, and often is, difficult to use, hard to maintain, doesn’t do its job well, or contains serious design flaws. It may even limp through its lifecycle being a tremendous sink of resources. The project, in fact, may be a complete failure. The author’s main point is that the only way to judge that a project is successful, is to follow it to the end of its lifecycle. But since people consider a project to be a success at its completion, they don’t go back to analyze what mistakes were made, which leads to a more serious problem: they don’t learn from their mistakes!

I was startled to realize that ours is the only industry where a completion of a project is equivalent to being successful. A building that crumbles after a few years or a film that no one would watch are deemed failures and this makes people go back to analyze their mistakes and learn from them. In software, however, it’s likely that people do not understand the mistakes they made and, worst of all, take their bad practices on to their next projects.



Friday, June 10, 2005

Tomtoolery

The title of this post is a takeoff on the word tomfoolery which means foolish or senseless behavior.  One of the discussion topics for my Software Engineering course concerned building and using your own tools.  One of the students in the discussion, Chris Slater, offered this insight:



I am fairly new to the industry, so I have not developed a set of tools that I carry around.  However, at my new job, I have begun to develop these tools.  The funny thing about this is I created these tools in hopes of standardizing the tool set for our new project; however, once the other developers got a hold of these tools they either: (a) threw them away, or (b) rewrote them to fit their personal preference.

I then asked the class:

Did you ever ask  why they tossed or modified the tools?  This is a common experience and it would be nice to understand the, "not invented by me syndrome."  Is it lack of documentation?  Lack of Support?



I do notice that the use of tools, and reuse in general, follows an inverse square law of distance between parties.  It is much more likely that I will use tools or code from someone in an office nearby.  The probability drops off quickly the greater the distance. 

The only time I saw this not happening was during the mid years of UNIX (1970s-80s) and that was a factor (I think) of excellent documentation, UNIX manual pages, and a strong culture.



I did not expect anyone to respond, but Chris did (this is a paraphrase, it was longer):

Now, I also did some asking around and from what I can tell the two most prevalent reasons why tools such as mine get rewritten are ego or poor documentation.  I have to tell you the latter is one of the bigger problems I see.

What do you think is the reason for not using others tools?  Is it my distance inverse square law of reuse?  Is it poor documentation?  Is it ego?  Is it another reason?  I would appreciate your insight into this tomtoolery.



Thanks and later!



 



 



Thursday, June 2, 2005

Program for Programming?

This summer part of my resolution is to clear my back log of blog posting from students (and add some of my own).  This blog is from Curtis Eckhardt from my Fall Software Engineering course at Stevens.  He poses the question: how does someone get started/accomplished in programming?  Is it solely through classes?   



What is or was your program for programming?   My program began as an undergraduate.  I had taken several classes that introduced programming concepts as part of their class (statistics and laboratory instrumentation) but I had not taken a programming course.  During the month break between the Fall and Spring semesters (1972-1973) I spent the holidays at home and then returned to school for 2+ weeks.  A professor (Don Walter) had given me a key to a room that contained a PDP-8 minicomputer that was used by the psychology lab for presenting and controlling experiments.   After those 2+ weeks I had a thorough grounding in assembler language and continued learning throughout the Spring semester.  That was my introduction to programming, which continued when I entered the graduate program at the University of Pittsburgh in Fall of 1973 and was introduced to the  PDP 15 installation at the Learning Research and Development Center



I am sure there are more current ways to learn programming.  What is your experience?  Do you  try to learn at least one new programming language a year?  I do and I encourage my students to do the same.  On to Curtis's post - later!



Here’s a question that jumped into my mind the last class:



How do you jump into programming?

Honestly? I suppose you could start by buying a few programming books… but that seems a bit overwhelming. I mean there are many areas in programming. Hell, even picking an appropriate programming language can be a pain. Of course, other questions have to be raised before this conversation can go any further. So I’ll use what I know best and setup a scenario based on me:

You’re in college and would like to learn how to program because it appeals to your sensibilities. You’ve taken two programming classes and found that it’s fairly easy to pick up on. You also have in your head all the possibilities that knowing how to program can provide, but don’t know where to start. Being that you’re a mechanical engineer already approaching your junior year, you deem it unwise to switch over to programming engineering. So what do you do?

What I did personally was join a small organization called Windows Interest Group (WIG). The reasoning was simply, “surround myself with people that know how to program and want to program and it’ll rub off on me.” WIG was for a small group of people to get together and learn how to program. The only problem was the fact that the organization was brand new! I mean I was basically one of five people that was interested enough to return consistently. I didn’t learn how to program better, but gained a few more friends.

<Afterthought 12-14-04>
WIG was actually a Microsoft sponsored program. So a lot of the meetings were PowerPoint presentations of .NET and how it’s the “wave of the future” for programming. Promoting .NET was just a ruse to get money out of Microsoft. Even though the focus had to be on .NET technology, learning how to program was still the overall goal. That was fine and dandy, but what I was looking for was to get a group of people to work on a cool programming project. Our group tried twice… since we were all too busy with school and work, nothing was accomplished. Plus, there were only 2 people in the group that could have been lead since everyone else were essentially noobs at programming. Anyway, WIG is still active. In fact, visit the (now outdated) website: http://www.asu.edu/clubs/wig/index.html
</Afterthought 12-14-04>

Without a little direction it’s easy to get overwhelmed and lost in the sea of books and knowledge that’s out there. Where do you start and why? Are taking programming classes the only way to gain guidance? Since time is limited, how does one avoid wasting time?



Monday, April 19, 2004

Book Learning

On Friday I gave a talk at Hobart and William Smith Colleges. It is a revision of the earlier talk I gave at Drexel and can be accessed either at my home page or here. If you are interested, one of the faculty members at Hobart and William Smith, Professor Eck, has written a great introductory text on java that is available on the internet for free! You can get it here.



Speaking of free books, I downloaded this intro calculus book by H. Jerome Keisler of the University of Wisconsin and was very impressed. A post on slashdot recommended it.



One book that is not free but is the introductory and reference text for Artificial Intelligence is Stuart Russell and Peter Norvig's, Artificial intelligence: A modern approach, Prentice Hall, second edition, ISBN 0-13-790395-2. I plan to use it in a future course and it would be a great book for anyone wanting to understand the current issues in AI.



In a later post I will survey some of the more general places on the web for free downloadable texts. I would appreciate any suggestions of worthwhile downloadable texts or comments on the texts I suggested. Later!



Tuesday, November 4, 2003

Rules Rule

In the Intro to Quantitative Software Engineering (CS540) class this week we discussed OO Analysis and Design. During the lecture I went into my usual monologue that OO is too predominant in current CS. I went on to say that there are other really useful and used programming methodologies. Of course this is not a great revelation! However one methodology that has been virtually ignored in modern development practice is rule-based programming and data driven methodology. (So much so that I think that my next blog will be devoted entirely to that.)



So the discussion question is: How aware are you of the rule based/data driven methodology? Has anyone in formal coursework mentioned it? (Besides me) Have you or do you use it in your own development projects? Would you use it if given the chance to learn it? Do you think a Blog and web site devoted to it would be helpful to get you started?



As always thanks for your comments!