Your Ad Here

Tuesday, March 17, 2009

Real Ultimate Programming Power


A common response to The Ferengi Programmer:



From what I can see, the problem of "overly-rule-bound developers" is nowhere near the magnitude of the problem of "developers who don't really have a clue."


The majority of developers do not suffer from too much design patterns, or too much SOLID, or agile, or waterfall for that matter. They suffer from whipping out cowboy code in a pure chaos environment, using simplistic drag & drop, data driven, vb-like techniques.



Absolutely.


But here's the paradox: the types of programmers who would most benefit from these guidelines, rules, principles, and checklists are the least likely to read and follow them. Throwing a book of rules at a terrible programmer just creates a terrible programmer with a bruise on their head where the book bounced off. This is something I discussed previously in Mort, Elvis, Einstein, and You:



Thus, if you read the article, you are most assuredly in the twenty percent category. The other eighty percent are not actively thinking about the craft of software development. They would never find that piece, much less read it. They simply don't read programming blogs-- other than as the result of web searches to find quick-fix answers to a specific problem they're having. Nor have they read any of the books in my recommended reading list. The defining characteristic of the vast majority of these so-called "vocational" programmers is that they are unreachable. It doesn't matter what you, I or anyone else writes here -- they'll never see it.


In the absence of mentoring and apprenticeship, the dissemination of better programming practices is often conveniently packaged into processes and methodologies. How many of these do you know? How many have you practiced?


















1969Structured programming
1975Jackson Structured Programming
1980Structured Systems Analysis and Design Methodology
1980Structured Analysis and Design Technique
1981Information Engineering
1990Object-oriented programming
1991Rapid Application Development
1990Virtual finite state machine
1995Dynamic Systems Development Method
1998Scrum
1999Extreme Programming
2002Enterprise Unified Process
2003Rational Unified Process
2004Constructionist Design Methodology
2005Agile Unified Process


And how do we expect the average developer to find out about these? In a word, marketing. (I could have substituted religion here without much change in meaning.) It's no coincidence that a lot of the proponents of these methodologies make their living consulting and teaching about them. And they have their work cut out for them, too, because most programmers are unreachable:



I was sitting in my office chatting with my coworker Jeremy Sheeley. Jeremy leads the dev team for Vault and Fortress. In the course of our discussion, I suddenly realized that none of our marketing efforts would reach Jeremy. He doesn't go to trade shows or conferences. He doesn't read magazines. He doesn't read blogs. He doesn't go to user group meetings.


Jeremy is a decision-maker for the version control tool used by his team, and nothing we are doing would make him aware of our product. How many more Jeremies are out there?



Millions! As Seth Godin notes, the unreachable are now truly unreachable -- at least not through marketing.


So, if we know the programmers who would benefit most from these rules and principles and guidelines are:



  1. highly unlikely to ever read them of their own volition
  2. almost impossible to reach through traditional religionmarketing


Remind me again -- who, exactly, are we writing these principles, rules, guidelines, and methodologies for? If we're only reaching the programmers who are thoughtful enough to care about their work in the first place, what have we truly accomplished? I agree with Jeff R., who left this comment:



There's nothing wrong with the SOLID principles; they make sense to me. But I've been programming since the days of card readers and teletypes. They won't make sense to those with little experience. They don't know when or how to apply them appropriately. They get bogged down in the attempt.


So trying to follow them changes the focus from result to process. And that's deadly.


It's the job of the lead programmer or manager to see that good principles are followed, perhaps by guiding others invisibly, without explicitly mandating or even mentioning those principles.



In my effort to suck less every year, I've read hundreds of programming books. I've researched every modern programming methodology. I'm even a Certified Scrum Mastertm. All of it, to me, seems like endlessly restated versions of four core fundamentals. But "four core fundamentals?" that's awful marketing. Nobody will listen in rapt, adoring attention to me as I pontificate, nor will they pay the exorbitant consulting fees I demand to support the lifestyle I have become accustomed to. It simply won't do. Not at all. So, I dub this:


The Atwood System of Real Ultimate Programming Power




  1. DRY

  2. KISS

  3. YAGNI

  4. NAMBLA



All those incredibly detailed rules, guidelines, methodologies, and principles? YAGNI. If it can't be explained on a single double-spaced sheet of paper, it's a waste of your time. Go read and write some code! And if you can't grok these fundamentals in the first three or four years of your programming career, well -- this slightly modified R. Lee Ermey quote comes to mind.


