great-cs-papers
所属分类:论文
开发工具:Others
文件大小:0KB
下载次数:0
上传日期:2019-02-26 19:12:52
上 传 者:
sh-1993
说明: 关于函数编程和软件工程的优秀论文集,
(Opinionated collection of great papers on functional programming and software- engineering,)
文件列表:
An_Axiomatic_Basis_for_Computer_Programming_C_A_R_Hoare.pdf (2383379, 2019-02-26)
Go_To_Statement_Considered_Harmful_E_Dijkstra.pdf (623785, 2019-02-26)
LICENSE (1066, 2019-02-26)
No_Silver_Bullet_Essence_and_Accidents_of_Software_Engineering_F_P_Brooks_Jr.pdf (10603817, 2019-02-26)
Out_of_the_Tar_Pit_B_Moseley_P_Marks.pdf (410878, 2019-02-26)
Recursive_Functions_of_Symbolic_Expressions_and_Their_Computation_by_Machine_McCarthy.pdf (262431, 2019-02-26)
The_Roots_of_Lisp.pdf (153086, 2019-02-26)
Why_Functional_Programming_Matters_J_Hughes.pdf (200007, 2019-02-26)
## Opinionated collection of great papers on functional programming and software-engineering
What follows is a compilation of papers and articles which were very
influential in the development of _my_ understanding of computer science
and programming. In another words, this is not a hall of fame; I list
them because I believe they provide immensely useful information for
aspiring programmers; programmers to whom this list may be recommended.
For this reason, positions included here may not be necessarily "great"
by any standard other than mine. (Although there is an obvious overlap -
some recommendations may even verge on being a cliché.)
### [Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I - J. McCarthy - 1960](https://github.com/IwoHerka/great-cs-papers/blob/master/Recursive_Functions_of_Symbolic_Expressions_and_Their_Computation_by_Machine_McCarthy.pdf)
_Abstract_: In this article, we first describe a formalism for defining
functions recursively. We believe this formalism has advantages both as
a programming language and as a vehicle for developing a theory of
computation. Next, we describe S-expressions and S-functions, give some
examples, and then describe the universal S-function apply which plays
the theoretical role of a universal Turing machine and the practical
role of an interpreter. Then we describe the representation of S-expressions
in the memory of the IBM 704 by list structures similar to those used by
Newell, Shaw and Simon [2], and the representation of S-functions by
program. Then we mention the main features of the LISP programming system
for the IBM 704. Next comes another way of describing computations with
symbolic expressions, and finally we give a recursive function
interpretation of flow charts.
### [Go To Considered Harmful - E. Dijkstra - 1968](https://github.com/IwoHerka/great-cs-papers/blob/master/Go_To_Statement_Considered_Harmful_E_Dijkstra.pdf)
_Abstract_: For a number of years I have been familiar with the observation
that the quality of programmers is a decreasing function of the density of
go to statements in the programs they produce. More recently I discovered
why the use of the go to statement has such disastrous effects, and I became
convinced that the go to statement should be abolished from all "higher level"
programming languages (i.e. everything except, perhaps, plain machine code).
At that time I did not attach too much importance to this discovery; I now
submit my considerations for publication because in very recent discussions
in which the subject turned up, I have been urged to do so.
### [An Axiomatic Basis for Computer Programming - C. A. R. Hoare - 1969](https://github.com/IwoHerka/great-cs-papers/blob/master/An_Axiomatic_Basis_for_Computer_Programming_C_A_R_Hoare.pdf)
_Abstract_: In this paper an attempt is made to explore the logical
foundations of computer programming by use of techniques which were first
applied in the study of geometry and have later been extended to other
branches of mathematics. This involves the elucidation of sets of axioms
and rules of inference which can be used in proofs of the properties of
computer programs. Examples are given of such axioms and rules, and a formal
proof of a simple theorem is displayed. Finally, it is argued that important
advantage, both theoretical and practical, may follow from a pursuance of
these topics.
### [No Silver Bullet - Essence and Accidents of Software Engineering - F. P. Brooks Jr. - 1987](https://github.com/IwoHerka/great-cs-papers/blob/master/No_Silver_Bullet_Essence_and_Accidents_of_Software_Engineering_F_P_Brooks_Jr.pdf)
_Abstract_:
Of all the monsters that fill the nightmares of our folklore, none terrify
more than werewolves, because they transform unexpectedly from the familiar
into horrors. For these, one seeks bullets of silver that can magically lay
them to rest. The familiar software project, at least as seen by the
nontechnical manager, has something of this character; it is usually innocent
and straightforward, but is capable of becoming a monster of missed schedules,
blown budgets, and flawed products. So we hear desperate cries for a silver
bullet--something to make software costs drop as rapidly as computer hardware
costs do.
### [Why Functional Programming Matters - J. Hughes - 1989/1990](https://github.com/IwoHerka/great-cs-papers/blob/master/Why_Functional_Programming_Matters_J_Hughes.pdf)
_Abstract_: As software becomes more and more complex, it is more and more
important to structure it well. Well-structured software is easy to write
and to debug, and provides a collection of modules that can be reused
to reduce future programming costs. In this paper we show that two features
of functional languages in particular, higher-order functions and lazy
evaluation, can contribute significantly to modularity. As examples, we
manipulate lists and trees, program several numerical algorithms, and implement
the alpha-beta heuristic (an algorithm from Artificial Intelligence
used in game-playing programs). We conclude that since modularity is the
key to successful programming, functional programming offers important
advantages for software development.
### [The Roots of Lisp](https://github.com/IwoHerka/great-cs-papers/blob/master/The_Roots_of_Lisp.pdf)
_Abstract_: In 1960, John McCarthy published a remarkable paper in which he
did for programming something like what Euclid did for geometry.1 He showed how, given
a handful of simple operators and a notation for functions, you can build a
whole programming language. He called this language Lisp, for “List Processing,”
because one of his key ideas was to use a simple data structure called a
list for both code and data.
### [Out of the Tar Pit - B. Moseley, P. Marks - 2006](https://github.com/IwoHerka/great-cs-papers/blob/master/Out_of_the_Tar_Pit_B_Moseley_P_Marks.pdf)
_Abstract_: Complexity is the single major difficulty in the successful development
of large-scale software systems. Following Brooks we distinguish
accidental from essential difficulty, but disagree with his premise that
most complexity remaining in contemporary systems is essential. We
identify common causes of complexity and discuss general approaches
which can be taken to eliminate them where they are accidental in
nature. To make things more concrete we then give an outline for
a potential complexity-minimizing approach based on functional programming
and Codd’s relational model of data.
近期下载者:
相关文件:
收藏者: