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
Coding Smart: People vs. Tools
Tools can help developers be more productive, but they're no replacement for thinking.
No Source Code? No Problem!
What if you have to port a program, but all you have is a binary?
Another Day, Another Bug
We asked our readers which tools they use to squash bugs. Here's what they said.
User Interface Designers, Slaves of Fashion
The status quo prevails in interface design, and the flawed concept of cut-and-paste is a perfect example.
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).
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.
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.
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.
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.
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.
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.
First, Do No Harm: A Hippocratic Oath for Software Developers?
What's wrong with taking our profession a little more seriously?
Grid Tools: Coming to a Cluster Near You
Hot scientific tools trickle down to support mainstream IT tasks.
Opinion:
For Want of a Comma, the Meaning Was Lost
What does punctuation have to do with software development?
The Burning Bag of Dung and Other Environmental Antipatterns
And you think you have problems?
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?
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?
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?
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.
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.
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.
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.
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.
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.
Kode Vicious Unscripted
The problem? Computers make it too easy to copy data.
Kode Vicious:
The Doctor is In
A koder with attitude, KV answers your questions. Miss Manners he ain't.
A Conversation with Ray Ozzie
Cooperate, Communicate, Collaborate
Stop Whining about Outsourcing!
I'm sick of hearing all the whining about how outsourcing is going to migrate all IT jobs to the country with the lowest wages.
Coding for the Code
Can models provide the DNA for software development?
Anything Su Doku, I Can Do Better
The new puzzle craze from japan is sweeping the world, and testing our Boolean logic.
But, Having Said That, ...
80 percent of the useful work is performed by 20 percent of the code.
Kode Vicious Bugs Out
What do you do when tools fail?
Evolution or Revolution?
Where is the High in High Tech?
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.
Breaking the Major Release Habit
Can agile development make your team more productive?
You Can Look It Up:
or Maybe Not
Chasing citations through endless, mislabeled nodes
A License to Kode
Code-scanning software is expensive and I'm not sure it's worth it. What do you think?
As Big as a Barn?
Taking measure of measurement
Alloneword
Errors, deceptions, and abmiguity
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.
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.
Five Steps to a Better Vista Installation - Transcript
Unravel the mysteries and learn the best practices associated with mastering the new application installation routines for Vista applications. In this Premium Queuecast hosted by Michael Vizard, Bob Corrigan, senior manager for global product marketing at Macrovision, and Robert Dickau, principal trainer, reveal the five most crucial things you need to know about Vista application installations.
Software Operations' Profit Potential
Today's software producer faces many challenges in building and keeping a satisfied customer base. In this ACM Premium Queuecast, Macrovision FLEXnet Publisher Product Manager Mitesh Pancholy discusses how companies can solve their license management challenges and turn their software operations into a profit center.
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.
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.
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.
There's a Lot of It About
And everybody's doing it.
A Conversation with Steve Bourne, Eric Allman, and Bryan Cantrill
In part one of a two-part series, three Queue editorial board members discuss the practice of software engineering.
The Fabrication of Reality
Is there an "out there" out there?
Beautiful Code Exists, if You Know Where to Look
A koder with attitude, KV answers your questions. Miss Manners he ain't.
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.
The Flaws of Nature
And the perils of indecision. The latest musings of Stan Kelly-Bootle.
Don't be Typecast as a Software Developer
Kode Vicious's temper obviously suffers from having to clean up after the mistakes of his peers. What would he have them learn now so that he can look forward to a graceful and mellow old age?
One Peut-Être, Two Peut-Être, Three Peut-Être, More
Puns and allusions
Painting the Bike Shed
A sure-fire technique for ending pointless coding debates
Words Fail Them
Dedesignating and other linguistic hazards
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?
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.
Merge Early, Merge Often
Integrating changes in branched development
Some Rules and Restrictions May Apply
An inquiry into contracts and the Next Big Thing
Commitment Issues
When is the right time to commit changes?
Broken Builds
Frequent broken builds could be symptomatic of deeper problems within a development project.
Enhanced Debugging with Traces
An essential technique used in emulator development is a useful addition to any programmer's toolbox.
Simplicity Betrayed
Emulating a video system shows how even a simple interface can be more complex—and capable—than it appears.
Avoiding Obsolescence
Overspecialization can be the kiss of death for sysadmins.
Collecting Counters
Gathering statistics is important, but so is making them available to others.
A Paucity of Ports
Debugging an ephemeral problem
Tackling Architectural Complexity with Modeling
Component models can help diagnose architectural problems in both new and existing systems.
Gardening Tips
A good library is like a garden.
B.Y.O.C. (1,342 Times and Counting)
Why can't we all use standard libraries for commonly needed algorithms?
Porting with Autotools
Using tools such as Automake and Autoconf with preexisting code bases can be a major hassle.
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.
The Most Expensive One-byte Mistake
Did Ken, Dennis, and Brian choose wrong with NUL-terminated text strings?
Wanton Acts of Debuggery
Keep your debug messages clear, useful, and not annoying.
Coding Guidelines:
Finding the Art in the Science
What separates good code from great code?
Code Rototilling
KV hates unnecessary work.
The Hyperdimensional Tar Pit
Make a guess, double the number, and then move to the next larger unit of time.
Scale Failure
Using a tool for the wrong job is OK until the day when it isn't.
Managing Technical Debt
Shortcuts that save money and time today can cost you down the road.
A System is not a Product
Stopping to smell the code before wasting time reentering configuration data
My Compiler Does Not Understand Me
Until our programming languages catch up, code will be full of horrors.
A Nice Piece of Code
Colorful metaphors and properly reusing functions
Can More Code Mean Fewer Bugs?
The bytes you save today may bite you tomorrow
A Generation Lost in the Bazaar
Quality happens only when someone is responsible for it.
The Essence of Software Engineering: The SEMAT Kernel
A thinking framework in the form of an actionable kernel
Code Abuse
One programmer's extension is another programmer's abuse.
Divided by Division
Is there a best used-by date for software?
Swamped by Automation
Whenever someone asks you to trust them, don't.
Cherry-picking and the Scientific Method
Software is supposed be a part of computer science, and science demands proof.
The Naming of Hosts is a Difficult Matter
Also, the perils of premature rebooting
Online Algorithms in High-frequency Trading
The challenges faced by competing HFT algorithms
Barbarians at the Gateways
High-frequency Trading and Exchange Technology
Agile and SEMAT - Perfect Partners
Combining agile and SEMAT yields more advantages than either one alone
Bugs and Bragging Rights
It's not always size that matters.
The Software Inferno
Dante's tale, as experienced by a software architect
This is the Foo Field
The meaning of bits and avoiding upgrade bog downs
The Logic of Logging
And the illogic of PDF
Major-league SEMAT: Why Should an Executive Care?
Becoming better, faster, cheaper, and happier
Forked Over
Shortchanged by open source
Outsourcing Responsibility
What do you do when your debugger fails you?
ACM and the Professional Programmer
How do you, the reader, stay informed about research that influences your work?
The Responsive Enterprise: Embracing the Hacker Way
Soon every company will be a software company.
A New Software Engineering
What happened to the promise of rigorous, disciplined, professional practices for software development?
Raw Networking
Relevance and repeatability
Using Free and Open Source Tools to Manage Software Quality
An agile process implementation
The Science of Managing Data Science
Lessons learned managing a data science research team
Lazarus Code
No one expects the Spanish Acquisition.
Hickory Dickory Doc
On null encryption and automated documentation
Still Finding the Right Questions
Branching out and changing with the times at acmqueue
Lean Software Development - Building and Shipping Two Versions
Catering to developers' strengths while still meeting team objectives
Automation Should Be Like Iron Man, Not Ultron
The "Leftover Principle" Requires Increasingly More Highly-skilled Humans.
It Probably Works
Probabilistic algorithms are all around us--not only are they acceptable, but some programmers actually seek out chances to use them.
Pickled Patches
On repositories of patches and tension between security professionals and in-house developers
Code Hoarding
Committing to commits, and the beauty of summarizing graphs
GNL is Not Linux
What's in a Name?
Use-Case 2.0
The Hub of Software Development
Delegation as Art
Be someone who makes everyone else better.
The Flame Graph
This visualization of software execution is a new necessity for performance profiling and debugging.
What Are You Trying to Pull?
A single cache miss is more expensive than many instructions.
Nine Things I Didn't Know I Would Learn Being an Engineer Manager
Many of the skills aren't technical at all.
Introducing Research for Practice
Expert-curated guides to the best of CS research
Chilling the Messenger
Keeping ego out of software-design review
Dynamics of Change: Why Reactivity Matters
Tame the dynamics of change by centralizing each concern in its own module.
Bad Software Architecture is a People Problem
When people don't work well together they make bad decisions.
Cloud Calipers
Naming the next generation and remembering that the cloud is just other people's computers
Fresh Starts
Just because you have been doing it the same way doesn't mean you are doing it the right way.
Industrial Scale Agile - from Craft to Engineering
Essence is instrumental in moving software development toward a true engineering discipline.
The Unholy Trinity of Software Development
Tests, documentation, and code
Resolving Conflict
Don't "win." Resolve.
Research for Practice: Cryptocurrencies, Blockchains, and Smart Contracts; Hardware for Deep Learning
Expert-curated Guides to the Best of CS Research
Does Anybody Listen to You?
How do you step up from mere contributor to real change-maker?
Side Effects, Front and Center!
One System's Side Effect is Another's Meat and Potatoes.
Research for Practice: Technology for UnderservedCommunities; Personal Fabrication
Expert-curated Guides to the Best of CS Research
Is There a Single Method for the Internet of Things?
Essence can keep software development for the IoT from becoming unwieldy.
Metaphors We Compute By
Code is a story that explains how to solve a particular problem.
Operational Excellence in April Fools' Pranks
Being funny is serious work.
Popping Kernels
Choosing between programming in the kernel or in user space
DevOps Metrics
Your biggest mistake might be collecting the wrong data.
Continuous Delivery Sounds Great, but Will It Work Here?
It's not magic, it just requires continuous, daily improvement at all levels.
Manual Work is a Bug
A.B.A: always be automating
GitOps: A Path to More Self-service IT
IaC + PR = GitOps
The Obscene Coupling Known as Spaghetti Code
Teach your junior programmers how to read code
Using Remote Cache Service for Bazel
Save time by sharing and reusing build and test output
Writing a Test Plan
Establish your hypotheses, methodologies, and expected results.
SQL is No Excuse to Avoid DevOps
Automation and a little discipline allow better testing, shorter release cycles, and reduced business risk.
Tear Down the Method Prisons! Set Free the Practices!
Essence: a new way of thinking that promises to liberate the practices and enable true learning organizations
Know Your Algorithms
Stop using hardware to solve software problems.