1,433 reputation
bio website
location Brooklyn, NY
age 33
visits member for 4 years
seen Dec 25 '14 at 21:37
Good Morning how are you, I'm dr jimbob
I'm interested in things.
I'm not a real dr,
But I am a real jim bob.

Have a PhD in Experimental High-Energy Physics, but left academia in mid-2010 to program professionally.

Mostly program/script in python, django, and jquery these days doing mostly web apps.

Also have experience programming in C, C++, java, haskell, php, and (bash) shell more in the past.

Linux as primary OS since 1999, ubuntu user since 2005 (Hoary).

comment Why do people use programming books?
Having a book as a reference is very useful--you gain from the experience of others. The "book" could even be extensive online documentation/tutorials like django or jquery. But trial & error + reading source alone will leave major gaps in your knowledge. Now if you only need a few lines of jQuery, your method works but you didn't learn the language. But if you want to learn C, I'd recommend having K&R as a reference. Sure most info is online somewhere, but scattered throughout many blog posts.
comment If you could ask one technical interview question, what would it be
To clarify more, it may be clearer with an example. If you calculate 216, you could do x = 1, then x*=2 for 16 times and get the answer for 16 multiplications. Or you could find recognize that 216 = (28)*(28), (28)=(24)*(24), (24)=(22)*(22), and 2**2 = 2*2. Thus you ultimately only need lg(16) = 4 multiplications with the recursive method (sure it could be implemented with a for loop but would be uglier/less natural).
comment If you could ask one technical interview question, what would it be
@bjarkef: Recursion done properly (e.g., divide and conquer) is much faster. It naively requires O(y) multiplications, but recursive divide-and-conquer requires only O(lg y) multis. (Granted this is a slightly simplified as multiplication will not be an O(1) operation in the CPU for large #s.) Writing a quick python implementation, calculating 2^1000000 takes 66s with a for loop and with divide-and-conquer recursion takes only 0.02s. Sure you could write a slow recursion as well (def slow_power(b,e): if e==1: return b ; else: return b*slow_power(b, e-1) ) which wouldn't have any benefit.