My name is Jeff, and I can't stop thinking about programming. And neither should you.





[advertisement] In charge of a mountain of Windows servers? PA Server Monitor to the rescue! Download the Free Trial!




Read More...

Your Ad Here

Internet Explorer Release Candidate 1 Now Available

Internet Explorer team posted the IE8 Release Candidate 1 for public download.� Changes include improved security, performance and compatibility. According to the team blog RC1 is also platform complete.

Internet Explorer 8 RC1 download links:
IE8 RC1 for Windows XP
IE8 RC1 for Windows Vista/Server 2008
IE8 RC1 for Windows Vista/Server 2008 64-bit


Related posts:Download Windows Vista Service Pack 1How [...]


Related posts:
  1. Download Windows Vista Service Pack 1
  2. How To Add Internet Explorer Icon to the Desktop in Vista
  3. How To Install Windows 7 Calculator in Windows Vista


Read More...
Your Ad Here

Computer Tricks


how to make folders invisible and how to password protect files

www.youtube.com


Read More...
Your Ad Here

Open source my OIOIC, a completely new object-oriented mechanism for the C.

OIOIC is a completely new object-oriented mechanism for the C programming language.

Using OIOIC, you can describe the flower, birds, grass, insects, trees, houses ...
Using OIOIC, you can describe the elements, atoms, protons, electrons ...
Using OIOIC, you can describe the earth, the sun, the Milky Way galaxy, collapsar ...
Using OIOIC, you can describe ...

1. OIOIC perfectly supplies the gap of object-oriented technology for the C programming language;
2. OIOIC perfectly solved the multiple inheritance problem in the Software World;
3. OIOIC perfectly objectivizes multithreading access control of object;
4. OIOIC unifies the norm of components in the Software World;
5. OIOIC unifies the structure of code tree in the Software World;
6. OIOIC unifies the thinking of object-oriented programming in the Software World;
7. OIOIC unifies all advanced programming languages in the Software World, to make the C programming language as the preferred.

