Sort By:

Nine Things I Didn't Know I Would Learn Being an Engineer Manager

Many of the skills aren't technical at all.

by Kate Matsudaira | May 9, 2016

CACM This article appears in print in Communications of the ACM, Volume 59 Issue 6


What Are You Trying to Pull?

A single cache miss is more expensive than many instructions.

by George Neville-Neil | April 27, 2016


The Flame Graph

This visualization of software execution is a new necessity for performance profiling and debugging.

by Brendan Gregg | April 20, 2016

CACM This article appears in print in Communications of the ACM, Volume 59 Issue 6


Delegation as Art

Be someone who makes everyone else better.

by Kate Matsudaira | April 18, 2016

CACM This article appears in print in Communications of the ACM, Volume 59 Issue 5


Use-Case 2.0

The Hub of Software Development

by Ivar Jacobson, Ian Spence, Brian Kerr | April 5, 2016

CACM This article appears in print in Communications of the ACM, Volume 59 Issue 5


GNL is Not Linux

What's in a Name?

by George Neville-Neil | March 30, 2016


Code Hoarding

Committing to commits, and the beauty of summarizing graphs

by George Neville-Neil | February 23, 2016


The Paradox of Autonomy and Recognition

by Kate Matsudaira | February 16, 2016

CACM This article appears in print in Communications of the ACM, Volume 59 Issue 3


Pickled Patches

On repositories of patches and tension between security professionals and in-house developers

by George Neville-Neil | December 9, 2015


It Probably Works

Probabilistic algorithms are all around us--not only are they acceptable, but some programmers actually seek out chances to use them.

by Tyler McMullen | December 7, 2015

CACM This article appears in print in Communications of the ACM, Volume 58 Issue 11


Automation Should Be Like Iron Man, Not Ultron

The "Leftover Principle" Requires Increasingly More Highly-skilled Humans.

by Thomas A. Limoncelli | October 31, 2015


Lean Software Development - Building and Shipping Two Versions

Catering to developers' strengths while still meeting team objectives

by Kate Matsudaira | October 31, 2015


Still Finding the Right Questions

Branching out and changing with the times at acmqueue

October 22, 2015


Hickory Dickory Doc

On null encryption and automated documentation

by George Neville-Neil | June 11, 2015


Lazarus Code

No one expects the Spanish Acquisition.

by George Neville-Neil | May 6, 2015


The Science of Managing Data Science

Lessons learned managing a data science research team

by Kate Matsudaira | April 29, 2015

CACM This article appears in print in Communications of the ACM, Volume 58 Issue 6


Using Free and Open Source Tools to Manage Software Quality

An agile process implementation

by Phelim Dowling, Kevin McGrath | April 27, 2015

CACM This article appears in print in Communications of the ACM, Volume 58 Issue 7


Raw Networking

Relevance and repeatability

by George Neville-Neil | February 2, 2015


A New Software Engineering

What happened to the promise of rigorous, disciplined, professional practices for software development?

by Ivar Jacobson, Ed Seidewitz | November 29, 2014

CACM This article appears in print in Communications of the ACM, Volume 57 Issue 12


The Responsive Enterprise: Embracing the Hacker Way

Soon every company will be a software company.

by Erik Meijer, Vikram Kapoor | November 3, 2014


ACM and the Professional Programmer

How do you, the reader, stay informed about research that influences your work?

by Vinton G. Cerf | July 2, 2014


Outsourcing Responsibility

What do you do when your debugger fails you?

by George Neville-Neil | July 1, 2014


Forked Over

Shortchanged by open source

by George Neville-Neil | April 23, 2014


Major-league SEMAT: Why Should an Executive Care?

Becoming better, faster, cheaper, and happier

by Ivar Jacobson, Pan-Wei Ng, Ian Spence, Paul E. McMahon | February 27, 2014


The Logic of Logging

And the illogic of PDF

