Sign In

Communications of the ACM


What Does Saying That 'Programming Is Hard' Really Say, and About Whom?

hands at keyboard typing code


The commonly held belief that programming is inherently hard lacks sufficient evidence. Stating this belief can send influential messages that can have serious unintended consequences including inequitable practices.4 Further, this position is most often based on incomplete knowledge of the world's learners. More studies need to include a greater diversity of all kinds including but not limited to ability, ethnicity, geographic region, gender identity, native language, race, and socioeconomic background.

Language is a powerful tool. Stating that programming is hard should raise several questions but rarely does. Why does it seem routinely acceptable—arguably fashionable—to make such a general and definitive statement? Why are these statements often not accompanied by supporting evidence? What is the empirical evidence that programming, broadly speaking, is inherently hard, or harder than possible analogs such as calculus in mathematics? Even if that evidence exists, what does it mean in practice? In what contexts does it hold? To whom does it, and does it not, apply?


Alexander Repenning

Dear Brett,

Thank you for the stimulating viewpoint. A question. You are concluding that We need to stop blaming programming for being hard and focus on making programming more accessible and enjoyable, for everyone Isnt that what the field of computer science education (e.g., Logo) has been doing for at least 50 years?

Why does programming need to be easy? Observe kids playing sometimes mind bogglingly hard video games. Not because they are easy, but because they are hard. Papert called this hard fun. One should look at different extremes of the cognitive easy/hard spectrum. There is the 1 hour, Hour of Code-type programming, experience focusing on broadening participation and fun. However, there are 9,999 more hours to make it to the 10,000 hour (popular science) mark of level of true expertise. Reaching the 1 hour mark may not be hard but it is not clear what that suggests regarding the 10,000 hour one.

One problem with the viewpoint is the focus on cognitive challenges. When I started our research interviewing a middle school girl about her perspective of programming she said that Programming is hard and boring. Notice, in addition to the cognitive challenge of programming to be hard there is the equally important affective challenge of programming to be boring. This is not a trade off. Students, teachers, parents, and citizens of the 21th century in general dont fully appreciate the return on investment of programming. Why would I want to write a program to compute boring prime numbers? More generally, what is the compelling instrumental motivation behind the skill of programming? Some people find an answer, but many dont. And that is OK.

While overall your viewpoint suggests a somewhat grim picture regarding the negative perception of programming in one aspect it may be overly optimistic when you suggest that Block-based programming has become extremely successful, particularly with younger children. Did block-based programming really make programming easy? Using programming is hard and boring as a two dimensional research space, over the last 25 years, we tried to transition from hard and boring to accessible and exciting by introducing block-based programming (e.g., AgentSheets) and crafting game-design based curricula (e.g., Scalable Game Design). While we did findempirically that programming has become more accessible and game design is broadly engaging, the impact of blocks-based programming is generally massively overestimated. Blocks-based programming has removed one important obstacle (syntax), which made programming hard. But just as spell checking is not turning automagically everybody into an accomplished author, syntax is probably the smallest challenge we were able to remove so far from programming. It is a little bit like wanting to climb Mount Everest. When you fly from your home town to Kathmandu you may have come a long way (just like syntax), but the true challenge of climbing the mountain is still ahead of you. Making programming more accessible and enjoyable is about beginning the actual climb. It is about creating a new generation of tools and didactic strategies to support semantics and even the pragmatics of programming.

All the best, Alex

Alexander Repenning
University of Colorado at Boulder and PH FHNW Switzerland

Dan Sutton

Programming isn't hard: it's either obvious or impossible, depending on who you are. My observations over the last forty years spent programming lead me to believe that the ability to program is inbuilt: you can't teach someone to have it - they either do or don't: it's a specific type of madness.

You can't teach a person to program: you can merely show them the syntax and how it works - past that point, they can either do it or not. Writing a program to generate prime numbers is either fascinating, leading to a sense of deep satisfaction, or it isn't. It's not possible to make that fascinating; it's not possible to make someone derive enjoyment from sitting in front of a screen, obsessing over the same, esoteric concept for hours at a time; it's not possible to make someone's brain operate with the peculiarly lateral-yet-rational type of proto-schizophrenia a programmer's brain employs: the art of lateral thinking fused with the science of rational thinking: programming is the only art form which has definite right and wrong answers: cast your mind out irrationally in order to latch onto rational ideas.

A programmer doesn't sit there, trying to get a machine to perform a task: he sits there, explaining to a friend what's on his mind - and that friend is partly the computer, but mostly himself (hence the schizophrenia), the computer being merely a mandala which allows him to concentrate his thoughts properly.

In short, past the point of writing ten-line test programs as class exercises, a person can either program or they can't: their brains either work that way or they don't - long before they ever encounter a computer or a programming language.

Brett Becker

Hi Alex,

Thanks for your comment. I do feel that the computing education community has been working for a long time towards making programming more accessible and enjoyable. Much work remains however, and the community should occasionally examine and question progress in order to continue as best as possible. Should programming be easy? Does it need to be easy? Should it be hard? Does it need to be hard? All of these questions can be used to investigate our progress and intentions. They may never have agreed answers, but they still have utility in helping us gauge where things stand and where we are going.

I do think that block-based programming is successful at engaging many younger students and lowering some entry barriers. Perhaps a good answer for the question: Is programming hard or not? is: It is both. There are many dedicated professionals who put a lot of effort, knowledge, and experience into constructing safe, reliable, efficient, secure, and often very complex code. That is not easy, and it takes a lot of learning to get there. There are many teachers, mentors and colleagues who have put in a lot of work on the education side. All of these people were once students of some description even if self-taught. This all takes community and it is great that there are so many passionate people in computing.

I agree that making programming more accessible and enjoyable is about beginning the climb. I want beginners to be able to start their journeys without being discouraged unnecessarily, and I certainly don't want them to be discouraged before they even begin. Of course, every journey is different, and everyone will start the climb a little differently.

Thanks again,

Brett Becker
University College Dublin

Displaying all 3 comments

Log in to Read the Full Article

Sign In

Sign in using your ACM Web Account username and password to access premium content if you are an ACM member, Communications subscriber or Digital Library subscriber.

Need Access?

Please select one of the options below for access to premium content and features.

Create a Web Account

If you are already an ACM member, Communications subscriber, or Digital Library subscriber, please set up a web account to access premium content on this site.

Join the ACM

Become a member to take full advantage of ACM's outstanding computing information resources, networking opportunities, and other benefits.

Subscribe to Communications of the ACM Magazine

Get full access to 50+ years of CACM content and receive the print version of the magazine monthly.

Purchase the Article

Non-members can purchase this article or a copy of the magazine in which it appears.