Re: [R] Programming Concepts and Philosophy

2008-06-23 Thread Philipp Pagel
On Fri, Jun 20, 2008 at 10:04:46AM -0500, hadley wickham wrote:
 2008/6/20 [EMAIL PROTECTED] [EMAIL PROTECTED]:
  On 20 июн, 11:06, Wacek Kusnierczyk
  [EMAIL PROTECTED] wrote:
  the result may be that the more beautiful the code, the more the 
  performance
  sucks.
 
  Sad but true.
 
 If you do nothing to your code, in 18 months time its performance will
 have doubled because computers will have become faster.  Your code
 will not get easier to understand by itself.

Very true. And I would like to contribute one of my favorite quotations:

It is easier to optimize correct code than to correct optimized code.
  --Bill Harlan

cu
Philipp

-- 
Dr. Philipp Pagel
Lehrstuhl für Genomorientierte Bioinformatik
Technische Universität München
Wissenschaftszentrum Weihenstephan
85350 Freising, Germany
http://mips.gsf.de/staff/pagel

__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


Re: [R] Programming Concepts and Philosophy

2008-06-23 Thread jim holtman
To quote Jon Bentley (Programming Pearls):

The fastest, cheapest, most reliable piece of code is that which
isn't there; design as much out of your code as you design in.

On Mon, Jun 23, 2008 at 3:57 AM, Philipp Pagel [EMAIL PROTECTED] wrote:
 On Fri, Jun 20, 2008 at 10:04:46AM -0500, hadley wickham wrote:
 2008/6/20 [EMAIL PROTECTED] [EMAIL PROTECTED]:
  On 20 июн, 11:06, Wacek Kusnierczyk
  [EMAIL PROTECTED] wrote:
  the result may be that the more beautiful the code, the more the 
  performance
  sucks.
 
  Sad but true.

 If you do nothing to your code, in 18 months time its performance will
 have doubled because computers will have become faster.  Your code
 will not get easier to understand by itself.

 Very true. And I would like to contribute one of my favorite quotations:

 It is easier to optimize correct code than to correct optimized code.
  --Bill Harlan

 cu
Philipp

 --
 Dr. Philipp Pagel
 Lehrstuhl für Genomorientierte Bioinformatik
 Technische Universität München
 Wissenschaftszentrum Weihenstephan
 85350 Freising, Germany
 http://mips.gsf.de/staff/pagel

 __
 R-help@r-project.org mailing list
 https://stat.ethz.ch/mailman/listinfo/r-help
 PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
 and provide commented, minimal, self-contained, reproducible code.




-- 
Jim Holtman
Cincinnati, OH
+1 513 646 9390

What is the problem you are trying to solve?
__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


Re: [R] Programming Concepts and Philosophy

2008-06-23 Thread stephen sefick
This is a lot like music- a good musician knows better when not to play than
when to (guitar teacher I had 15+ years ago).

stephen

On Mon, Jun 23, 2008 at 8:33 AM, jim holtman [EMAIL PROTECTED] wrote:

 To quote Jon Bentley (Programming Pearls):

 The fastest, cheapest, most reliable piece of code is that which
 isn't there; design as much out of your code as you design in.

 On Mon, Jun 23, 2008 at 3:57 AM, Philipp Pagel [EMAIL PROTECTED] wrote:
  On Fri, Jun 20, 2008 at 10:04:46AM -0500, hadley wickham wrote:
  2008/6/20 [EMAIL PROTECTED] [EMAIL PROTECTED]:
   On 20 июн, 11:06, Wacek Kusnierczyk
   [EMAIL PROTECTED] wrote:
   the result may be that the more beautiful the code, the more the
 performance
   sucks.
  
   Sad but true.
 
  If you do nothing to your code, in 18 months time its performance will
  have doubled because computers will have become faster.  Your code
  will not get easier to understand by itself.
 
  Very true. And I would like to contribute one of my favorite quotations:
 
  It is easier to optimize correct code than to correct optimized code.
   --Bill Harlan
 
  cu
 Philipp
 
  --
  Dr. Philipp Pagel
  Lehrstuhl für Genomorientierte Bioinformatik
  Technische Universität München
  Wissenschaftszentrum Weihenstephan
  85350 Freising, Germany
  http://mips.gsf.de/staff/pagel
 
  __
  R-help@r-project.org mailing list
  https://stat.ethz.ch/mailman/listinfo/r-help
  PLEASE do read the posting guide
 http://www.R-project.org/posting-guide.html
  and provide commented, minimal, self-contained, reproducible code.
 



 --
 Jim Holtman
 Cincinnati, OH
 +1 513 646 9390

 What is the problem you are trying to solve?
 __
 R-help@r-project.org mailing list
 https://stat.ethz.ch/mailman/listinfo/r-help
 PLEASE do read the posting guide
 http://www.R-project.org/posting-guide.html
 and provide commented, minimal, self-contained, reproducible code.