For further information, please download the "OIOIC-Primer-2nd-Edition-English.tar.gz". (the English version of << OIOIC Primer >> )
Downloads - oioic - Google Code (http://code.google.com/p/oioic/downloads/list)

Welcome your advice!

Read More...
Your Ad Here

List of Top 90 Gmail Tools And Tips

Gmail is by far the best email service eve, it has the best spam filter and so many other feature that make it the best email service, One of the reason why Gmail is the best is that you can add more functionality to provide even more features and to make Gmail easier and fun [...]


Related posts:
  1. Check Your Username If It Taken or Available At More Than 60 Sites
  2. Demonoid Is Back Online Free Invitation For Every One
  3. How To Access Your Google Docs Offline


Read More...
Your Ad Here

How To Automatically add lyrics to your MP3s

Do you want to display lyrics on your iTunes or winamp when playing MP3? so you can read the lyrics while listening to your favorite song in your iPod. But the only problem is that iTunes store doesn�t provide lyrics, just like the way they provide album art. You�ll have to manually fetch lyrics for [...]


Related posts:
  1. How To Automatically Update Firefox Addons And Themes
  2. How to Capture Screenshots from Windows Media Player


Read More...
Your Ad Here

How To Download Tagged Facebook Pics

I accidently fount great Facebook app called Get My Tagged Pics  that allow you to download Tagged pics.
Get My Tagged Pics allow you to download tagged pics in batches of 10, rather than having to download each one separately


Related posts:Download Olympic 2008 ScreensaversTrick To Download windows vista SP2 “pre beta” Directly via windows update


Related posts:
  1. Download Olympic 2008 Screensavers
  2. Trick To Download windows vista SP2 “pre beta” Directly via windows update


Read More...
Your Ad Here

How To Bypass Your ISP And/or Your Country Restrictions

“Site is blocked”, “the administrator has blocked this site”, “Error 403 Forbidden Unauthorized”. All of this is just example of the frustrated error messages you get if you were trying to access website that has been blocked, may be you at work and the administrator is blocking some cretin sites, or may be your ISP [...]


Related posts:
  1. How to Access Blocked Websites
  2. How To Test if your ISP is manipulating BitTorrent traffic (throttling P2P traffic)
  3. Making Vista Faster a Complete How To Guide Part One


Read More...
Your Ad Here

Procrastination and the Bikeshed Effect


The book Producing Open Source Software: How to Run a Successful Free Software Project is a fantastic reference for anyone involved in a software project -- whether you're running the show or not.


Producing Open Source Software: How to Run a Successful Free Software Project


In addition to the dead-tree edition, the book is available in an appropriately open source free format at the official website. The entire book is great, and worth a thorough read, even if you think open source is communism.


My favorite chapter is the one on communication. While important on any software project, communication is especially vital on open source projects, which are "bewilderingly diverse both in audiences and communication mechanisms." One particular pitfall of open source projects is that, if you don't manage the project carefully, you can tend to attract developers who are more interested in discussion than writing code. It's a subtle but pernicious problem -- communication gone wrong.



Although discussion can meander in any topic, the probability of meandering goes up as the technical difficulty of the topic goes down. After all, the greater the technical difficulty, the fewer participants can really follow what's going on. Those who can are likely to be the most experienced developers, who have already taken part in such discussions thousands of times before, and know what sort of behavior is likely to lead to a consensus everyone can live with.


Thus, consensus is hardest to achieve in technical questions that are simple to understand and easy to have an opinion about, and in "soft" topics such as organization, publicity, funding, etc. People can participate in those arguments forever, because there are no qualifications necessary for doing so, no clear ways to decide (even afterward) if a decision was right or wrong, and because simply outwaiting other discussants is sometimes a successful tactic.


The principle that the amount of discussion is inversely proportional to the complexity of the topic has been around for a long time, and is known informally as the Bikeshed Effect.



We've struggled with this on Stack Overflow, too. The broad soft questions tend to get much more interest and attention than the narrow, technical coding questions that we originally intended the site for. We've made adjustments, but it's an unavoidable aspect of group dynamics. Who are we kidding? It's fun to discuss what color the bikeshed should be painted. Everyone has an opinion about their favorite color scheme.


shed painting


What many people don't realize is that the bikeshed effect is, in fact, a form of procrastination. And it can suck in highly technical developers, along with everyone else.



The psychologists handed out questionnaires to a group of students and asked them to respond by e-mail within three weeks. All the questions had to do with rather mundane tasks like opening a bank account and keeping a diary, but different students were given different instructions for answering the questions. Some thought and wrote about what each activity implied about personal traits: what kind of person has a bank account, for example. Others wrote simply about the nuts and bolts of doing each activity: speaking to a bank officer, filling out forms, making an initial deposit, and so forth. The idea was to get some students thinking abstractly and others concretely. Then the psychologists waited. And in some cases, waited and waited. They recorded all the response times to see if there was a difference between the two groups, and indeed there was a significant difference.


The findings, reported in Psychological Science, a journal of the Association for Psychological Science, were very clear. Even though all of the students were being paid upon completion, those who thought about the questions abstractly were much more likely to procrastinate -- and in fact some never got around to the assignment at all. By contrast, those who were focused on the how, when and where of doing the task e-mailed their responses much sooner, suggesting that they hopped right on the assignment rather than delaying it.



This is one reason why I'm so down on architecture astronauts. I find that the amount of discussion on a software feature is inversely proportional to its value. Sure, have some initial discussion to figure out your direction, but the sooner you can get away from airy abstractions, and down to the nuts and bolts of building the damn thing, the better off you -- and your project -- will be.


Put another way, what's the hardest thing you have to do every day? Deciding what to ignore, so you can stop procrastinating and get stuff done. The next time you feel yourself getting drawn into a protracted bikeshed discussion, consider: shouldn't you be building something instead?





[advertisement] Improve Your Source Code Management using Atlassian Fisheye - Monitor. Search. Share. Analyze. Try it for free!



Read More...

Your Ad Here

The Promise and Peril of Jumbo Frames


We sit at the intersection of two trends:



  1. Most home networking gear, including routers, has safely transitioned to gigabit ethernet.
  2. The generation, storage, and transmission of large high definition video files is becoming commonplace.


If that sounds like you, or someone you know, there's one tweak you should know about that can potentally improve your local network throughput quite a bit -- enabling Jumbo Frames.


The typical UDP packet looks something like this:


udp packet diagram


But the default size of that data payload was established years ago. In the context of gigabit ethernet and the amount of data we transfer today, it does seem a bit.. anemic.



The original 1,518-byte MTU for Ethernet was chosen because of the high error rates and low speed of communications. If a corrupted packet is sent, only 1,518 bytes must be re-sent to correct the error. However, each frame requires that the network hardware and software process it. If the frame size is increased, the same amount of data can be transferred with less effort. This reduces CPU utilization (mostly due to interrupt reduction) and increases throughput by allowing the system to concentrate on the data in the frames, instead of the frames around the data.


I use my beloved energy efficient home theater PC as an always-on media server, and I'm constantly transferring gigabytes of video, music, and photos to it. Let's try enabling jumbo frames for my little network.


The first thing you'll need to do is update your network hardware drivers to the latest versions. I learned this the hard way, but if you want to play with advanced networking features like Jumbo Frames, you need the latest and greatest network hardware drivers. What was included with the OS is unlikely to cut it. Check on the network chipset manufacturer's website.


Once you've got those drivers up to date, look for the Jumbo Frames setting in the advanced properties of the network card. Here's what it looks like on two different ethernet chipsets:


gigabit jumbo marvell yukon advanced settings
 
gigabit jumbo realtek advanced settings


That's my computer, and the HTPC, respectively. I was a little disturbed to notice that neither driver recognizes exactly the same data payload size. It's named "Jumbo Frame" with 2KB - 9KB settings in 1KB increments on the Realtek, and "Jumbo Packet" with 4088 or 9014 settings on the Marvell. I know that technically, for jumbo frames to work, all the networking devices on the subnet have to agree on the data payload size. I couldn't tell quite what to do, so I set them as you see above.


(I didn't change anything on my router / switch, which at the moment is the D-Link DGL-4500; note that most gigabit switches support jumbo frames, but you should always verify with the manufacturer's website to be sure.)


I then ran a few tests to see if there was any difference. I started with a simple file copy.


Default network settings


gigabit jumbo frames disabled file copy results


Jumbo Frames enabled


gigabit jumbo frames enabled file copy results


My file copy went from 47.6 MB/sec to 60.0 MB/sec. Not too shabby! But this is a very ad hoc sort of testing. Let's see what the PassMark Network Benchmark has to say.


Default network settings


gigabit jumbo frames disabled, throughput graph


Jumbo Frames enabled


gigabit jumbo frames enabled, throughput graph


This confirms what I saw with the file copy. With jumbo frames enabled, we go from 390,638 kilobits/sec to 477,927 kilobits/sec average. A solid 20% improvement.


Now, jumbo frames aren't a silver bullet. There's a reason jumbo frames are never enabled by default: some networking equipment can't deal with the non-standard frame sizes. Like all deviations from default settings, it is absolutely possible to make your networking worse by enabling jumbo frames, so proceed with caution. This SmallNetBuilder article outlines some of the pitfalls:



1) For a large frame to be transmitted intact from end to end, every component on the path must support that frame size.