by George Neville-Neil | February 24, 2014


This is the Foo Field

The meaning of bits and avoiding upgrade bog downs

by George Neville-Neil | January 14, 2014


The Software Inferno

Dante's tale, as experienced by a software architect

by Alex E. Bell | December 16, 2013

CACM This article appears in print in Communications of the ACM, Volume 57 Issue 1


Bugs and Bragging Rights

It's not always size that matters.

by George Neville-Neil | November 11, 2013


Agile and SEMAT - Perfect Partners

Combining agile and SEMAT yields more advantages than either one alone

by Ivar Jacobson, Ian Spence, Pan-Wei Ng | November 5, 2013


Barbarians at the Gateways

High-frequency Trading and Exchange Technology

by Jacob Loveless | October 16, 2013

CACM This article appears in print in Communications of the ACM, Volume 56 Issue 10


Online Algorithms in High-frequency Trading

The challenges faced by competing HFT algorithms

by Jacob Loveless, Sasha Stoikov, Rolf Waeber | October 7, 2013

CACM This article appears in print in Communications of the ACM, Volume 56 Issue 10


The Naming of Hosts is a Difficult Matter

Also, the perils of premature rebooting

by George Neville-Neil | June 18, 2013


Cherry-picking and the Scientific Method

Software is supposed be a part of computer science, and science demands proof.

by George Neville-Neil | April 22, 2013


Swamped by Automation

Whenever someone asks you to trust them, don't.

by George Neville-Neil | February 12, 2013


Divided by Division

Is there a best used-by date for software?

by George Neville-Neil | January 10, 2013


Code Abuse

One programmer's extension is another programmer's abuse.

by George Neville-Neil | December 5, 2012


The Essence of Software Engineering: The SEMAT Kernel

A thinking framework in the form of an actionable kernel

by Ivar Jacobson, Pan-Wei Ng, Paul McMahon, Ian Spence, Svante Lidman | October 24, 2012


A Generation Lost in the Bazaar

Quality happens only when someone is responsible for it.

by Poul-Henning Kamp | August 15, 2012

CACM This article appears in print in Communications of the ACM, Volume 55 Issue 10


Can More Code Mean Fewer Bugs?

The bytes you save today may bite you tomorrow

by George V. Neville-Neil | August 8, 2012


A Nice Piece of Code

Colorful metaphors and properly reusing functions

by George Neville-Neil | June 5, 2012


My Compiler Does Not Understand Me

Until our programming languages catch up, code will be full of horrors

by Poul-Henning Kamp | May 21, 2012

CACM This article appears in print in Communications of the ACM, Volume 55 Issue 7


A System is not a Product

Stopping to smell the code before wasting time reentering configuration data

by George V. Neville-Neil | April 12, 2012


Managing Technical Debt

Shortcuts that save money and time today can cost you down the road.

by Eric Allman | March 23, 2012

CACM This article appears in print in Communications of the ACM, Volume 55 Issue 5


Scale Failure

Using a tool for the wrong job is OK until the day when it isn't.

by George Neville-Neil | February 21, 2012


The Hyperdimensional Tar Pit

by Poul-Henning Kamp | January 23, 2012

CACM This article appears in print in Communications of the ACM, Volume 55 Issue 3


Code Rototilling

KV hates unnecessary work.

by George Neville-Neil | December 14, 2011


Coding Guidelines:
Finding the Art in the Science

What separates good code from great code?

by Robert Green, Henry Ledgard | November 2, 2011

CACM This article appears in print in Communications of the ACM, Volume 54 Issue 12


Wanton Acts of Debuggery

Keep your debug messages clear, useful, and not annoying.

by George Neville-Neil | October 24, 2011


The Most Expensive One-byte Mistake

Did Ken, Dennis, and Brian choose wrong with NUL-terminated text strings?

by Poul-Henning Kamp | July 25, 2011

