Guest Post: Good Programmers Make Bad Designers

I got an email request to publish this article a few days ago.

I was actually on the verge of moving the email to the trash when I noticed the first name of the author: Rand.

For those of you not familiar with the Wheel of Time series, the main character’s name is Rand.

I admit that it’s an embarrassing weak reason to respond to a strange email, but reading some 10,000 pages of a fantasy series obviously messes with your mind.

Then again, it’s probably no stranger than Rand Mendoza wanting to publish his article on this blog to begin with.

Anyways, enjoy…

********

 

Do Not Get a Good Programmer to be a Systems Analyst, Software Engineer or Software Architect

When you are on the lookout for someone who will occupy the coveted position of Software Architect or Designer in your team or company, the first thing that usually comes to mind is to hire the best programmer that you can afford. Don’t. Avoid hiring good programmers for the position. Promoting one of your senior programmers for it is just as bad.

It might sound weird at first. Why should I not get a good programmer to design solutions? After all, she will be designing programs, won’t she? Actually, yes, she will be. But the thing to remember is that designing programs requires a totally different skillset than writing programs or programming.

Let us see why a good programmer will not be a good software designer. But first, let us ask ourselves what makes a programmer good, or even brilliant. To be a good programmer, you must be able to implement real world, critical software. Being able to write a simple text editor is simply not enough.

To be capable of implementing non-trivial, complex programming problems, a programmer needs to have years of experience in a particular programming language. This means she has to focus on this language in order to be fluent in it and to be familiar with its idioms. Herein lies the problem.

To Someone Who Only Has a Hammer, Every Problem Begins to Resemble a Nail

If you focus only on one language to gain proficiency in it, you will be restricted to the paradigm of the problem domain for which your language was designed. In short, if all you know is PHP, then every programming problem starts to look like Web development problems. In the same manner, if Java is all you know, you will try to approach every problem from the object-oriented standpoint even if the problem is better solved using procedural programming as in the majority of systems programming.

Knowing only one or even two programming languages as good programmers should, will severely limit your capability to solve problems. For example, if your language is C, you will find it very difficult to think of the problem at hand in an object-oriented way because your programming language does not readily provide that functionality. Unlike Haskell programmers, C++ programmers cannot approach a problem the functional way either. Whether your programming language offers structs and enums or not can greatly affect how you attempt to dissect the problem. If your language is inadequate or if you only know a few languages, your ability to solve problems efficiently will likewise be hampered.

Language Shapes the Way We Think

Some say that our language shape how we think and perceive the world. I tend to agree. A speaker whose language requires that the gender of nouns be specified obviously thinks differently than someone who thinks that the police are not feminine. Someone who speaks a language that does not distinguish the color Blue from the color Green obviously perceives the world differently compared to a person whose language does.

If we look back at the Trivium, they are described as follows: Grammar deals with how concepts and objects are represented in writing and in speech so that they may be dissected in thought using Logic and thereafter communicated to another mind with the aid of Rhetoric. For our purposes, grammar is the syntax of our programming language. If our language is inadequate, we will also have an incomplete view of objects and concepts and how they are represented.

Language, the kind we use to talk to humans and to computers, clearly affects how we think. The richness and number of the languages we know can either aid or hinder our problem solving capability.

So, Who Would Be a Better Fit?

Therefore, a good programmer, who is a specialist in one or two programming languages, will have limitations in approaching a problem. She is restricted to what her programming language allows her to do. As such, she cannot be a good designer or analyst.

But if we shouldn’t hire a good programmer, who could we call upon to design our software? Certainly not someone who doesn’t know programming at all? Certainly not, but we need someone who is a generalist. A good designer must be familiar with procedural, object-oriented, functional, and logic programming languages—not to mention good software engineering practices. She must not be tied to a single paradigm like the specialist. Of course, she cannot write a complex program herself because of her broad but shallow approach to learning programming languages; nevertheless, she can properly determine the right tool for the task. If the problem is a nail, she can bring someone in who is well versed with a hammer; if the problem is a boulder, well, she could call in the explosive ordnance division instead of pounding it up futilely with a hammer.