-- 
Let's not spend our time and resources thinking about things that are so
little or so large that all they really do for us is puff us up and make us
feel like gods. We are mammals, and have not exhausted the annoying little
problems of being mammals.

-K. Mullis

[[alternative HTML version deleted]]

__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


Re: [R] Programming Concepts and Philosophy

2008-06-20 Thread Wacek Kusnierczyk
Simon Blomberg wrote:
 I try to use a functional programming style. I define functions within
 functions when it is helpful in terms of information hiding. I avoid
 writing functions with side-effects as much as possible, so the only
 communication of the called function with the caller function is through
 the arguments and the returned value. I try to keep the code as simple
 and clear as possible (this is one of the things I fail at most). An
 appropriate amount of comments is also useful, especially when returning
 to old code after a long break. OOP is useful for really big projects,
 but I find OOP unnecessarily complicated for small jobs.

 I found Code Complete, by McConnell (http://www.cc2e.com/) to be very
 helpful. I'm sure there are other books around with similar tips. Before
 I switched to R, I used XLisp-Stat. I found learning Lisp to be a really
 good way to learn good programming practices. Good Lisp code is the
 closest thing you can get to poetry in computer programming. Lisp Style
  Design, by Miller and Benson was helpful. I'd like to see an S Style
  Design.
   

i support this view.  i found sicp (structure and interpretation of
computer programs, by abelson  sussman, a real classic in the field)
particularly enlightening, although it certainly is a bit outdated in
many respects -- but just a bit.  functional programming style is great,
but beware -- r will create (afaik, experts please correct me if this is
wrong) a deep copy of about any object you send as an argument to a
function (if only when it is actually used inside the function), and the
result may be that the more beautiful the code, the more the performance
sucks. 

in pure functional programming, a function cannot change any part of the
object passed to it as an argument, so there's no need for making a
local copy.  in r everything can happen as you can deparse the call to a
function inside the function body, and you can never tell whether the
object you pass to a function will be changed or not, given only the
function's signature.

vQ

__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


Re: [R] Programming Concepts and Philosophy

2008-06-20 Thread Jan T. Kim
On Fri, Jun 20, 2008 at 09:06:24AM +0200, Wacek Kusnierczyk wrote:
 Simon Blomberg wrote:
  I try to use a functional programming style. I define functions within
  functions when it is helpful in terms of information hiding. I avoid
  writing functions with side-effects as much as possible, so the only
  communication of the called function with the caller function is through
  the arguments and the returned value. I try to keep the code as simple
  and clear as possible (this is one of the things I fail at most). An
  appropriate amount of comments is also useful, especially when returning
  to old code after a long break. OOP is useful for really big projects,
  but I find OOP unnecessarily complicated for small jobs.
 
  I found Code Complete, by McConnell (http://www.cc2e.com/) to be very
  helpful. I'm sure there are other books around with similar tips. Before
  I switched to R, I used XLisp-Stat. I found learning Lisp to be a really
  good way to learn good programming practices. Good Lisp code is the
  closest thing you can get to poetry in computer programming. Lisp Style
   Design, by Miller and Benson was helpful. I'd like to see an S Style
   Design.

 
 i support this view.  i found sicp (structure and interpretation of
 computer programs, by abelson  sussman, a real classic in the field)
 particularly enlightening, although it certainly is a bit outdated in
 many respects -- but just a bit.  functional programming style is great,
 but beware -- r will create (afaik, experts please correct me if this is
 wrong) a deep copy of about any object you send as an argument to a
 function (if only when it is actually used inside the function), and the
 result may be that the more beautiful the code, the more the performance
 sucks. 

Not necessarily -- R's promise mechanism quite reasonably ensures
that copies of parameter objects are only made upon modifying these
objects.

However, on a more fundamental programming philosophy note, the fact
that R does not allow multiple references to one object is a limitation.
One of the fundamental principles of good programming is that there
should be a one-to-one correspondence between instances in the program
and objects in the real world (problem domain etc.), and having no
references makes achieving this difficult (and quite impossible for
more complex systems).

Best regards, Jan
-- 
 +- Jan T. Kim ---+
 | email: [EMAIL PROTECTED]   |
 | WWW:   http://www.cmp.uea.ac.uk/people/jtk |
 *-=  hierarchical systems are for files, not for humans  =-*

__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


Re: [R] Programming Concepts and Philosophy

2008-06-20 Thread hadley wickham
 However, on a more fundamental programming philosophy note, the fact
 that R does not allow multiple references to one object is a limitation.
 One of the fundamental principles of good programming is that there
 should be a one-to-one correspondence between instances in the program
 and objects in the real world (problem domain etc.), and having no
 references makes achieving this difficult (and quite impossible for
 more complex systems).

This is a principle of object oriented programming, not good
programming in general!

Hadley

-- 
http://had.co.nz/

__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


Re: [R] Programming Concepts and Philosophy

2008-06-20 Thread Spencer Graves
 Maybe I missed it, but I haven't seen in this tread mention of 
Venables and Ripley (2000) S Programming (Springer).  I found it 
interesting and useful, though I have not used it as much as MASS -- 
partly because it is more specialized and it's coverage is not as broad. 


 Spencer

hadley wickham wrote:

However, on a more fundamental programming philosophy note, the fact
that R does not allow multiple references to one object is a limitation.
One of the fundamental principles of good programming is that there
should be a one-to-one correspondence between instances in the program
and objects in the real world (problem domain etc.), and having no
references makes achieving this difficult (and quite impossible for
more complex systems).



This is a principle of object oriented programming, not good
programming in general!

Hadley




__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


Re: [R] Programming Concepts and Philosophy

2008-06-20 Thread Simon Blomberg
I read the Wizard Book too. Absolutely classic! I agree about paying attention 
to performance, of course. Lisp programmers bend over backwards to write 
tail-recursive functions for similar performance reasons. So you have to pay 
attention to the language's idiosyncracies. But the time spent coding is 
usually much longer than the eventual run time. Learning to write well-designed 
code can do more to save time, even if the run time is slightly longer than 
optimal. If run time is an issue, then switching to C or Fortran etc. might be 
the best bet. But even in that case, using R for prototyping code can provide 
valueable insights.

Cheers,

Simon.

Simon Blomberg, BSc (Hons), PhD, MAppStat. 
Lecturer and Consultant Statistician 
Faculty of Biological and Chemical Sciences 
The University of Queensland 
St. Lucia Queensland 4072 
Australia 
T: +61 7 3365 2506 
email: S.Blomberg1_at_uq.edu.au

Policies:
1.  I will NOT analyse your data for you.
2.  Your deadline is your problem.

The combination of some data and an aching desire for 
an answer does not ensure that a reasonable answer can 
be extracted from a given body of data. - John Tukey.



-Original Message-
From: Wacek Kusnierczyk [mailto:[EMAIL PROTECTED]
Sent: Fri 20/06/2008 5:06 PM
To: R help
Cc: Simon Blomberg
Subject: Re: [R] Programming Concepts and Philosophy
 
Simon Blomberg wrote:
 I try to use a functional programming style. I define functions within
 functions when it is helpful in terms of information hiding. I avoid
 writing functions with side-effects as much as possible, so the only
 communication of the called function with the caller function is through
 the arguments and the returned value. I try to keep the code as simple
 and clear as possible (this is one of the things I fail at most). An
 appropriate amount of comments is also useful, especially when returning
 to old code after a long break. OOP is useful for really big projects,
 but I find OOP unnecessarily complicated for small jobs.

 I found Code Complete, by McConnell (http://www.cc2e.com/) to be very
 helpful. I'm sure there are other books around with similar tips. Before
 I switched to R, I used XLisp-Stat. I found learning Lisp to be a really
 good way to learn good programming practices. Good Lisp code is the
 closest thing you can get to poetry in computer programming. Lisp Style
  Design, by Miller and Benson was helpful. I'd like to see an S Style
  Design.
   

i support this view.  i found sicp (structure and interpretation of
computer programs, by abelson  sussman, a real classic in the field)
particularly enlightening, although it certainly is a bit outdated in
many respects -- but just a bit.  functional programming style is great,
but beware -- r will create (afaik, experts please correct me if this is
wrong) a deep copy of about any object you send as an argument to a
function (if only when it is actually used inside the function), and the
result may be that the more beautiful the code, the more the performance
sucks. 

in pure functional programming, a function cannot change any part of the
object passed to it as an argument, so there's no need for making a
local copy.  in r everything can happen as you can deparse the call to a
function inside the function body, and you can never tell whether the
object you pass to a function will be changed or not, given only the
function's signature.

vQ


[[alternative HTML version deleted]]

__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


Re: [R] Programming Concepts and Philosophy

2008-06-20 Thread [EMAIL PROTECTED]
On 20 июн, 11:06, Wacek Kusnierczyk
[EMAIL PROTECTED] wrote:
 the result may be that the more beautiful the code, the more the performance
 sucks.

Sad but true.

Andrey

__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


Re: [R] Programming Concepts and Philosophy

2008-06-20 Thread Marc Schwartz

on 06/20/2008 10:04 AM hadley wickham wrote:


If you do nothing to your code, in 18 months time its performance will
have doubled because computers will have become faster.  Your code
will not get easier to understand by itself.


I suspect a good fortunes candidate...

:-)

Marc

__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


Re: [R] Programming Concepts and Philosophy

2008-06-20 Thread Ramon Diaz-Uriarte
2008/6/20 hadley wickham [EMAIL PROTECTED]:
 2008/6/20 [EMAIL PROTECTED] [EMAIL PROTECTED]:
 On 20 июн, 11:06, Wacek Kusnierczyk
 [EMAIL PROTECTED] wrote:
 the result may be that the more beautiful the code, the more the performance
 sucks.

 Sad but true.

 If you do nothing to your code, in 18 months time its performance will
 have doubled because computers will have become faster.  Your code

But that doesn't seem to be true anymore (if we are talking single
CPU), and it seems not to have been true for at least a few years
(e.g.,
http://www.eecs.berkeley.edu/Pubs/TechRpts/2006/EECS-2006-183.html
for instance, their figure 2 in p. 6).

 will not get easier to understand by itself.


No it won't.

Best,

R.

 Hadley


 --
 http://had.co.nz/
 __
 R-help@r-project.org mailing list
 https://stat.ethz.ch/mailman/listinfo/r-help
 PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
 and provide commented, minimal, self-contained, reproducible code.




-- 
Ramon Diaz-Uriarte
Statistical Computing Team
Structural Biology and Biocomputing Programme
Spanish National Cancer Centre (CNIO)
http://ligarto.org/rdiaz
Phone: +34-91-224-6900 ext. 3019
__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


Re: [R] Programming Concepts and Philosophy

2008-06-20 Thread Esmail Bonakdarian

hadley wickham wrote:

2008/6/20 [EMAIL PROTECTED] [EMAIL PROTECTED]:

If you do nothing to your code, in 18 months time its performance will
have doubled because computers will have become faster.  Your code
will not get easier to understand by itself.


Very nicely put .. and true too!

__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


Re: [R] Programming Concepts and Philosophy

2008-06-19 Thread Simon Blomberg
I try to use a functional programming style. I define functions within
functions when it is helpful in terms of information hiding. I avoid
writing functions with side-effects as much as possible, so the only
communication of the called function with the caller function is through
the arguments and the returned value. I try to keep the code as simple
and clear as possible (this is one of the things I fail at most). An
appropriate amount of comments is also useful, especially when returning
to old code after a long break. OOP is useful for really big projects,
but I find OOP unnecessarily complicated for small jobs.

I found Code Complete, by McConnell (http://www.cc2e.com/) to be very
helpful. I'm sure there are other books around with similar tips. Before
I switched to R, I used XLisp-Stat. I found learning Lisp to be a really
good way to learn good programming practices. Good Lisp code is the
closest thing you can get to poetry in computer programming. Lisp Style
 Design, by Miller and Benson was helpful. I'd like to see an S Style
 Design.

Cheers,

Simon.


On Fri, 2008-06-20 at 14:35 +1200, Murray Jorgensen wrote:
 I am wondering if people on the list could recommend books that they 
 have found helpful about programming concepts and style? I often find 
 that students write R programs by copying existing code but could really 
 benefit from the understanding of more general programming ideas. An 
 example would be to avoid writing functions which attempt to modify 
 their parameters. Another principle would be not to write programs with 
 numbers used as constants but to assign them to named objects as in
 
 n - 120 # number of observations
 p - 10  # number of variables
 
 near the beginning of a program rather than using 10 and 120 
 throughout the script.
 
 This sort of stuff is not specifically R but can be a problem for 
 students with little programming background.
 
 I am happy to summarise responses.
 
 Murray Jorgensen
 
-- 
Simon Blomberg, BSc (Hons), PhD, MAppStat. 
Lecturer and Consultant Statistician 
Faculty of Biological and Chemical Sciences 
The University of Queensland 
St. Lucia Queensland 4072 
Australia
Room 320 Goddard Building (8)
T: +61 7 3365 2506
http://www.uq.edu.au/~uqsblomb
email: S.Blomberg1_at_uq.edu.au

Policies:
1.  I will NOT analyse your data for you.
2.  Your deadline is your problem.

The combination of some data and an aching desire for 
an answer does not ensure that a reasonable answer can 
be extracted from a given body of data. - John Tukey.

__
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.