CACM This article appears in print in Communications of the ACM, Volume 54 Issue 9


The One-second War (What Time Will You Die?)

As more and more systems care about time at the second and sub-second level, finding a lasting solution to the leap seconds problem is becoming increasingly urgent.

by Poul-Henning Kamp | April 6, 2011


Porting with Autotools

Using tools such as Automake and Autoconf with preexisting code bases can be a major hassle.

by George Neville-Neil | March 3, 2011


B.Y.O.C. (1,342 Times and Counting)

Why can't we all use standard libraries for commonly needed algorithms?

by Poul-Henning Kamp | February 17, 2011


Gardening Tips

A good library is like a garden.

by George V. Neville-Neil | October 18, 2010


Tackling Architectural Complexity with Modeling

Component models can help diagnose architectural problems in both new and existing systems.

by Kevin Montagne | September 17, 2010

CACM This article appears in print in Communications of the ACM, Volume 53 Issue 10


A Paucity of Ports

Debugging an ephemeral problem

by George Neville-Neil | August 24, 2010


Collecting Counters

Gathering statistics is important, but so is making them available to others.

by George Neville-Neil | June 4, 2010


Avoiding Obsolescence

Overspecialization can be the kiss of death for sysadmins.

by George Neville-Neil | April 29, 2010


Simplicity Betrayed

Emulating a video system shows how even a simple interface can be more complex—and capable—than it appears.

by George Phillips | April 8, 2010

CACM This article appears in print in Communications of the ACM, Volume 53 Issue 6


Enhanced Debugging with Traces

An essential technique used in emulator development is a useful addition to any programmer's toolbox.

by Peter Phillips | March 31, 2010

CACM This article appears in print in Communications of the ACM, Volume 53 Issue 5


Broken Builds

Frequent broken builds could be symptomatic of deeper problems within a development project.

by George Neville-Neil | March 17, 2010


Commitment Issues

When is the right time to commit changes?

by George Neville-Neil | February 10, 2010


Merge Early, Merge Often

Integrating changes in branched development

by George Neville-Neil | October 29, 2009


You Don't Know Jack About Software Maintenance

Long considered an afterthought, software maintenance is easiest and most effective when built into a system from the ground up.

by Paul Stachour, David Collier-Brown | October 23, 2009

CACM This article appears in print in Communications of the ACM, Volume 52 Issue 11


Making Sense of Revision-control Systems

Whether distributed or centralized, all revision-control systems come with complicated sets of tradeoffs. How do you find the best match between tool and team?

by Bryan O'Sullivan | August 21, 2009

CACM This article appears in print in Communications of the ACM, Volume 52 Issue 9


Code Spelunking Redux

It has been five years since I first wrote about code spelunking, and though systems continue to grow in size and scope, the tools we use to understand those systems are not growing at the same rate. In fact, I believe we are steadily losing ground. So why should we go over the same ground again? Is this subject important enough to warrant two articles in five years? I believe it is.

by George V. Neville-Neil | January 8, 2009

CACM This article appears in print in Communications of the ACM, Volume 51 Issue 10


Beautiful Code Exists, if You Know Where to Look

A koder with attitude, KV answers your questions. Miss Manners he ain't.

by George Neville-Neil | October 24, 2008


Beautiful Code Exists, if You Know Where to Look

A koder with attitude, KV answers your questions. Miss Manners he ain't.

by George Neville-Neil | October 24, 2008


Only Code Has Value?

A recent conversation about development methodologies turned to the relative value of various artifacts produced during the development process, and the person I was talking with said: the code has "always been the only artifact that matters. It's just that we're only now coming to recognize that." My reaction to this, not expressed at that time, was twofold. First, I got quite a sense of déjà-vu since it hearkened back to my time as an undergraduate and memories of many heated discussions about whether code was self-documenting.

by Terry Coatta | July 14, 2008


The Yin and Yang of Software Development

