497 karma · joined August 5, 2008
I'd love for Clojure to make the same jump to LLVM however it relies far more on the host platform's libraries (the Java/C# libraries).
Buddhism (at least the Zen Buddhism tradition I am learning) teaches one to detach from all things. This is part of opening the mind and experiencing things as they are and not through one's misconceptions.
So eventually a student masters this and all other teachings by his masters and all past buddhas. At this point the student must detach even from these buddhas.
So if you meet the Buddha? Strike him down! You have no need of him anymore.
It's a sound argument but there are two main barriers of acceptance. First the anti-theists do not acknowledge that religious beliefs (and indeed many unfounded beliefs) are rational. Religious people are not crazy or uninformed. This is a separate issue from having an inconsistent and / or scientifically unfounded belief system.
Second, the anti-theists do not provide much of an alternative. Dawkins seems to say, you guys are obviously nuts, so you must see that you simply have to adopt my world view. It's off putting.
Anyway I've gone from bemused to agnostic to naturalist (a way of saying "atheist" without mentioning theism). I quite enjoy reading these authors ... I just don't see how they'll affect a change.
Similarly, perhaps online the use of American punctuation is becoming a negative signal, showing pedantic training as a "professional writer" rather than a true ability to convey ideas.
Ideas like government forcing service competition over the physical lines along easements granted by the a government should be explored.
Mavrick describes how all salaries were publicly posted. People see exactly where they are in relation to others. Of course this created tension at first, but eventually things settled. The magic happens during hiring. An open position's salary is also public, and everyone on an interview panel naturally ranks candidates versus current employees. Is the candidate better than Joe? She better be because she'll be making more than Joe.
Has anyone heard of a tech company doing something like this?
[1] http://en.wikipedia.org/wiki/Maverick_(book)
[2] http://www.amazon.com/Maverick-Success-Behind-Unusual-Workpl...
I'd say excellence is a necessary precursor to going pro, but is itself not sufficent. That extra push is some magic combination of genetics, upbringing and opportunity (nature and nurture coming together just so) - all along with the drive and experience to become excellent.
The confusion about closures happens because it doesn't exist in other languages. (There isn't a way to express it.)
Let's look at a simple C function that uses a global variable:
int a = 1;
int a_plus_2() {
return 2 + a;
}
This always returns 2 more than "a". Initially it will return 3. If "a" is set to 5 at some point in the future, "a_plus_2" will then return 7. Simple. No closure here.In Lisp, "a" would be called a "dynamic variable" because it changing its value affects all code that uses "a" over time, including usage within other scopes; "a" has a dynamic binding. But Lisp also has static binding which means the value of the variable is captured each time a scope is created and remains static over time within that scope.
Imagine a variation of C where variable make this distinction explicit by prefixing with with <dynamic> and <static>. <dynamic> would be the default and in fact is how the real C behaves. <static> now means Lisp notion of static binding (forget C's notion of static, which is totally different). Let's use it.
<static> int b = 1;
int b_plus_2() {
return 2 + b;
}
So here "b" is marked as static. When "b_plus_2" is defined at compile time, the current value of "b" is captured - statically bound - to its current value of 1. So "b_plus_2" will always return 3 _even if the global variable "b" is later modified. b = 5; /* modifying b */
int new_b_plus_2 {
return 2 + b;
}
Calling "new_b_plus_2" return 7. No surprise here. The twist is that the original "b_plus_2" still returns 3. The value of "b" is captured in a closure. Each new scope encloses the current value of "b", binding its current value statically (unchanging) within that scope. Closures become interesting when the block in question is a function body.So, yeah - it's a simple concept in the end. It's tricky because it doesn't exist many other languages. It provides a way to encapsulate state analogous to an object in OO languages [1].
The concept is more useful in Lisp with its higher order functions - functions that define other functions. This is very fluid in Lisp, while Python uses its lambda form for anonymous functions, Ruby has blocks and lambdas and...[2], and Java gets close with inner classes.
I hope this helps.
[1] "Objects are a poor man's closure" and "Closures are a poor man's object" http://stackoverflow.com/questions/2497801/closures-are-poor...
[2] I'm don't do Ruby - but's here's a ton of stuff on closures in Ruby: http://innig.net/software/ruby/closures-in-ruby.rb
Learning Lisp requires real, significant use of the language. Eventually you begin to think in the language and that's when profiency begins.
Merely reading about the language is not enough.
I'm sure this applies to learning any new programming language paradigm (as in procedural like C, OO like C++, Java and C#, and functional like CL, Clojure and Erlang) or any natural language for that matter.
[Edit: adding following sidenote.] Reading "On Lisp" was a big part of why I recently bought the $139 Kindle. Reading the "On Lisp" PDF isn't bad with the divice in landscape orientation.
In any case full electric cars allow centralized power generation, in turn allowing more opportunities for clean power.
PHP is weakly typed. Common Lisp, Clojure, Haskell and OCaml are strongly typed.
PHP is dynamically typed, Haskell and OCaml are statically typed.
That said I would like to learn more about these statically typed functional languages.
It's really that simple. We live in cities and work in groups and/or at companies because the benefits of collaboration and casual exchanges of ideas outweigh the detractions.
Facebook takes something like a 50% cut of the money made by Zynga with their Facebook app.
Microsoft did not create a walled garden so did not have the opportunity to charge for running on their platform.
Software as a service and (to a lesser extent) the various app stores are different. The incentives are not the same.
His point is that since in Scala mutability is possible (and indeed is idiomatic) you run into concurrency concerns.
http://en.wikipedia.org/wiki/A_Journey_to_the_Center_of_the_...
Quote:
“People’s reasons for living small vary a lot, but there seems to be a common thread of sustainability,” Shafer said. “A lot of people don’t want to use many more resources or put out more emissions than they have to.”
Quicklisp looks especially nice, hopefully solving the packaging and dependency situation.