What are you investing time in learning? I've tried to be pretty general on the top level choices -- upvote as many as apply to you; would love to see specifics in comments.
A new programming language
218 points
An established web framework (Rails, Django, etc.
)
161 points
NoSQL (MongoDB, Redis, Cassandra, etc)
114 points
AI / Machine Learning
104 points
A new/developing web framework (Lift, Node.js, etc)
The breadth of topics in this poll makes me pretty sad. What do we do on Hacker News? Well, we figure out new ways to put forms on web pages, new ways to collect the things people put into those forms, new ways to get people to look at those forms --- oh, and game development and AI.
You do security stuff right? Yeah, I'm pretty ignorant about that (regretfully). But I've seen you post about hiring, saying that you are looking for smart people, and have specified Rails. OK, so if I contacted you about a job and had solid Rails skills, what else would you want me to be knowledgeable about, even if not directly related to what you do, that would convince you that I'm the sort of hacker you'd give a second look?
I'm honestly curious, not fishing for a job. It's part of why I created the poll. I have felt boxed in doing just what you're deriding, and I want to know what others here are finding interesting.
I've never hired someone who knew Rails. I'm not even sure I've hired anyone who knew Ruby. My lead product dev is a Lisper. Here's an industry pro-tip: when you want to optimize for "good programmer", don't put "must know Rails 2.3.x+ and have experience with one of Sinatra, Ramaze, or Rack". Just look for the smug lisp weenies.
The people who do best in security are the ones who understand computer science. They are:
* Very solid C programmers, or
* Understand compiler design, or
* Know a thing or two about signal processing, or
* Know how to implement compression algorithms, or
etc etc etc.
That's exactly the issue I have with this poll. The cart appears to be dragging the horse. You write web applications to solve problems. What problems are you solving? Very few people will put money up against the problem of "need a better web framework".
Signal processing is fun, and its principals crop up in unexpected ways. Grokking convolutions and auto-corelations is a nice "bump" in the way I think about data processing. Seeing data as a stream instead of discrete chunks sometimes helps a simple convolution be apparent when facing a naive implementation's taxing computation. What this would have to do with security, I don't know.
I think that tptacek's point is that he wants someone that "digs deeper".
Well, that's a valid question to ask (what problem are you solving), but it lends itself to a poll even less than this question. This was, though, the one that I personally wanted to see answers to, and I'm just as interested in specific niche answers than my intentionally mainstream categories. I'm sorry if those made you sad -- I wasn't trying to be exhaustive or represent the totality of HN interests.
We've had a Rails product for something like 3 years now. Everyone is expected to write in Rails. I'm not so much expecting them to come in the doors knowing it.
NodeJS is awesome. I love it. However, it is not a web framework. NodeJS is more like Rack than Rails. There is no default persistence engine, no template rendering and no concept of a controller. There is not even a router! These things are not "core" to writing server-side javascript. NodeJS also speaks more than http! You can do raw TCP or UDP if you please.
You can build web frameworks on top of NodeJS (and lots of people are,) but that's kind of boring to me. NodeJS is particularly good at handling lots of open connections that it can read from and write to whenever it gets around to it. This means writing chat servers is trivial, writing a "socket server" for a game is trivial, push notification for websites is easy, and on and on.
Because of how little it does, it is a lot easier to get my head around than any of the other big evented frameworks (twisted, eventmachine &etc.)
- Driving (I'm 24 and don't have a license... that has to change)
I don't know about your specific situation, but in general driving is overrated. It's a stressful activity that provides no exercise, and owning a car is expensive (more so than most people realize). I think you're best off if you can find a place to live where walking, biking and public transit are all you need. That's what I hope to do.
So if you're feeling self-conscious for going so long without a license, don't. You really haven't missed out on much.
Here in Berlin I use car sharing for that. The next car is as far away as a parking place for my own car would be. It's 1.50€/h plus 0.2€/km. The biggest problem is that I have to put the car back to where I took it.
I am currently reading the beta ebook version of "Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages" : http://www.pragprog.com/titles/btlang/seven-languages-in-sev...
My expectation from the book is to get a brief but fun tour of seven programming languages and the different paradigms that they embrace.
I'm extremely interested what this entails; I've been thinking that I'd like to do something like this in the next few years. If you could provide any more information about what/why you're doing this and any insights you've had it'd be greatly appreciated.
I'm spending 2 months in the Pyrenees at a farm producing Tomme de Montagne and a variety of smaller sheep's milk cheeses and three months outside of Toulouse producing a variety of blue cheese.
I'm trying to learn scheme with the help of SICP. (http://mitpress.mit.edu/sicp/) It's a really good book. Clearly the authors put a lot of work into it. My mind has been expanded a few times, and I'm only just into the 2nd chapter.
Upvoted game development, but it's not really terribly accurate for me. I'm currently in the middle of building a demo (as in demoscene demo) a week, which is requiring me to relearn a lot of 3D stuff I've forgotten over the years, and learn a lot of new things while I'm at it (e.g. how to write GLSL shaders efficiently in a very small space).
Business. I'm a programmer trying to learn how to build a company that makes money. 18 months ago I really sucked at it, now I just suck moderately. It's amazed me how much it's forced me to learn about myself and other people; selling, managing and networking are hard.
I've been learning Arc. The fact that so many got disappointed and left soon after release hasn't shaken my interest (at least not yet). It's the only language since C that I know of [1] that doesn't try to protect the programmer from themself. This means you can have more confidence that any problems you run into will be your fault and not the language's.
Arc community is small right now, but the people left are brilliant. I've learned so much by listening to what they have to say, and they've been remarkably friendly to me as a newb.
[1] Please note that I haven't tried Haskell, Erlang, OCaml and some other formidible languages yet. Am I'm totally missing out?
- scala: 2.8 beta is out, people want reliable eclipse, intellij and netBeans plugins, and more time to figure out type system; I think next couple years, a lot of developers are going to be "upgraded from java" via their VP's of engineering; s/b interesting;
- clojure: users are pretty happy; language, compiler and toolset evolving at warpspeed
- F#: people want Vis Stud 2010 out April 12 and 100% bug-free, ;-}
- haskell: people want lots more time to understand it
> [1] Please note that I haven't tried Haskell, Erlang, OCaml and some other formidible languages yet. Am I'm totally missing out?
It really depends on what were your prior languages.
I was C/Pascal/C++/Assembly type of programmer, and Scheme (or video lectures of Structure and Interpretation of Computer Programs) have blown my mind.
Erlang was interesting and useful, but not revolutionary (to me). I should say that hot swapping is something that no other language, as much as I know, currently has. And is cool :)
I'm now learning Haskell, and I like it. First, I understood little, mostly stuff from Scheme. And few weeks ago I had flash and most stuff was easy... (Monads/Functors/MonadicTransforms) It's probably worth the energy I have spent. IMHO some time has to pass for everything to come in place.
[edit] Bunch of other languages have hot swapping: Pike, Lisp, Smalltalk, and Java
It's understandable why you'd say that, of course. Clojure has more libraries, more users and is probably more complete. But is the core language as elegant as Arc's?
halloway's pragmatic Clojure book is still quite worth reading, but describes a slightly pre-1.0 release (if you can borrow or browse Halloway's book in a bookstore, i would do that).
Go follows quite closely in the spirit of C, and doesn't try to protect you from yourself (but also doesn't give you complexity just for the purpose of helping you hang yourself coughc++cough.
Does Node.js really qualify as a web framework? Sure it comes with an HTTP lib, but it's really more 'JavaScript liberated from the browser and a CommonJS stdlib to boot'.
Very useful for writing web frameworks, sure - but not a web framework in itself.
I downloaded the SICP course and I'm working my way through it. Had a sort of mini-enlightenment on the first lecture. Related to that is breaking out the Schuam's outline on Calculus and really nailing it instead of making do the way I did in high school and college.
I'm also applying one of the principles from Sun Tzu's Art of War (related to misdirection) and looking for it in Chess, Go and some RTSs. I may end up picking up Poker and learning some things from it.
Hey everyone, I'm thinking of teaching Hindi through videos and tutorials. I'd be pleased if any of you are interested to learn this nice language. Details here: http://news.ycombinator.com/item?id=1228538.
Divide and conquer approaches show that complexity is a matter of perspective. From the right point of view, many problems become trivial, or at least tractable.
The standard example is quicksort. Sorting requires N^2 relations to be enforced, but quicksort does it with N * log N operations (on average).
Matrix exponentiation is another simple example. Take M^N, where M is a square matrix and N is an integer. Directly calculating that takes a lot of arithmetic. So instead you calculate M^2, M^4 = (M^2)^2, M^8 = (M^4)^2, and so forth. Then M^N is simply the product of at most log(N) those binary powers. (Since iterated linear systems can be written as matrix math, this lets you easily calculate their Nth iteration. Want the trillionth Fibonacci number? No problem.)
The fast Fourier transform (FFT) is a much less obvious example. It computes an N-element frequency spectrum of N data samples in O(N * log N) time. This is impressive because every input contributes to every output, so the naive algorithm takes O(N^2), which is intractable for real-time signal processing.
Even less obvious are the various algorithms based on the FFT. For example, the primary school method for multiplying two N-digit integers requires N^2 operations, which is intractable for large values. However multiplication is equivalent to the digit-wise convolution of the integers followed by carrying the digit overflows, and there is an FFT theorem for convolving in O(N * log N) time. So you can multiply in O(N * log N) time! See http://en.wikipedia.org/wiki/Sch%C3%B6nhage%E2%80%93Strassen...