The C/C++ Solution Manager at Parasoft explains how infrastructure elements allow development teams to increase productivity without restricting creativity.

July 14, 2008


Managing Collaboration

Jeff Johnstone of TechExcel explains why there is a need for a new approach to application lifecycle management that better reflects the business requirements and challenges facing development teams.

July 14, 2008


Gettin' Your Head Straight

Kode Vicious is hungry. He sustains himself on your questions from the software development trenches (and lots of beer). Without your monthly missives, KV is like a fish out of water, or a scientist without a problem to solve. So please, do you part to keep him sane (or at least free from psychotic episodes), occupied, and useful.

by George V. Neville-Neil | August 16, 2007


API Design Matters

Why changing APIs might become a criminal offense. After more than 25 years as a software engineer, I still find myself underestimating the time it will take to complete a particular programming task. Sometimes, the resulting schedule slip is caused by my own shortcomings: as I dig into a problem, I simply discover that it is a lot harder than I initially thought, so the problem takes longer to solvesuch is life as a programmer. Just as often I know exactly what I want to achieve and how to achieve it, but it still takes far longer than anticipated. When that happens, it is usually because I am struggling with an API that seems to do its level best to throw rocks in my path and make my life difficult.

by Michi Henning | June 7, 2007

CACM This article appears in print in Communications of the ACM, Volume 52 Issue 5



Errors, deceptions, and abmiguity

by Stan Kelly-Bootle | June 7, 2007


You Can Look It Up:
or Maybe Not

Chasing citations through endless, mislabeled nodes

by Stan Kelly-Bootle | October 10, 2006


Breaking the Major Release Habit

Can agile development make your team more productive?

by Damon Poole | October 10, 2006


The Heart of Eclipse

A look inside and extensible plug-in architecture ECLIPSE is both an open, extensible development environment for building software and an open, extensible application framework upon which software can be built. Considered the most popular Java IDE, it provides a common UI model for working with tools and promotes rapid development of modular features based on a plug-in component model. The Eclipse Foundation designed the platform to run natively on multiple operating systems, including Macintosh, Windows, and Linux, providing robust integration with each and providing rich clients that support the GUI interactions everyone is familiar with: drag and drop, cut and paste (clipboard), navigation, and customization.

by Dan Rubel | October 10, 2006


Kode Vicious Bugs Out

Dear KV, I'm on a small team that is building a custom, embedded, consumer device that is due out by Christmas. Of course the schedule is tight and there are make-or-break dates that if we miss basically mean the product will never make it to market. Not the most fun environment in which to have problems. The software was carefully specified and laid out and then simulated while the hardware was being manufactured. Now we have real hardware, and real problems as well. Aside from the timing issues we found when we were no longer running the software in a simulator, several bugs remain that show up only under very special circumstances and that disappear when I use the debugger or turn on the logging code built into the system.

by George Neville-Neil | May 2, 2006


Coding for the Code

Despite the considerable effort invested by industry and academia in modeling standards such as UML (Unified Modeling Language), software modeling has long played a subordinate role in commercial software development. Although modeling is generally perceived as state of the art and thus as something that ought to be done, its appreciation seems to pale along with the progression from the early, more conceptual phases of a software project to those where the actual handcrafting is done.

by Friedrich Steimann, Thomas Kühne | January 31, 2006


A Conversation with Ray Ozzie

There are not many names bigger than Ray Ozzie's in computer programming. An industry visionary and pioneer in computer-supported cooperative work, he began his career as an electrical engineer but fairly quickly got into computer science and programming. He is the creator of IBM's Lotus Notes and is now chief technical officer of Microsoft, reporting to chief software architect Bill Gates. Recently, Ozzie's role as chief technical officer expanded as he assumed responsibility for the company's software-based services strategy across its three major divisions.

by Charlene O'Hanlon | December 16, 2005


Kode Vicious Unscripted

The problem? Computers make it too easy to copy data.

