Most software today is very much like an Egyptian pyramid with millions of bricks piled on top of each other, with no structural integrity, but just done by brute force and thousands of slaves.
There are two methods in software design. One is to make the program so simple, there are obviously no errors. The other is to make it so complicated, there are no obvious errors.
I'd say that my profession ends where architectural thinking ends - architectural thinking in terms of thinking about programs and organizational structure. These abstractions play a role in many other disciplines, and those disciplines are now defining their 'architectures' as well.
The best way to prepare [to be a programmer] is to write programs, and to study great programs that other people have written. In my case, I went to the garbage cans at the Computer Science Center and I fished out listings of their operating systems.
Premature optimization is the root of all evil.
In software engineering, we have the term 'technical debt.' When you don't do a job correctly, unaddressed problems become harder and harder to solve.
A programming language is a tool that has profound influence on our thinking habits.
Always think about how a piece of code should be used: good interfaces are the essence of good code. You can hide all kinds of clever and dirty code behind a good interface if you really need such code.
If 10 years from now, when you are doing something quick and dirty, you suddenly visualize that I am looking over your shoulders and say to yourself: 'Dijkstra would not have liked this', well that would be enough immortality for me.
In my daily work, I work on very large, complex, distributed systems built out of many Python modules and packages. The focus is very similar to what you find, for example, in Java and, in general, in systems programming languages.
Although the most advanced software innovation may take place in big cities with research universities, there is a lot of work concerning the application of software to business processes and the administration and maintenance of software systems that can be done remotely.
Don't hurry your code. Make sure it works well and is well designed. Don't worry about timing.
Conceptual integrity is the most important consideration in system design.
Early in my career, I was involved with engineer-led projects, where designers came in late in the game and were expected to put lipstick on an existing code base. This almost never works.
All the PHP code I've seen in that experience has been messy, unmaintainable crap. Spaghetti SQL wrapped in spaghetti PHP wrapped in spaghetti HTML, replicated in slightly-varying form in dozens of places.
Old companies that had nothing to do with software in the past all have software development activities to unlock the invention that's occurring inside of these organizations. And so the developer is a very important part of that overall ecosystem.
Prolific programmers contribute to certain disaster.
I used to be enamored of object-oriented programming. I'm now finding myself leaning toward believing that it is a plot designed to destroy joy.
I mean, source code in files; how quaint, how seventies!
The visible things that have come from the group have been the Plan 9 system and Inferno, but I hasten to say that the ideas and the work have come from colleagues.
A lot of people assume that creating software is purely a solitary activity where you sit in an office with the door closed all day and write lots of code.
Sun's role in the grand scheme of development is to work on the runtime environment and the APIs. The tools we produce are much more for systems programmers, not enterprise developers.
"Legacy code" often differs from its suggested alternative by actually working and scaling.
The most sought-after candidates in the world today by companies like mine are people who make computer software - there's a shortage of talent.
We shifted our philosophy from being a computer mapping group that would support planners to the idea of building actual software that would be well engineered. Because at that time, our software was not well-engineered at all; it was basically built with project funding and for project work, largely by ourselves.