Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

Programming Books

Name: Anonymous 2013-09-02 19:45

Let's get an actual thread going.

Post your favourite computer science, mathematics, and programming textbooks.

I'll start with a few that aren't posted all that much.

- The Elements of Computing Systems
Shows the implementation of basically everything, from stringing together logic gates all the way to a compiler, OS, VM, interpreter, etc.

- Types and Programming Languages + Advanced Topics in Types and Programming Languages
A good abstract treatise of type systems and programming language theory.

- Lisp in Small Pieces
Basically an entire book about the implementation of Scheme and Lisp interpreters and compilers.

- Artificial Intelligence: A Systems Approach
A good practical overview of most AI algorithms, covers search, NNs, unsupervised & probabilistic algorithms, genetic and evolutionary algorithms, etc. Example code in C.

Name: Anonymous 2013-09-02 20:17

Should I get the little lisper 3rd ed or the little schemer?

Name: Anonymous 2013-09-02 20:20

>>1
my only book has been /prog/ for quite a long time. Maybe we can drop some links in this thread.

http://www.schemers.org/Documents/#all-texts
http://www.cliki.net/Lisp%20books

Name: Anonymous 2013-09-02 20:22

>>2
What do you like better? Lisp or Scheme? I skimmed over The Little Schemer, and while it was interest, I'd recommend something like Concrete Abstractions along with The Scheme Programming Language, 3rd Ed. if you want to get a good grasp of the language and concepts. TSPL is like the K&R of Scheme, and Concrete Abstractions is a lighter SICP that teaches you Scheme along the way.

Name: Anonymous 2013-09-02 20:35

Name: Anonymous 2013-09-02 20:43

>>5
Should I post the Ruby pasta?

Name: Anonymous 2013-09-02 20:53

>>6
Do us the honor.

Name: Anonymous 2013-09-02 20:55

>>7
Very well. I wonder who wrote all of these:

- Ruby indulges obfuscation: Ruby has no keyword/optional arguments, so you'll have to use hash parameters as a substitute. This is an idiom that comes from Perl. Ugly, Perl-looking code, like {proc |obj, *args| obj.send(self, *args)} or (0..127).each { |n| p n.chr } , considered beautiful. Another confusing Perl borrowing are postfix `if` and `while` (line = file.readline while line != "needle" if valid line) and quirky variable names (partially due to naive environment design): @instance_var, @@class_var, CONSTANT_VAR, $global_var, :sym, &proc, $~[1], $!, $>, $@, $&, $+, $0, $~, $’, $`, $:, $., $* and $?. If A is [1,2,3] and B is [10,20,30], then A+B is [1,2,3,10,20,30], when you probably wanted [11,22,33]. If `a` and `b` are undefined, then "a = b" produces error, but "a = a" gives nil.

- Faulty syntax. Ruby cant distinguishing a method call from an operator: "a +b" can be both "a(+b)" and "a + b" - remove the space to the left of "+" or add a space to the right of "+", and it will be parsed as an addition. Same with puts s *10, which is parsed as puts(s(*10)). Ruby's expressions terminate by a newline and you have to implicitly state that the expression is not over, using trailing + or \. That makes it easy to make a dumb syntactic mistake by forgeting to continue line. It also encourages putting everything onto a single line, producing messy looking code. A good amount of your code will consist of "begin end begin begin end end..." noise.

- Slow: JIT-compiling implementations exist, but they're still slow and incomplete, due to Ruby's complexity and bad design, which make Ruby difficult to optimize compared to other dynamic languages, like Lisp. For example, Ruby has to accomodate for somebody in another thread changing the definition of a class spontaneously, forcing compiler to be very conservative. Compiler hints, like `int X` from C/C++ or `declare (int X)` from Lisp, arent possible either.

- Ruby's GC is a naive mark-and-sweep implementation, which stores the mark bit directly inside objects, a GC cycle will thus result in all objects being written to, making their memory pages `dirty` and Ruby's speed proportional to the number of allocated objects. Ruby simply was not designed to support hundred thousand objects allocation per second. Unfortunately, that’s exactly what frameworks like Ruby on Rails do. The more objects you allocate, the more time you "lose" at code execution. For instance something as simple as 100.times{ ‘foo’ } allocates 100 string objects, because strings are mutable and therefore each version requires its own copy. A simple Ruby on Rails 'hello world' already uses around 332000 objects.

