views:

1161

answers:

19

Please recommend me software engineering/methodology/practices paper. So far I have enjoyed:

  • Dijkstra : Go To Statement Considered Harmful (1968)

  • Nikalus Wirth : Program Development by Stepwise Refinement

  • David Parnas : Information Distribution Aspects of Design Methodology (1971)

  • Liskov : Design Methodology for Reliable Software Systems (1972)

  • Extensible Language : Schuman and P Jourrand R. Balzer

  • Structured Programming : Dahl - Hierarchical Program

  • Jim Morris Protection in Programming Languages (1971)

  • Bill Wulf and Mary Shaw Global Variable Considered Harmful (1973)

  • Lisko and Zilles : ADTs (1974)

+4  A: 

Methodologies

The Agile Method and Other Fairy Tales

Nix
If you take this particular paper to heart, you also should read some of what others feel are flaws in the argument: http://typicalprogrammer.com/?p=11
Thyamine
That guy does *not* like Agile and he gets quite a bit *ad hominem* against Agile proponents.
Paul Nathan
@Thyamine - Thank you for the rebuttal. I do agree that Longstreet's paper is poorly written (sometimes thoughts jump randomly and it lacks proofreading). The anecdotes provided don't really prove anything (pointed out in the rebuttal). For example, music results in "documentation" but that is because the documentation IS what is being produced. Source code is a developer's music sheet. One area I do agree with Longstreet on, however, is that it seems too many developers forget to talk to their customers OR don't have an understanding of the business they work in. Other than that...meh.
JasCav
It's interesting to note the divergence between the "software engineer" vs the "software craftsman" that seems to be happening.
Paul Nathan
This is a terrible article full of straw men and I agree with Thyamine's link. There are legitimate arguments against the hive mind's Agile advocacy but this ain't one.
temp2290
+7  A: 

James Neighbors: "The Draco approach to producing Software from Reusable components" This is the source of the term "Domain Analysis".

I note that you are reading papers from the 1970s. It would be nice if far more of the community would do that:

1) They're great papers.

2) They cover a lot of the ground that current methodologies cover now, without the fractal complications.

3) There's a lot fewer of them; you can get a great education by reading literally everything published from 1965 to 1980.

(The Draco paper cited is 1983, but the PhD thesis from which is derived is dated 1980)

(Full disclosure: I was a graduate student during Neighbor's stint at UC Irvine, and his ideas have completely contaminated my brain, outlook, and the kinds of tools I now build).

Ira Baxter
+2  A: 

The New Methodology by Martin Fowler.

Is Design Dead by Martin Fowler.

Joe R
+5  A: 

I would advice you to follow IEEE Software and/or some of the publications of the ACM. Once there you will start to recognize your favorite authors and then search for their other articles.

ACM Queue is a good source of free and great content. Also a must read list is the IEEE Software's 25th-Anniversary

http://www.computer.org/portal/web/computingnow/software/toppicks

If you liked those articles, you could also find related articles from Google Scholar or look for other articles quoting those within publication networks (acm, citeseer, etc...)

Francisco Garcia
+3  A: 
Andrei Taptunov
love the next 700 programming languages...the beginning of DSLs.
LB
+2  A: 

Not a paper but a short book (well it originally WAS a paper) written by Eric Raymond: The Cathedral and the Bazaar. This book is relevant because it talks about the differences between open and closed source projects. It has some random tidbits in it as well.

DJTripleThreat
+1  A: 

Butler W. Lampson - Hints for Computer System Design (PDF)

(Non-PDF link here)

RarrRarrRarr
+2  A: 
  • D.L Parnas: On the Criteria To Be Used on Decomposing Systems into Modules
  • Martin Fowler: Is Design Dead?
  • Martin Folwer: Inversion of Control Containers and the Dependency Injection pattern

Since you're so interested on fundamental software engineering papers may I recommend

Software Fundamentals: Collected Papers by David L. Parnas

StudiousJoseph
+1  A: 

The Art of Computer Programming by Donald E. Knuth

Silence
+1 Not "software engineering" in the traditional sense but algorithm engineering in the small. Surely every software engineer needs to know this. This was the book for my first computer class in 1969, it is has been worth its weight in gold.
Ira Baxter
Not exactly a *paper* on software engineering! ;-)
Jim Ferrans
Oh right... paper... Sorry.
Silence
+1  A: 

I really enjoyed "Streamed Lines: Branching Patterns for Parallel Software Development". I found it extremely useful for understanding some best-practices in dealing with the engineering experience - particularly with larger teams and multiple development initiatives. I don't know if that counts towards your goal but I thought I'd mention it regardless.

Inkspeak
+2  A: 

Here is the same thread on Reddit, you can find some very nice suggestions there.

Delynx
+3  A: 

One of my all time favorites is

D L Parnas & P C Clements, A rational design process: how and why to fake it

While it is dated, the fundamental point - design is not a rational process, but that pretending that it is can be useful - is as relevant as ever.

fmark
A: 

Eric A. Meyer, “Considered Harmful” Essays Considered Harmful

The title says it all.

fmark
+1  A: 

I suggest to read about Formal Method, There are many organizations to accept paper and a bunch of them call for paper.

What IS Formal Method

Persons on Formal Method

Call for paper example

Nasser Hadjloo
A: 

Two of the recent papers related to programming I read are from Dijkstra

dkris
+1  A: 

A great one is Fred Brooks' Essence and Accidents in Software Engineering, which appeared in IEEE Computer in April 1987 and also in the second edition of his Mythical Man-Month.

Brooks explored why we hadn't seen the sort of exponential productivity improvement in software engineering as we had in chip speeds. He argued that it was because while we were making progress in reducing the "accidental complexity" of software development, there was still the "essential complexity" of having to carefully work out and specify the requirements of every software system. No amount of tooling or language design could significantly reduce essential complexity, at least in the "next decade".

I think his observations have mainly held true over the last quarter century. We have more productive languages, reusable frameworks, great IDEs, etc. but these all attack accidental complexity, not so much essential complexity.

For a 1995 critique of Brook's argument, see No Silver Bullet Revisted by Brad Cox (one of the two guys who invented Objective-C).

Jim Ferrans
A: 

Roy Thomas Fielding's doctoral dissertation Architectural Styles and the Design of Network-based Software Architectures [PDF] from 2000.

HTML version of the dissertation.

Gert G
A: 

I like Robert Martin's series of articles in the C++ Report. They present simple but key OOD principles.

On a similar note, Designing Reusable Classes presents a set of OO design heuristics, predating the work on patterns and heuristics in the 90's

I enjoyed these papers while learning OO

Ramiro Gonzalez Maciel

related questions