First of I'll assume that by computer science you really mean software engineering, more specifically network and web applications engineering. Otherwise if you want deep CS foundations start by getting a good CS theory book (Sipser or Hopcroft et Al.), and a good algorithms book(Skiena or Cormen), and complement them with some introductory logic(phil/math introductions are generally good enough).
For the "how does the web work question", the real question is if you are really interested in knowing that, if so "Computer Networking: A Top-Down Approach" gives a really in depth analysis of protocols at the different levels of abstraction. Otherwise most web related O'Reilly books cover the surface of what you need to know to develop applications at most small corporations.
I strongly disagree. If you're expecting the first value of a list, what use is nil?
If you have a list of Ints, then what can you do with nil returned? It's not an Int.
Nils have a habit of propagating through the whole type system, and you then need to have rules about how they apply to every function. (What is 1+nil? What is nil:[1,2,3]?).
Eventually every single function will either have odd behaviour when confronted with a nil, or will be a source of exceptions (which are generally undesirable in a pure functional setting).
Haskell encourages you to write patterns that check for these edge cases, and handle them explicitly:
Why would you have nil in a list of integers? In cases where you encounter nil instead of some type you look for you can add behavior to nil without doing if nil? in the function all the time.
I would agree that not having nil is better if you have these big typesystems but for a dynamic languge its hard to avoid.
Question: Don't these static langauge use "unit" to signal what nil would do in clojure (in some casses)?
All it says is that the program pieces fit together. The small benefit of knowing my potentially wrong program got the types of whatever is being passed around right gives me very little comfort when I think about the flexibility I lose by using statically typed languages.
I don't think that there will be that many competition, the ML folks that really want to try something new will go to F#, the Lisp folks will go to Clojure. Still there aren't that many reasons to abandon Common Lisp for Clojure(specially with Oracle controlling the JVM), or ML for F#(for Haskell maybe, but Haskell has its problems too).
The only existing reason is that the two of them run on modern, enterprise accepted platforms. If you're hacking your personal projects in Lisp, you have no reason to switch. If you want to sling some Lisp/ML at work, well Clojure of F# are likely to be your only options.
To ship it, yes, but there's the compiler, too. With F#, if your organization uses the latest Visual Studio, you're good; but if your shop uses a typical Java IDE setup, anyone who wants to build your project has to do extra work beyond the standard environment (e.g. installing Clojure's Eclipse or NetBeans plugins, with extra fun if you depend on Clojure libs that use Leiningen).
Why are people still discussing this? Start-ups don't grow on trees.
If there is something to be investigated it will, if there are any problems with angel financing they'll be known, meanwhile all this speculation is a waste of precious time.
I choose the music style according to what I feel like in a given day, but here are some favorites:
Dark Ambient: Lustmord, Gustaf Hildebrand, Robert Rich
"IDM": Aphex Twin(anything choosen from what I have) and Autechre
Metal: Burzum(filosofem), Xasthur, and mostly atmospheric BM
Industrial: Suicide Commando, VNV Nation, SPK
(Fin)NRG: Alek Szahala and Nomic
Classical: Bach, Handel, Liszt and Chopin
Demoscene music: Bitfellas radio
I will generally create a mix of from the above styles in a playlist and listen to it, when it begins to bother me (after some hours) I'll just change music style.
Also sometimes I just get some game CD and listen to the tracks, usually I choose Total Annihilation.
Those are not reason on not to use C++, but reason on why some people shouldn't be using C++ in the first place. Yes you can do it in python unless you want speed, if I am to interface my python code with C or C++ why can't I write them in C++ in the first place?
Also if I were to interface any scripting language code with C I would probably go with Lua.
Yes learn it, you should also learn at least one language per paradigm, it will give you a wider perspective on programming and a flexible mind.
IMHO one should learn at least: Haskell(or something ML based like OCaML or F#), C++(regardless of what anyone says it will be an useful insight), Java or C#(also check D if you want), something Lisp based(Scheme is small and simple), perhaps some Prolog, Erland and Ada.
Oh and see something of Forth if you like the looks of it and some assembly.
For the "how does the web work question", the real question is if you are really interested in knowing that, if so "Computer Networking: A Top-Down Approach" gives a really in depth analysis of protocols at the different levels of abstraction. Otherwise most web related O'Reilly books cover the surface of what you need to know to develop applications at most small corporations.