- OOP: Matz had a bit too much of the "OOP is the light and the way" philosophy in him, in effect Ruby doesn't have stand-alone functions and Ruby's blocks can't be used in exactly the same way as usual closures. Even high-order functions are attached to objects and produce verbose code: "names.map { |name| name.upcase }", instead of simple "map upcase names".

- Ruby (like most other scripting languages) does not require variables to be declared, as (let (x 123) ...) in Lisp or int x = 123 in C/C++. If you want a variable private to a block, you need to pick an unique variable name, holding the entire symbol table in your head. Ruby introduces new variables by just parsing their assignements, meaning "a = 1 if false; a" wont raise an error. All that means Ruby can't detect even a trivial typo - it will produce a program, which will continue working for hours until it reaches the typo. Local and global scopes are unintuitive. Certain operations (like regular expression operator) create implicit local variables for even more confusion.

- "def method_missing(*args)" is a blackhole, it makes language semantic overly cryptic. Debugging code that uses method_missing is painful: at best you get a NoMethodError on an object that you didn't expect, and at worst you get SystemStackError.

- Non-othogonal: {|bar| bar.foo}, proc {|bar| bar.foo}, lambda {|bar| bar.foo}, def baz(bar) bar.foo end - all copy the same functionality, where Lisp gets along with only `lambda`. Some Ruby's features duplicate each other: print "Hello", puts "Hello", $stdout<<"Hello", printf "Hello", p "Hello", write "Hello" and putc "Hello" -- all output text to stdout; there is also sprintf, which duplicates functionality of printf and string splicing. begin/do/then/end, {} and `:` also play role in bloating syntax, however, in some cases, precedence issues cause do/end and {} to act differently ({} binds more tightly than a do/end). More bloat comes from || and `or`, which serve the same purpose.

- Ruby as a language supports continuations via callcc keyword. Ruby's callcc is incredibly slow, implemented via stack copying. JRuby and IronRuby don't have continuations at all, and it's quite unlikely they will ever get them. There were also support breaches in mainline Ruby, where Ruby 1.9 has not supported continuations for a while. If you want your code to be portable, I'd suggest not using Ruby.

- Ruby was created "because there was no good scripting language that could handle Japanese text". Today it's mostly Rails hype and no outstanding feature, that makes the language, like the brevity of APL or simplicity and macros of Lisp. "There is some truth in the claim that Ruby doesn’t really give us anything that wasn’t there long ago in Lisp and Smalltalk, but they weren’t bad languages." -- Matthew Huntbach

Name: Anonymous 2013-09-02 21:58

any books for erlang you guys recommend?

Name: Anonymous 2013-09-02 22:19

>>9
Erlang? I 'ardly 'erknow!

Name: Anonymous 2013-09-03 1:24

>>8
I'm not sure why this always gets reposted, most of these arguments are entirely personal preference.

Name: Anonymous 2013-09-03 1:29

>>12
I guess there aren't enough ruby programmers with us to counter it.

Name: Anonymous 2013-09-03 2:11

Ruby appears to be a friendly, non-serious, popular language. That's why I don't like it and think that it is probably shitty.

Name: Anonymous 2013-09-03 5:29

>>13
I've seen a pasta floating around about how ``We in the ruby community need to have a firmer foundation in the design principles of our language so we can refute these spurious arguments by trolls first off {} is completely optional and if you don't like begin end then that's just your opinion but seriously check out _why for proof that Ruby is art blah blah blah''.

Name: Anonymous 2013-09-04 0:00

>>14
Still greater than FIOC

Name: Anonymous 2013-09-04 0:10

>>16
No, no. FIOC is much better than Ruby. I know that's like saying a dog turd is much better than a bucket of festering cow shit, but if you think really carefully about it, it's true.

Name: Anonymous 2013-09-04 0:25

>>17
No, no. Ruby is much better than FIOC. I know that's like saying a dog turd is much better than a bucket of festering cow shit, but if you think really carefully about it, it's true.

Name: Anonymous 2013-09-04 0:48

But Ruby is the cow shit, >>18-kun.

Oh, you're pointing out the fallacy in my argument. You're right, but Ruby is still cow shit.
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end

Name: Anonymous 2013-09-04 1:15

>>19
do ... end is preferable over THE FORCED INDENTATION OF THE CODE!

Also, Ruby supports using curly brackets instead.}}}}}}

Name: Anonymous 2013-09-04 1:26

>>20
No! THE FORCED INDENTATION OF THE CODE is pretty much unnoticeable because I always indent my code!

Wait, I didn't know about the optional braces. I think I should kill myself back to the imagereddits.

Name: Anonymous 2013-09-04 7:55

>>21
I don't like to write FIOC and yet I'm willing to forgive other languages for using indentation like that.

i mena haskal
Seriously, I've had so much fun learning Haskell so far. It's quite refreshing.

Name: Anonymous 2013-09-04 12:14

>>20
Yes! Just like Javascript.
)};()
}};){};();
}}();;())}
}};}():)}
[]};():()]
}};}}};}};}}}};};;
}};

Name: Anonymous 2013-09-04 19:50

Name: Anonymous 2013-09-05 19:39

Oh, by the way guys, I almost forgot:

http://progrider.org/files/books/

Here's a collection of "Important Publications in Computer Science" along with the Lambda Papers. Since I've got unlimited bandwidth now feel free to download any/all.

Name: Anonymous 2013-09-05 19:51

Name: Anonymous 2013-09-05 20:47

>>25
Thank you!

Name: (^@^ ) 2013-09-05 21:36

Name: Anonymous 2013-09-05 21:44

>>28
moaar

Name: Anonymous 2013-09-05 21:57

>>28
#/g/sicp
Ugh.

Name: Anonymous 2013-09-05 23:44

Logic, Programming and Prolog.

Name: Anonymous 2013-09-05 23:58

Logic, Programming and Prolog.

PS: Fuck minutes long per-IP antiflood.

Name: gaping_mouth.png 2013-09-06 0:00

Name: Anonymous 2013-09-06 0:12

Name: Anonymous 2013-09-06 0:15

Smalltalk, mediumtalk, largetalk, fattalk, skinnytalk, bullshittalk, fagtalk, politicstalk. It's all the same and your definitive fucking list (yeah good luck with the politics one HAHAHAHA) with a wiki named c2 as in c4 because TERRORISTS! Shall be good enough but never enough. Fucking endless minuscule details that mean nothing. Need more women involved in it. more big picture then, less kikes.

Name: Anonymous 2013-09-06 0:38

So what's this smalltalk thing anyways? Why would I want to learn it?

Name: inb4 2013-09-06 0:42

>>34
Smalltalk did when Scala was made. Well, really Scheme, but who is complaining.

35
Um:
Cunningham & Cunningham, Inc.
c2.com
A small consultancy specialized in object-oriented programming and pattern languages, located in Portland, OR.

Name: >>37 fuck, I am drunk 2013-09-06 0:46

>>34
Smalltalk di[u]e[/u]d when Scala was made. Well, really Scheme, but who is complaining⸮

>>35
Um:
Cunningham & Cunningham, Inc.
c2.com
A small consultancy specialized in object-oriented programming and pattern languages, located in Portland, OR.

>>36
It was relevant in the 1970s and 80s, until Scheme and Scala destroyed it to the ground.

Name: Anonymous 2013-09-06 0:53

>>38
Smalltalk died, but its ideas live on. I love the idea of the smalltalk ide.

Just remember, CL is better than scheme! But scheme is lisp! It's also not lisp!

http://c2.com/cgi/wiki?IsSchemeLisp

Name: Anonymous 2013-09-06 1:00

>>29 I know man, I know. I was there. I am remember my freshmen year, and getting my first internship. The memories are flooding. No take them back, take them back.

So who is up for another game of CoreWar?

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List