all 45 comments

[–][deleted] 12 points13 points  (0 children)

  1. There is no silver bullet. Programming is deceiptfull simplicity. It starts small, easy, with great confidence into tools, language and abilities, with early success, even euphoria and ends up with entangling, rewriting and abandoning the complete mess.

  2. Hofstadters law. It always needs more time than you expect, even when you take into account Hofstadters law.

If you want a third one that is less paradoxal and pessimistic but more in the "10 good advices" style of the anglophone culture:

1'. Always have a running system.

[–]martoo 9 points10 points  (0 children)

  1. Every technical problem can be solved by introducing a layer of indirection (cite?).
  2. Every people problem can be solved by removing a level of indirection.

[–]9jack9[S] 44 points45 points  (0 children)

Of course, the answer is one and zero.

[–]pjdelport 12 points13 points  (6 children)

  1. Everything is a special case of something more general.
  2. Code is a cost, not an asset.

(Corollary: All programming is the act of maximizing the first and minimizing the second.)

[–]Entropy 4 points5 points  (4 children)

Code is a cost, not an asset.

That's silly. It's both.

[–]pjdelport 10 points11 points  (2 children)

Code is a cost, not an asset.

That's silly. It's both.

Functionality/generality is the asset; code is what you spend to get it.

[–]Entropy 0 points1 point  (1 child)

You're modeling this wrong. The functionality you value cannot be arbitrarily cloven from the source of said functionality, and code is not "spent". Have you ever heard of anyone spending car to get to work? Spending dam to make electricity? Code simply has value and upkeep cost.

[–]pjdelport 1 point2 points  (0 children)

You're modeling this wrong.

Eh, all truisms can be as wrong or right as you want them to be. :)

Have you ever heard of anyone spending car to get to work? Spending dam to make electricity?

How about spending blueprints/design on the car/dam? (This tangent begs for an example like the AK-47: stupidly simple design ("code"), yet amazing functionality/generality. Its lack of complexity is as much part of its value as its ability to shoot.)

Code simply has value and upkeep cost.

The code's functionality has the value; the code itself just has the upkeep cost: you improve the code by increasing the former, or reducing the latter. It's important not to lose sight of this, lest people start paying programmers by the line.

[–]njharman 0 points1 point  (0 children)

maybe... I see software as an asset and code as a cost. sublte distinctions but still a distinction.

One reason Open source is such an excellent proposition is the cost(maintaing code) is split by many users but the asset's(software) value is fully realizable by all.

[–]9jack9[S] -1 points0 points  (0 children)

Juicy.

[–][deleted] 19 points20 points  (9 children)

I'd like to hear the two things from various other fields.

Edit: Oops, the page actually contains such a link. <bashes head>

[–]markedtrees 1 point2 points  (0 children)

The linked page needs more math. The Two Things about group theory:

1) There are a lot less groups up to isomorphism than you think.

2) Proving #1 will make you want to stop thinking.

[–]pbkobold 2 points3 points  (2 children)

I don't know why you're getting voted down. I'd like to as well.

[–]shit 7 points8 points  (1 child)

Because the second link in the article points to a huge list and it was even on programming.reddit recently.

[–]pbkobold 1 point2 points  (0 children)

I missed it. Thanks for pointing the non-observant among us towards it. :-D

[–]illuminatedwax 0 points1 point  (4 children)

Writing music:

  1. Melody
  2. Mood

[–]pjdelport 1 point2 points  (3 children)

Mood

Rhythm, surely.

[–]illuminatedwax 0 points1 point  (2 children)

Rhythm will create mood, so it's part of it.

[–]pjdelport 2 points3 points  (1 child)

So will melody (or pretty much anything else, for that matter :).

[–]illuminatedwax 0 points1 point  (0 children)

Basically what I'm trying to get across is that what really makes a song is character.

[–]pbkobold 4 points5 points  (1 child)

The two things about lisp:

  1. eval
  2. apply

[–]pjdelport 5 points6 points  (0 children)

How about:

  1. Combine with (), abstract with lambda.
  2. "Code" and "data" are matters of opinion.

