A Short Introduction to the Art of Programming (1971) [pdf]
cs.utexas.edu
cs.utexas.edu
"With the advent of what is called "large scale integration" (being a term from the computer field, its acronym LSI is better known!) it seems to become technically feasible to build machines more like "clouds of arithmetic units" with information processing activities going on simultaneously all over the place, for shorter periods of time even independently of each other. Programming for such machines will pose completely different trade-off problems: one will be willing to invest in potentially useful computing activity before its actual usefulness has been established, all for the sake of speeding up the whole computation. But although I know such machines may be coming, I shall not touch these problems for the following reasons. First, as far as general purpose applications are concerned, I have my doubts about the effectiveness with which such forms of parallelism can ever be exploited. Second —and that is the most important consideration— parallel programming is an order of magnitude more difficult than sequential programming."
Also, the first mention of "cloud", although with a different meaning.
> It is not unusual —although a mistake— to consider the programmer's task to be the production of programs. (One finds terms such as "software manufacturing", proposals to measure programmer productivity by the number of lines of code produced per month etc., although I have never seen the suggestion to measure composer productivity by the number of notes, monthly scribbled on his score!).
47 years later, a lot of people still measure programming productivity by LOCs. Hell, even major freelance marketplaces try to track your every billed second by taking screenshots of your desktop or webcam "just to make sure you're working".
Well that's some dystopian nightmare stuff I had no idea was happening.
EDIT: refine quote and add italics
This was real eye opening for me when I did contract/consultant work, even as a 1099. I can understand the enterprise, butts in the seat model of developers being on retainer but for contracting houses I don't get it.
If developers don't want to be bound by these metrics they need to get better at forcing the client into contracts for deliverables with clearly defined acceptance criteria. Also, it seems to me that the best way to get proficient and creating and updating these contracts is by having to work twice as long to deliver a work product as was initially estimated.
I think we're just fighting the "always done this way" mindset.
What if someone hires you as an ongoing general problem solver?
I've had many contracts like this for 4-5 months where they just threw problems at me and expected me to think of a solution and then implement it.
This could be anything from little scripts to make development better, ops / deployment improvements, better docs, being a 2nd set of eyes for pair programming, etc..
Something like that isn't really possible to plan out, so paying by the hour makes sense.
On the other hand, I do fixed bid pricing on a lot of things when it makes sense. I sometimes even do a hybrid approach where it starts as a fixed bid and ongoing maintenance becomes hourly.
If a client comes in and says "one out of every 50 times you load a page in this web app, it renders a blank page, how much is it going to cost to fix?" what do you say?
Every hour you spend investigating or familiarizing yourself with the problem is basically just spec work with all the risk that entails. In many cases when you're "fixing" something, the project could be entirely spec work as you spend 8-16 hours determining that the problem is simply a misconfigured setting that will take 5 minutes to flip.
Clients very rarely (in my experience, never) specify problems to a degree sufficient to create a concrete scope of work, and they're not going to pay you hourly to do so.
If I take my car to a mechanic and say "it makes a funny rattle sound, how much will that cost to fix?" he's not going to give me a fixed bid.
Wow, that would definitely trigger my neurosis into a full-blown nervous breakdown. Does reading e-mail count as "working"? Does configuring environment variables and adding printers count as "working"? Does reading documentation count as "working"? And don't you dare stop by and interrupt me with a "quick question"...
But, there's a lot of talk about it online. Google for "upwork time tracking" and similar queries and you'll find heaps of people complaining. Upwork is just 1 marketplace that has apps like that.
Think of that as a very clear way to indicate that you shouldn't work for them if you have a choice. Pity those who have no other options.
[1] http://www.cs.utexas.edu/users/EWD/transcriptions/EWD03xx/EW...
From his Wikipedia page [1]:
> Dijkstra never wrote his articles using a computer. He preferred to rely on his typewriter and later on his Montblanc pen. Dijkstra's favorite writing instrument was the Montblanc Meisterstück fountain pen.
It might be this http://ftp.math.utah.edu/u/ma/hohn/linux/misc/quickscript/di...
If so, that appears to be a regular vector font, too, no random deviations or letter variants to make it appear more handwritten.
In 1971? I seriously doubt that...
>[people] who identify the programmer's competence with a thorough knowledge of the idiosyncrasies of one or more of the baroque tools into which modern programming languages and systems have degenerated
This, however, is as valid as ever...
Today we have more books than all those FORTRAN and ALGOL and COBOL books combined just for a single language, like Python or Ruby.
Justify my time is arrogant and keeping, IMO, with the arrogance he often displayed, while justify one's time is a judgment that is dependent on market forces and the opinions of others willing to write programming books.
Interesting that they did not seem to want to attract people who just enjoy programming..
> His fundamental contributions cover diverse areas of computing science, including compiler construction, operating systems, distributed systems, sequential and concurrent programming, programming paradigm and methodology, programming language research, program design, program development, program verification, software engineering principles, graph algorithms, and philosophical foundations of computer programming and computer science. Many of his papers are the source of new research areas. Several concepts and problems that are now standard in computer science were first identified by Dijkstra or bear names coined by him.
In fact, I'd wager someone already came up with it somewhere before Dijkstra did, put it in the code (or, well, on the punch card), and quietly went home, happy about a good day's work.
Dijkstra just was the first one to publish it :-)
His true contributions were, IMO:
* Being the first tech blogger[0] (handwritten!)
* Teaching people to use while/for instead of goto
* Pioneering mathematically verified algorithm derivation
He's also the reason Dutch universities have no independent Computer Science departments. They're always paired with Mathematics, even at universities of technology, which makes no sense and which has effectively halved research funding for both disciplines for decades. He was a better programmer than politician.[0] http://www.cs.utexas.edu/users/EWD/indexChron.html - I'm calling it a blog because both the median length and the frequency of publishing is a lot more like blogging than anything else. I'm not aware of other people doing this as much in that day and age (but I'm probably wrong)
It's not a web log (for which “blog” is short) if it's not on the web.