`
hlzhao
  • 浏览: 25453 次
  • 性别: Icon_minigender_1
  • 来自: 常州
最近访客 更多访客>>
社区版块
存档分类
最新评论

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.

 

From : http://www.caffeinatedcoder.com/guest-post-good-programmers-make-bad-designers/

 

分享到:
评论

相关推荐

    Learning iOS Design A Hands-On Guide for Programmers and Designers 无水印原版pdf

    Learning iOS Design A Hands-On Guide for Programmers and Designers 英文无水印原版pdf pdf所有页面使用FoxitReader、PDF-XChangeViewer、SumatraPDF和Firefox测试都可以打开 本资源转载自网络,如有侵权,请...

    Linux for Programmers and Users

    Provides a good foundation of understanding for the most often-used Linux utilities. Devotes a chapter to helpful installation information for those who must install their own systems. Includes ...

    WTL for MFC Programmers

    WTL for MFC Programmers, Chinese Version Prologue WTL for MFC Programmers, Part I - ATL GUI Classes - WTL WTL for MFC Programmers, Part II - WTL GUI Base Classes - WTL WTL for MFC Programmers, Part ...

    c20-programmers-3rd.epub

    Written for programmers with a background in another high-level language, C++20 for Programmers applies the Deitel signature live-code approach to teaching Modern C++ and explores the C++20 language ...

    The Problem With Software: Why Smart Engineers Write Bad Code

    The difference between good and bad software can be a single line of code, and Barr includes code to illustrate the consequences of seemingly inconsequential choices by programmers. Looking to the ...

    Shaders for Game Programmers and Artists + Source

    By taking a simple, easy-to-follow approach to the high-level language of this topic and separating itself from 3D API's "Shaders for Game Programmers and Artists" brings the world of real-time ...

    The GNU Make Book.pdf

    GNU make is the most widely used build automation tool, but it can be challenging to master and its terse language can be tough to parse for even experienced programmers. Those who run into ...

    MIPS® Architecture For Programmers

    《MIPS架构编程指南》是一本深入探讨MIPS(Microprocessor without Interlocked Pipeline Stages,无锁步流水线微处理器)架构的专业书籍,主要面向32位和64位的系统设计者、软件开发者以及对计算机体系结构感兴趣的...

    Math for Programmers

    "Math for Programmers" "Math for Programmers"一书涵盖了数学和编程的交叉领域,旨在帮助程序员和开发者更好地理解和应用数学概念在编程中的应用。该书涵盖了从基本数学符号到高级数学概念的所有方面,包括代数、...

    Beginning COBOL for Programmers

    Beginning COBOL for Programmers is a comprehensive, sophisticated tutorial and modular skills reference on the COBOL programming language for established programmers. This book is for you if you are a...

    FMOD Programmers API Win32

    FMOD Programmers API Win32 是一款强大的音频处理库,专为Windows平台的开发者设计,提供了C++和C#两种编程接口。这个API允许程序员轻松地集成各种音频格式,如MP3, OGG, WAV等,到他们的应用程序中。下面我们将...

    c++11 for programmers

    ### C++11 for Programmers #### 概述 《C++11 for Programmers》是一本由Deitel & Associates, Inc.出版的书籍,作者是Paul Deitel和Harvey Deitel。本书作为Deitel® Developer Series系列的一部分,旨在帮助...

    C+ + for Programmers

    C+ + for Programmers.chm PRACTICAL, EXAMPLE-RICH COVERAGE OF: Classes, Objects, Encapsulation, Inheritance, Polymorphism Integrated OOP Case Studies: Time, GradeBook, Employee Industrial-Strength,...

Global site tag (gtag.js) - Google Analytics