by George Neville-Neil | December 8, 2005


Kode Vicious Cycles On

Not only does California give you plenty of sun, it also apparently has employers that give you plenty of time to play around with the smaller problems that you like, in a programming language that's irrelevant to the later implementation.

by George Neville-Neil | August 18, 2005


Mal Managerium:
A Field Guide

Please allow me the pleasure of leading you on an 'office safari', so to speak. On today's journey we'll travel the corridors of computerdom in search of the widespread but elusive mal managerium, or bad manager, in common parlance. They will be difficult to spot because we will be in a sense looking for that most elusive creature of all: ourselves. That is to say, it's quite possible that many of us will share some of the qualities with the various types of bad managers we shall encounter. Qualities that we are loath to admit we possess, I might add.

by Phillip Laplante | June 7, 2005


Kode Vicious vs. Mothra

Dear KV, My co-workers keep doing really bad things in the code, such as writing C++ code with macros that have gotos that jump out of them, and using assert in lower-level functions as an error-handling facility. I keep trying to get them to stop doing these things, but the standard response I get is, "Yeah, it's not pretty, but it works." How can I get them to start asking, "Is there a better way to do this?" They listen to my arguments but don't seem convinced. In some cases they even insist they are following good practices.

by George Neville-Neil | June 7, 2005


Kode Vicious Battles On

Dear KV, I'm maintaining some C code at work that is driving me right out of my mind. It seems I cannot go more than three lines in any file without coming across a chunk of code that is conditionally compiled.

by George Neville-Neil | April 21, 2005


Comments are More Important than Code

The thorough use of internal documentation is one of the most-overlooked ways of improving software quality and speeding implementation.

by Jef Raskin | March 18, 2005


Kode Vicious Reloaded

The program should be a small project, but every time I start specifying the objects and methods it seems to grow to a huge size, both in the number of lines and the size of the final program.

by George Neville-Neil | March 18, 2005


Kode Vicious Unleashed

Dear KV, My officemate writes methods that are 1,000 lines long and claims they are easier to understand than if they were broken down into a smaller set of methods. How can we convince him his code is a maintenance nightmare?

by George Neville-Neil | February 16, 2005


Kode Vicious: The Return

Dear KV, Whenever my team reviews my code, they always complain that I don't check for return values from system calls. I can see having to check a regular function call, because I don't trust my co-workers, but system calls are written by people who know what they're doing--and, besides, if a system call fails, there isn't much I can do to recover. Why bother?

by George Neville-Neil | December 27, 2004


Kode Vicious Strikes Again

Dear Kode Vicious, I have this problem. I can never seem to find bits of code I know I wrote. This isn't so much work code--that's on our source server--but you know, those bits of test code I wrote last month, I can never find them. How do you deal with this?

by George Neville-Neil | December 6, 2004


The Burning Bag of Dung and Other Environmental Antipatterns

And you think you have problems?

by Phillip Laplante | November 30, 2004


For Want of a Comma, the Meaning Was Lost

What does punctuation have to do with software development?

by Jef Raskin | August 31, 2004


Grid Tools: Coming to a Cluster Near You

Hot scientific tools trickle down to support mainstream IT tasks.

by Alex Wolfe | August 31, 2004


First, Do No Harm: A Hippocratic Oath for Software Developers?

What's wrong with taking our profession a little more seriously?

by Phillip A Laplante | August 31, 2004


Intel's Heavy-Duty Dev Tools

In the PC and server worlds, the engineering battle for computer performance has often focused on the hardware advances Intel brings to its microprocessors.

by Alexander Wolfe | May 5, 2004


Death by UML Fever

A potentially deadly illness, clinically referred to as UML (Unified Modeling Language) fever, is plaguing many software-engineering efforts today. This fever has many different strains that vary in levels of lethality and contagion. A number of these strains are symptomatically related, however. Rigorous laboratory analysis has revealed that each is unique in origin and makeup. A particularly insidious characteristic of UML fever, common to most of its assorted strains, is the difficulty individuals and organizations have in self-diagnosing the affliction. A consequence is that many cases of the fever go untreated and often evolve into more complex and lethal strains.

