About Me

Training

Nothin But .Net Developer Bootcamp

Navigation

Search

Categories

On this page

Archive

Blogroll

 Agile Developer Venkat's Blog
 Ayende @ Blog
 B#
 Barry Gervin's Software Architecture Perspectives
 Boy Meets World
 Brad Abrams
 Canadian Developers
 Christopher Steen
 Claritude Software News
 Clemens Vasters: Enterprise Development and Alien Abductions
 Coding Horror
 Coding in an Igloo
 Dare Obasanjo aka Carnage4Life
 Darrell Norton's Blog [MVP]
 David Hayden [MVP C#]
 Don Box's Spoutlet
 Eric Gunnerson's C# Compendium
 EZWeb guy: Jeffrey Palermo [C# MVP]
 Fear and Loathing
 Generalities & Details: Adventures in the High-tech Underbelly
 Greg Young [MVP]
 Greg's Cool [Insert Clever Name] of the Day
 IanG on Tap
 Ingo Rammer's Weblog
 ISerializable - Roy Osherove's Blog
 James Kovacs' Weblog
 Jason Haley
 Jean-Luc David
 Jeremy D. Miller -- The Shade Tree Developer
 JetBrains .NET Tools Blog
 Jimmy Nilsson's weblog
 John Bristowe's Weblog
 John Papa [MVP C#]
 Jon Skeet's Coding Blog
 JonGalloway.ToString()
 Jump the Fence or Walk Around
 Lambda the Ultimate - Programming Languages Weblog
 Larkware News
 Lutz Roeder
 Marquee de Sells: Chris's insight outlet
 Martin Fowler's Bliki
 Mike Nichols - SonOfNun Technology
 MSDN Magazine - .NET Matters
 MSDN Magazine - All Articles
 OdeToCode Blogs
 Onion Blog
 Planet TW
 Raymond Lewallen [MVP]
 Rockford Lhotka
 RodMan's Corner
 Roger Johansson's blog
 Sahil Malik - blah.winsmarts.com
 Sam Gentile's Blog
 Scott Bellware [MVP]
 Scott Hanselman's Computer Zen
 ScottGu's Blog
 secretGeek
 Service Station, by Aaron Skonnard
 Signum sine tinnitu--by Guy Kawasaki
 Stephen Toub
 Steve Eichert's Blog
 Steven Rockarts
 The Blog Ride
 The Coding Hillbilly
 The Daily WTF
 TheServerSide.net: News
 Tim Gifford
 Vance Morrison's Weblog
 you've been HAACKED

Disclaimer
The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.

RSS 2.0 | Atom 1.0 | CDF

Send mail to the author(s) E-mail

Total Posts: 407
This Year: 132
This Month: 3
This Week: 0
Comments: 1082

 Tuesday, June 03, 2008
Tuesday, June 03, 2008 2:33:53 AM (Mountain Standard Time, UTC-07:00) ( Insipration | Programming )

This post is in direct reference to the brilliant paper titled "The Humble Programmer" written by the software genius Edsger Dijkstra.

If you take the time to read this paper, keep in mind that it was originally published in 1972!! Here are 2 (of the many) that resound very strongly with me:

"But one should not first make the program and then prove its correctness, because then the requirement of providing the proof would only increase the poor programmer's burden. On the contrary: the programmer should let correctness proof and program grow hand in hand. Argument three is essentially based on the following observation. If one first asks oneself what the structure of a convincing proof would be and, having found this, then constructs a program satisfying this proof's requirements, then these correctness concerns turn out to be a very effective heuristic guidance. By definition this approach is only applicable when we restrict ourselves to intellectually manageable programs, but it provides us with effective means for finding a satisfactory one among these."

If that section in bold does not scream TDD to you, then I don't know what will!!

Another good section talking about languages and how we can abuse them is here:

"The competent programmer is fully aware of the strictly limited size of his own skull; therefore he approaches the programming task in full humility, and among other things he avoids clever tricks like the plague. In the case of a well-known conversational programming language I have been told from various sides that as soon as a programming community is equipped with a terminal for it, a specific phenomenon occurs that even has a well-established name: it is called "the one-liners". It takes one of two different forms: one programmer places a one-line program on the desk of another and either he proudly tells what it does and adds the question "Can you code this in less symbols?" —as if this were of any conceptual relevance!— or he just asks "Guess what it does!". From this observation we must conclude that this language as a tool is an open invitation for clever tricks; and while exactly this may be the explanation for some of its appeal, viz. to those who like to show how clever they are, I am sorry, but I must regard this as one of the most damning things that can be said about a programming language"

And finally he shares a piece of advice that is awesome:

"We shall do a much better programming job, provided that we approach the task with a full appreciation of its tremendous difficulty, provided that we stick to modest and elegant programming languages, provided that we respect the intrinsic limitations of the human mind and approach the task as Very Humble Programmers"

Brilliant advice from an equally brilliant man!!

Develop With Passion

Tuesday, June 03, 2008 6:09:12 AM (Mountain Standard Time, UTC-07:00)
Hey JP,

Great post. I agree that Dijkstra was a genius. I even agree with his statement that computer science is really just mathematics. I've been reading a lot of the posts over at Good Math (http://scienceblogs.com/goodmath), and he's convinced me of the comp. sci. is really just math.

When it comes to humility, I find a couple things appropriate. For one, look at all the people who are way better than you at coding things. For me, it's not hard to find; for you, it might be. :) I have you, Miguel Castro, Scott Hanselman, and an infinity of other people who are better coders and designers than myself. On the other hand, I don't think it's a bad thing to be giving myself an ego boost, especially if I'm helping others to boost their egos in the process. A simpler way to put it might be this: I can be proud of a design that I made that works, and is a strong design (presumably I can give reasons for why). I don't think anyone would argue with that. However, I can actually be MORE proud if I can not only come up with the design and implement it, but also bring others to understanding with it and increase their ability to design because of it. Or, if they find something wrong with the design, then I'm still learning from it, so even if my ego has to take a back seat, my skills do not. And still learning from it increases my ego a little bit, knowing that I am someone who CAN learn, and who isn't terrible at it. Seems like some kind of insane positive feedback loop. Oh well. :)
Kyle
Tuesday, June 03, 2008 9:30:27 AM (Mountain Standard Time, UTC-07:00)
Hey Kyle,

Those are great words of wisdom. For myself, I think the reason I have truly been able to enjoy being a programmer is doing exactly what you say. I know there are lots of developers who are better than me, so instead of trying to "keep up" I just have to challenge myself to be better than I was yesterday. And most importantly, to keep ensuring that I am having fun!!

Even when I look back to years ago when I was truly hacking things together, I still remember always having a blast. And when I learned to do things better, I did not regret the mistakes I made, as that is where the learning happens!!

God Bless You and thanks for the awesome comment.

JP
Wednesday, June 04, 2008 6:28:06 AM (Mountain Standard Time, UTC-07:00)
As a professional Perl programmer, the part about one liners hits home. Languages can be abused terribly, few more so than Perl without strict and warnings modes enabled. Nonetheless I write one liners almost daily to prototype ideas, generate once off reports, etc. Of necessity they are pretty terse. Showing some comparatively plain Perl to a friend used to C# had him recoil in horror.

However I think the fact a language can be so useful for one-liners says something about how useful and expressive it can be. A large application is made up of many units or blocks of code, and to an extent the ability to fit it all in your head is limited by simple, verbose languages. If I can express more in a line (but still do it legibly), then the whole application is shorter, being made of fewer but more succinct phrases.

Dijkstra didn't know of languages like Java and C# that are so verbose, you're mad to tackle them without a multimillion LOC IDE supporting you. Languages wherein, if you pick a single line at random there is a fair chance it turns out to be machine generated boilerplate. If asked to explain what such a line does, I may well say "it keeps the compiler happy". I wouldn't be surprised if Dijkstra had thought that sort of thing to be worse.
Thursday, June 05, 2008 1:01:11 PM (Mountain Standard Time, UTC-07:00)
tests != proofs
Chase Saunders
Name
E-mail
Home page

Comment (HTML not allowed)  

Enter the code shown (prevents robots):