76 Comments

  1. emeqerea December 4, 2012 11:35 am 

    #38 is a funny automatic text creation… :)
    Does it mean that for you this is just talk, talk, talk?…

  2. Gerald February 20, 2013 8:29 am 

    I agree with many points in the article and I also agree with many comments that disagree with the article. The different views are interesting. I have another view to add.

    The point is not necessarily how many programming languages you’ve learned, the point is that most programmers have become sequential thinkers. Programming is mostly a sequential paradigm. Most programming languages are sequential, most design languages (UML) are inherently sequential (hierarchies are sequential, state-machines are sequential) and testing is mostly based on sequential scenario’s. However, the systems we make are not sequential, they are concurrent. We live in a concurrent world.

    Concurrent is NOT the property that tasks take place at the same time and communicate with each other. Concurrent is not a synonym for parallel. This is a common mistake by many authors. Concurrent means things *exist* at the same time, that makes a whole. Concurrent implies all varieties of behavior, such as parallel, sequential, choices, and communication. It is compositional and it concerns the total behavior. It is about processes, not about objects. Concurrent thinking is *not* thinking in terms of threads or thread synchronization…not at all! Threads are sequential (sequential paradigm!). It is about thinking in natural concepts that makes our world so understandable.

    Sequential thinking and random thinking are cognitive processes. These are ways how we see our world. I see a lot of sequential thinkers (most software engineers) who are blind to the variety of behaviors that is required to the solution. Their mindset is restricted to the sequential paradigm they know so well. Concurrent thinking combines sequential and random thinking. This allows us to see and appreciate the complexity of a system.

    I think that software engineers (requirements engineers, programmers, designers, architects, testers) need a good understanding of concurrency. They should apply concurrent thinking with different abstractions at each level in the software development process. Furthermore, the concepts allows us to apply mathematics that allows us to develop defect-free software. This is true engineering! This is another story.

  3. Guest Posting Request March 21, 2013 7:24 pm 

    Hello There,

    My name is Marlene and I’m a professional blogger.

    I have over three years of experience writing for the web and have covered plenty of interesting topics.

    I noticed that you have a blog and was wondering if you would be interested in allowing me to write relevant, useful topics on your blog at no cost.

    At this point in my writing career, I simply want to get more visibility for my writing and I will write for free as long as you are okay with me adding a small author bio section next to each blog post about myself.

    Please let me know if you’re interested and if you’d like for me to submit a sample blog post for your approval.

    Thanks a bunch,

    Marlene

  4. jual eiger online April 6, 2013 1:40 am 

    Hi there! I know this is somewhat off topic but I was wondering which blog platform are you using for this website? I’m getting fed up of WordPress because I’ve had issues with hackers and I’m looking at alternatives for another platform. I would be fantastic
    if you could point me in the direction of a good platform

  5. tas eiger May 28, 2013 8:54 pm 

    blind to the variety of behaviors that is required to the solution. Their mindset is restricted to the sequential paradigm they know so well. Concurrent thinking combines sequential and random

  6. Sparepart AC Jual Sparepart AC di SparepartAC.co.id & JualSparepartAC.com May 28, 2013 8:55 pm 

    This particular exclusive eye-catching exclusive dude together with regularly ex-girlfriends besides ex-girlfriends and also ex-girlfriends and also girlfriends or wives recalled for the most part for the most part for the most part due to the fact “Spanish Light” encountered which often generally generally generally unsettled, using discourse maintaining to be able to cooperate along with aid which in turn typically

  7. Cheap Karen Millen 2013 June 22, 2013 9:19 pm 

    Your blog is described on the genuine estate topic which can be my favorite 1. Each of the info in this blog shows your creativity in the actual estate area. So thanks for placing this sort of information and facts in front of me.

  8. Anonymous August 23, 2013 11:57 pm 

    This post is riddled with prejudice and baseless assumptions.

    A great programmer could easily be a great designer and could just as easily be a terrible designer. Much of what is discussed in the post is irrelevant.

  9. Euro Study Consultants September 21, 2013 12:15 am 

    I believe there are many more people that feel really happy to have seen this webpage. You’re very smart writer you know that, I wish to show thanks to you, This is one great result after checking through the net

  10. view it online November 20, 2013 2:28 pm 

    I think that your perspective is deep, its just well thought out and really fantastic to see someone who knows how to put these thoughts down so well. Great job on this Thanks!

  11. hot new music gadgets December 2, 2013 2:38 am 

    This post is very helpful and shows that you have a lot of knowledge on the topic. I will recommend this article to my friends as well. Thanks

  12. rikers island visiting hours January 16, 2014 5:53 am 

    I had been just searching for this short article,want you are able to write more blog later.thanks.

  13. infusionsoft reviews January 29, 2014 1:52 am 

    if you only know a few languages, your ability to solve problems efficiently will likewise be hampered.

  14. the garcinia cambogia supplement January 31, 2014 4:00 am 

    If our language is inadequate, we will also have an incomplete view of objects and concepts and how they are represented.

  15. Karen Millen Dresses February 13, 2014 9:30 am 

    Value every single Karen Millen dress based on latest trends.

  16. Mont Blanc Pens February 13, 2014 9:32 am 

    Its been an awesome reading, really had a great time. Also thanks for sharing this information, which is pretty valuable to me.

  17. boston marathon race day tips June 4, 2014 11:41 pm 

    Nice post. I used to be checking continuously this blog and I am inspired! Very helpful info specially the last part. I take care of such information much.

  18. easy 1 year old birthday party July 11, 2014 3:59 am 

    This post is helpful with an analysis I am doing for a specific group of people. Do you have any other articles to suggest on this topic? Thanks

Leave a Reply