by Alex E. Bell | April 16, 2004


The Demise of the Waterfall Model Is Imminent

Rumors of the demise of the Waterfall Life-cycle Model are greatly exaggerated. We discovered this and other disappointing indicators about current software engineering practices in a recent survey of almost 200 software professionals. These discoveries raise questions about perception versus reality with respect to the nature of software engineers, software engineering practice, and the industry.

by Phillip A. Laplante, Colin J. Neill | February 24, 2004


Reading, Writing, and Code

Forty years ago, when computer programming was an individual experience, the need for easily readable code wasn't on any priority list. Today, however, programming usually is a team-based activity, and writing code that others can easily decipher has become a necessity. Creating and developing readable code is not as easy as it sounds.

by Diomidis Spinellis | December 5, 2003


The Big Bang Theory of IDEs

Remember the halcyon days when development required only a text editor, a compiler, and some sort of debugger (in cases where the odd printf() or two alone didn't serve)? During the early days of computing, these were independent tools used iteratively in development's golden circle. Somewhere along the way we realized that a closer integration of these tools could expedite the development process. Thus was born the integrated development environment (IDE), a framework and user environment for software development that's actually a toolkit of instruments essential to software creation. At first, IDEs simply connected the big three (editor, compiler, and debugger), but nowadays most go well beyond those minimum requirements.

by Caspar Boekhoudt | December 5, 2003


Microsoft's Compact Framework Targets Smart Devices

Welcome to my first installment of ACM Queue's ToolKit column. Each issue I'll dig beneath the market-friendly, feature-rich exterior of some of the best-known (and some of the least-known) development tools in an attempt to separate the core app from the product spec sheet.

by Alexander Wolfe | December 5, 2003


Stand and Deliver:
Why I Hate Stand-Up Meetings

Stand-up meetings are an important component of the 'whole team', which is one of the fundamental practices of extreme programming (XP).

by Phillip A Laplante | December 5, 2003


User Interface Designers, Slaves of Fashion

The discipline, science, and art of interface design has gone stagnant. The most widely read books on the subject are primarily compendia of how to make the best of received widgets. The status quo is mistaken for necessity. Constrained in this chamber pot, designers wander around giving the users of their products little comfort or fresh air.

by Jef Raskin | October 2, 2003


Another Day, Another Bug

As part of this issue on programmer tools, we at Queue decided to conduct an informal Web poll on the topic of debugging. We asked you to tell us about the tools that you use and how you use them. We also collected stories about those hard-to-track-down bugs that sometimes make us think of taking up another profession.

by Queue Readers | October 2, 2003


No Source Code? No Problem!

Typical software development involves one of two processes: the creation of new software to fit particular requirements or the modification (maintenance) of old software to fix problems or fit new requirements. These transformations happen at the source-code level. But what if the problem is not the maintenance of old software but the need to create a functional duplicate of the original? And what if the source code is no longer available?

by Peter Phillips, George Phillips | October 2, 2003


Coding Smart: People vs. Tools

Cool tools are seductive. When we think about software productivity, tools naturally come to mind. When we see pretty new tools, we tend to believe that their amazing features will help us get our work done much faster. Because every software engineer uses software productivity tools daily, and all team managers have to decide which tools their members will use, the latest and greatest look appealing.

by Donn M. Seeley | October 1, 2003


The Woes of IDEs

An epigram: "We may not feel these limitations until they have been lifted from us, just as we often do not know we are sick until we suddenly feel better. Therefore, it is reasonable to expect that future languages will make us feel those limitations of [our present environments] that are not detectable today." --Gerald Weinberg

by Jef Raskin | July 30, 2003