The switch(es), router(s), and NIC(s) from one end to the other must all support the same size of jumbo frame transmission for a successful jumbo frame communication session.


2) Switches that don't support jumbo frames will drop jumbo frames.


In the event that both ends agree to jumbo frame transmission, there still needs to be end-to-end support for jumbo frames, meaning all the switches and routers must be jumbo frame enabled. At Layer 2, not all gigabit switches support jumbo frames. Those that do will forward the jumbo frames. Those that don't will drop the frames.


3) For a jumbo packet to pass through a router, both the ingress and egress interfaces must support the larger packet size. Otherwise, the packets will be dropped or fragmented.


If the size of the data payload can't be negotiated (this is known as PMTUD, packet MTU discovery) due to firewalls, the data will be dropped with no warning, or "blackholed". And if the MTU isn't supported, the data will have to be fragmented to a supported size and retransmitted, reducing throughput.



In addition to these issues, large packets can also hurt latency for gaming and voice-over-IP applications. Bigger isn't always better.


Still, if you regularly transfer large files, jumbo frames are definitely worth looking into. My tests showed a solid 20% gain in throughput, and for the type of activity on my little network, I can't think of any downside.





[advertisement] Improve Your Source Code Management using Atlassian Fisheye - Monitor. Search. Share. Analyze. Try it for free!



Read More...

Your Ad Here