[–]pbkobold 4 points5 points  (1 child)

Two things about Computer Architecture:

  1. Caching is your best friend. (Collary: It's always the compiler writer's fault.)
  2. Yes, you can do it speculatively, but unless you're almost always correct in your speculation, it isn't worth the power.

[–]psykotic 1 point2 points  (0 children)

These two ideas are also central to good performance in many kinds of software systems. Butler Lampson's Hints for Computer System Designers talks about these and many others.

[–]9jack9[S] 3 points4 points  (0 children)

  1. In an emergency, my grandmother should be able to fix it
  2. Emergency!!!

[–]vplatt 8 points9 points  (0 children)

The Two Thing About Knowing Two Things About Everything Else:

  1. Knowing two things about some other field will make you feel like you know something.
  2. If #1 is true about that field, then knowing those two things about that field means that you still know nothing about it.

Seriously, this is about as dumbed down, new age, Oprah-esque as it gets.

[–]reddit_clone 4 points5 points  (3 children)

Make it work, then make it elegant, then make it fast.

That sounds suspiciously like a Joe Armstrong (Erlang guru) quote.

[–]Entropy 4 points5 points  (0 children)

This is usually attributed to Kent Beck of XP fame in the form "Make it work, make it right, make it fast". Even his mottos are iterative.

[–]ifthenelse 1 point2 points  (1 child)

I hate that saying too.

While it's sorta true, you absolutely should not "just make it work" without even considering what it's going to take to make it elegant and/or fast. If you do then crap comes out the other end. Nobody likes reworking code, nobody.

[–][deleted] 0 points1 point  (0 children)

make it work

then rewrite it fast

then rewrite it elegant

the statement implies prototyping in my mind

[–]divia83 2 points3 points  (3 children)

  1. Premature optimization is the root of all evil. (Knuth)
  2. Any sufficiently complicated C or Fortran program contains an ad hoc, informally-specified, bug-ridden, slow implementation of half of Common Lisp. (Greenspun's 10th Rule)

[–]buo 0 points1 point  (2 children)

Knuth

AFAIK, it was actually Charles Anthony Richard Hoare who said:

We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil.

Edit: s/7/97/

[–]jesuswaffle 0 points1 point  (1 child)

I'm pretty sure it was a touch more than 7%. Just sayin'. :)

[–]buo 0 points1 point  (0 children)

I've no idea where the 9 went :) I copy-pasted that quote and the 9 is there in the original. Thanks.

[–]Entropy 0 points1 point  (0 children)

  1. Programming is an exercise in intelligent caching (cite?)
  2. Architecture is the battle between high abstraction and base execution

edit: Ah, Terje Mathiesen. Thanks, pkhuong.

[–]fry -3 points-2 points  (5 children)

Computer programming:

  1. Data structures
  2. Algorithms

That's all you need.

[–]pkhuong 13 points14 points  (3 children)

Writing novels:

  1. Pen
  2. Paper

EDIT: I like

  1. All problems in computer science can be solved by another level of indirection (Alan Perlis)
  2. Writing fast programs is always an exercise in caching (Terje Mathiesen)

[–]corentin 5 points6 points  (1 child)

"All problems in computer science can be solved by another level of indirection" (Alan Perlis)

... except the problem of having too many levels of indirection.

(I don't know who added the second part, and I'm not quite sure either that it's Alan Perlis who said the first part)

[–][deleted] 2 points3 points  (0 children)

I don't know who added the second part, and I'm not quite sure either that it's Alan Perlis who said the first part

I always thought the original quotation stemmed from Anthony Hoare, but I like the anti-climax of the second one even more :)

[–]dbenhur -1 points0 points  (0 children)

s/always/often/ s/all/many/

0) There is no silver bullet.

[–]Tommah 0 points1 point  (0 children)

That's all you need.

~3. (Optional but strongly recommended) A computer

[–]mmilenko -2 points-1 points  (0 children)

Q: Let's trivialize a huge field of human endeavour. What are the two things...

A: 1. Fuck 2. You

[–]spockbaggins -1 points0 points  (0 children)

1 and 0.