Paul Graham On 'Great Hackers' 620
dcgrigsby writes "Always interesting, if not unbiased, Paul Graham has published a new article on 'Great Hackers', discussing why Perl and Python are apparently better than Java, on why Microsoft developers get offices, and a host of other sure-to-be-controversial stuff."
Re:I'm going to have to go with "blowhard" (Score:3, Interesting)
Great hackers use Perl and Python? (Score:4, Interesting)
Re:Why are Paul Graham's web pages width-constrain (Score:3, Interesting)
Good design is good design because it helps the user get his task done quickly. One of the points he brought out in the article.
Re:Java (Score:3, Interesting)
I have some severe problems with the design of Java. But I don't think that people who choose Java are automatically stupid or something.
It's all about the tools. How many times have I needed to write a program which does X, but there isn't a library for X in Python? And there are libraries for C and Java. (The situation with Python is continually improving, but still...)
I like Python much better than either of those, but unless I want to re-write the entire world, I've got to go where there is support. To where there are the building blocks I need.
At any rate, it is possible to write good, bug-free, and reasonably elegant code in just about any language. It is just that some languages/environments make that more difficult.
But that doesn't stop me from griping about Java or C. My current dream is to take a couple years off work, and write an entire operating system in a high-level language. Something where a Python VM is integrated into the kernel. And all the userland is written in that. All the daemons, libraries, everything. But with this whole work-for-a-living thing, this isn't going to happen anytime soon. :-(
Re:Great hackers use Perl and Python? (Score:3, Interesting)
Linus is constrained by application domain.
As C goes, the kernel is much, much cooler than any piece of software that size has any right to be. Sounds like greatness to me, at least the sign of a great leader.
java duuuudes (Score:2, Interesting)
"Oh great, now the article will only have posts from the Java duuuudes who resent anything not done in java"
Truth be told and after thinking back through my ten years working as a programmer in many companies, I agree, I have *never* met a true hacker who programmed in java, and I don't think that is a bad thing. In fact, java is what they teach in college, so, it goes to show that it is what the "average" person is going to be using. There are a lot of java jobs (not jobs I would want, and in fact would prefer to sling coffee at a starbucks than work with it again) and they are there for the people who know java.
However, I am curious about python as the language of choice, as I would think that C would trump python, but either way, python does rock hard and seriously. (though python specific jobs are just not out there as much).
Anyway, back to my point.
As a side to that article, hackers having that ability to concentrate, yes.... They do..
Most all of them have some form of ADD or OCD however to counterbalance that ability to focus on things they are intense on.. Wandering around a toy store with a hacker will teach anyone patience.
Paul Graham I feel has very good line on the pulse of this industry.
Re:Java (Score:2, Interesting)
Untrue. Checked execeptions and strong typing are two features that Java has over Python, for example, which aid maintainability.
Over languages like C and C++ you may add garbage collection, bounds checking, security constraints.
And anyway, Herd mentality??? What the hell kind of comment is that if not a continuation of the kind of language bigotry that I was posting about in the first place.
FYI LISP is one of my favourate languages (I've written several LISP interpretters for work in my time) and I agree that it's great. But that said, I still wouldn't go where you seem so keen to go and just disparage vast swathes of the developer landscape just because it's not *your* favourite language under discussion
AS/400 (Score:3, Interesting)
You bonehead, what a MARKETEER thinks is a 'hacker' (that is, a criminal) hates the AS/400.
*This* hacker thinks the AS/400 is the most secure, uncrashable system extant. Go ahead, try to gain superuser (QSECOFR)on an AS/400. You can't. AT ALL. Even QSECOFR cannot change a system program to do something it's not supposed to. Go ahead and try to crash one, I've never seen it done short of a lightning bolt.
BTW, that footnote in his article said nice things about IBM Thinkpads. Sure they are lovely, but PCs are TOYS compared to the REAL computers.
Esoteric Languages (Score:5, Interesting)
Now that I've established myself as a cocky elitist bastard to the Slashdot crowd (or do I just fit in now?), I would like to make one thing clear: I hate C.
I hate memory corruption (a.k.a. segmentation faults for the rest of the world). I hate explicit types and declarations. I hate casts. I hate memory management (kalloc, kfree - a.k.a. malloc, free for those alien folks off in userspace). I hate iterators. I hate list structures assembled with pointers. I hate pointers for that matter. All that C really does for me is provide me with activation records during function calls (okay, and cross-platform compatibility). The only thing I like about C is the fact that you can compile it and it's fast.
I hate Java. I hate class cast exceptions. I hate null pointer references. I hate virtual machines. And I still hate iterators.
I hate Perl. I hate interpreters. I hate pathetic attempts at object oriented behavior.
I hate Python. I hate C++. I hate PHP. They all suck, all for (more or less) the same reason: run-time errors.
Enter Objective Caml. More likely than not, when you've got your O'caml program compiling, it just works. No run-time errors, like memory corruption, nonsense casts, class cast exceptions, or null pointer references. You can compile it down to native code, and it runs just as fast as C in many (if not most) cases. There is a complete standard library with pretty much everything you would ever want. There are hooks into GTK and Mysql, among other C libraries. You have real objects, done in a halfway decent manner. Persistent data, by default, exists in a structure (like a list or a type), as it should. Functions are first-class citizens. Iterative structures are possible, but usually not required. Tail-end recursion introduces no stack overhead. Algorithms implemented in O'caml just look elegant, like lambda calculus expressions.
The problem, of course, is that it will take me several more years before I get to be as efficient in O'Caml as I am currently in C. And anyone who comes in after me to maintain the code will probably know C much better than O'Caml. This means that for any userspace projects that I do at work, it's gotta be in C. I can get by in C, because I am a very disciplined coder, and I know all the quirks and tricks to developing and maintaining good C code. Occasionally, I will get a nightmare mystery segfault in a very large project, and I will curse C and yern for O'Caml, but I must persist.
At the end of the day, my own Open Source projects that I do on nights and on weekends are in Ruby (if they are web apps) and O'Caml (otherwise). This doesn't necessarily mean that O'Caml is the best language for any given project (mainly do the competency of the employees, current and future, with regards to O'Caml). Maybe in about a year or so, after writing a few Open Source projects in O'Caml on my own time, I will feel confident enough to suggest I use it for a project at work. Even then, it will be a hard sell, despite the fact that it is superior to C in almost every way.
So my point, if I have one, would probably be that true hackers like to experiment with esoteric languages that the rest of the world knows little about. The shear number of programmers out there who know C and Java present a significant barrier to entry for elegant languages like O'Caml. I suppose that getting the academic types to emphasize languages that solve many of the problems that have plagued computer languages for the last 30 years might begin to help with the situation. Until then, I'll be firing up gdb...
Microsoft paradox (Score:4, Interesting)
Re:Java (Score:5, Interesting)
Checked exceptions are up for debate, though personally I think they are nice. Strong typing on the other hand - Python actually has strong typing, it just doesn't have static typing.
A major maintainability point that python is hopefully getting soon [python.org] is Design by Contract. I blieve there are some packages that let you add it in to Java of course, but it's not in the standard package.
Jedidiah
Erm... (Score:5, Interesting)
But it's a scripting language.
By which I mean: on most modern benchmarks I've run, it's well over fifteen times slower than Java. Than Java!
Java's got lots of faults. But it has one very good feature: it's rapidly getting faster (as is its evil stepsister, C#) This is largely due to design decisions in the languages which traded off some late binding and dynamic typing for efficiency. Python doesn't make those promises, and as a result it's stuck in the must-check-almost-everything-at-runtime-land of old (pre-Common)Lisps.
Hackers coding only in Python. Gimme a break. What we're largely seeing is *script* hackers coding in Python. cgi-bin. shell crap. webbots. It's where Python shines. But there's an awfully big collection of code projects that need to straddle the speed of C++ and the dynamicism (to some degree) of higher-level languages. And there's a lot of hacking opportunity there. Java does that region very well, thank you.
Arrogant Obnoxious Jerk (Score:3, Interesting)
At one time or another I have been fluent in around 6 or 7 programming languages. Personally, I think nothing comes close to Java if building large, maintainable and networked systems is your goal. As many people have pointed out, Perl and Python are good for small jobs but you'd be insane to architect a really large system on them.
Flamebait my ass (Score:5, Interesting)
Re:Microsoft paradox (Score:2, Interesting)
It was fun going to a talk on security by a guy from Microsoft (don't laugh, he actually knew what he was talking about) and watched him demonstrate various attacks coded in Perl using vi on Windows.
Re:I'm going to have to go with "blowhard" (Score:5, Interesting)
I'm sitting in front of a system containing many modules and programs, and between them including over 60,000 lines of Perl. Is that a large system?
It depends on your perspective. If you don't know how to manage a 500 line program, it is insanely large. If you've ever worked on a project in C or Java that runs to a few million lines, then it is pretty small. It becomes larger when you consider that the same functionality would take a lot more lines in Java, C or C++ than it is taking in Perl. More critically, you'd probably need more than 6 developers to maintain and expand it, plus your development cycle would slow down significantly.
Certainly Perl is not the best language for writing a very large system. But for a certain size of project it is a very good language. And that size of project is larger than you'd think.
Re:java duuuudes (Score:2, Interesting)
I really enjoy C for low level hacking - in fact, I've done a bit of asm as well, but I prefer C.
I really enjoy Python for scripting goodness (small, fast to write). And likewise, LISP rocks for its organic approach to code production.
But Java is very cool for what Java does (large, stable, maintable).
I find myself time and time suprised that it just doesn't seem obvious to experienced developers who I assume populate
Re:Java (Score:3, Interesting)
I see Java and I see gaggles of mainframes.
What you describe sounds perfectly suited. The overall effeciency is dominated more by how bad the worst is rather than how good the best is.
It's always possible to do 90% much better provided you can afford to ignore the remaining 10%. I think the relevant comparison is to the great masses of COBOL.
Unnoticed... (Score:4, Interesting)
Wheeeeee (Score:1, Interesting)
Java is (still) sucking (Score:2, Interesting)
Re:Java (Score:2, Interesting)
Once I saw a brilliant 300 liner that did exactly what it needed to do, and no one dared touch it.
Most of the time, the people I know who wrote Perl couldn't understand what they did just 2 weeks later.
Re:All hackers are "great" (Score:3, Interesting)
So what exactly differentiates a so-called fully flight capable aircraft from other aircraft?
Suggestion: less time on /.; more time paying attention in school and reading books in the library.
What a jackass. (Score:1, Interesting)
I love how he takes credit for coming up with a Bayesian spam filter in 2002 when the idea of using Bayesian spam filters goes back several years before that (see this 1998 paper from MS research [microsoft.com] for example.) Oh yeah, but MS doesn't have any good hackers... even though they have offices, which attract good hackers, uh, what was it I was saying again?
I also love his claim that great hackers can't program after half a beer. Sorry, but if half a beer keeps you from being able to program, you just can't be that good. I know several hackers that can keep churning out solid code after a six-pack and a couple of fatties!
Re:Java (Score:3, Interesting)
More generally, market forces tend to be somewhat random and timing-dependent, a matter of chance. Say, for example, you can have a worse technology immediately, or a better technology in a year. If you're going to have to live with that technology for the next decade, it'd be logical to wait the year. However, for marketing reasons, the worse technology tends to get picked, and programmers have to live with worse technology for the next decade. A year down the line, when the better technology is fully developed, but programmers are stuck using the worse one, it is not surprising that they might be a bit frustrated, especially because the original marketing factors are no longer applicable to them.
Re:When he starts comparing languages... (Score:2, Interesting)
If you're really L33T, you program by swapping jumpers from one diode to the next. You dream about a front panel with switches, auto-increment dump into ram (imagine that, ram!) and in a decade or two, you actually get it.
Now you bastards know how old I am. I program in Python and C these days, though.
One point passed over... (Score:2, Interesting)
Anyway I thought it missed the point that according to the article open source software is in position to take the greatest advantage of these super hackers because they get to work in their own environments, on projects that interested them, with languages and tools and environments they choose and control, and aparently it doesn't matter much that there's no pay. I think it shows. It seems that the technical aspects of OSS are very good, but the non-technical aspects are weaknesses such as usability, documentation (the stuff geared at users that is) etc.
~Jake B
Trying not to become stupid, one day at a time
Re:All hackers are "great" (Score:3, Interesting)
I see you've never worked with a great hacker.
Code written by a great hacker usually doesn't need maintenance because it already does the right thing. If it does need maintenance, it is modular enough that adding new functionality is not an onerous or time-consuming task.
As for debugging and writing tests, a great hacker's code is so clean and so defect free, they don't need to spend a lot of time debugging and writing test cases will simply diminish returns.
That being said, maybe one in a thousand programmers is great hacker. Their rarity and general non-availability explains why the rest of us believe that the maintenance, debugging, and test writing to cope with the badth of our pitiful code is necessary.
Re:I'm going to have to go with "blowhard" (Score:2, Interesting)
Shitty programmers use Perl and Python as much as anyone else. The worst programs I've ever seen have been written in Perl and in C. Python has its share of suck, too. The worst example of a complex Python program that I have seen is Gentoo's Portage. Take a look at that pile of ass sometime.
Many brilliant programmers use C and C++ quite often. Claiming otherwise is prima facie absurd. Most of the best software that I've ever used or seen the code for has been written with these two languages. Some of the best scientific software I've seen has been written in Fortran. Not in Python or Common Lisp, or even other dialects of lisp. Just look around sometime, really.
Re:All hackers are "great" (Score:5, Interesting)
I have on one occasion worked with a person whose code was so good he didn't need this stuff. He *was* that good. And I doubt I'll get another chance to work with someone *that* good again. That's the difference between an average hacker and a "great" hacker.
And, yes, the code *was* understandable and well-organized enough that it was self-documenting.
Don't get above yourself (Re:Java Vs. perl) (Score:1, Interesting)
Developer<->building architect
Sysadmin<->maintenance/facilities person (i.e. IT janitor)
There are shitty developers who really are barely qualified to be a sysadmin and there are spectacular sysadmins whom I'd place in a development position anytime, but in general the above is true.
Re:Java Vs. perl (Score:5, Interesting)
On a more personal note, I find that most Java developers are rather boring, unimaginative people. This is one of the reasons this is my last week of work in IT as I strike out on my own.
Java makes the mediocre programmer feel like he's done a lot. When I hear "maintainable" code, what I'm really hearing is that just anybody can do the job. Surely there is some work out there difficult enough that it requires expertise.
Some people believe that they are left brained or right brained. The intelligent people I've met are genius across the board. The tier below them are people that merely applied themselves in one area and happen to be good at something. Programming seems to have both categories of people. One in a thousand is genius, the rest are just people that did a little hard work and can handle a computer.
Don't confuse *implementation* with *creation*. When Graham uses the term hacker, he's talking about people that create where there was nothing. People that bring to life the truly original, not merely the prolific coders that write a lot.
Some people are talking about the right tool for the right job. By the time you get to that point, you are implementing the known. Hacking--as I understand Graham to be talking about it--is about exploring the unkown. Building a site that can build merchant sites as he did, chasing down fraud in your customer service records, inventing the blink tag (sarcasm). Those are the kinds of things he's talking about, not making yet another session bean to pull employee data from the database (and calling it "architecting" doesn't make it any more impressive).
The whole Java mentality (as I've seen it) is that all requirements can be gathered up front. Then it is a simple matter of implementing those requirements. There is no hacking or exploration about it. It should all be scientific. Of course, I've never actually seen a business that ran this way. Businesses have rules that nobody knows about. They won't be captured until they are shaken out by existing code. That is the reality I've seen and I won't believe otherwise until I've seen it (which I won't, see above).
After the failure of a Java project, it is pointed out that the implementation was going fine and it was the fault of the requirements that made it fail. Well, for a language that is robust, maintainable and modular, Java sure is a pain in the ass when requirements are moving around. This is not so with Perl, Python and LISP. This is why many hackers prefer those languages. They are responsive to the person exploring and creating.
PS. I should not be allowed to post after midnight. I'm sure I'm unclear/troll/flamebait/overrated but I'm sympathetic to Graham's views after my dismal experiences.
Re:I'm going to have to go with "blowhard" (Score:3, Interesting)
I am also confused by what Paul says about the tools a hacker uses at home being better. Why does there have to be a set of tools thats perfect for all circumstances? Maybe those tools are better in an environment where everyone is a great hacker, but at work everyone is not, so if those same tools can be abused by the lesser hackers more than other tools, maybe those other tools are better for the work environment. Yes I use different tools at home than at work, but I wouldn't trust the idiots with the tools I use at home. Maybe I am just influenced by the fact that I've had to maintain code written by idiots...
Re:Esoteric Languages (Score:3, Interesting)
Re:Esoteric Languages (Score:1, Interesting)
I have written large projects in C++, I am fairly well versed in C++ meta programming and all kinds of fancy methods. I like C++, but I see how much money the company I'm working for would have saved if it could just find a group of good lisp hackers. It would have been possible to do the whole system with 1/10th of the number of people that we use today.
Re:Great Engineers (Score:3, Interesting)
Your attempt to put a very particular type of programmer with very particular set of habits and preferences and skills (ask a kernel/embedded programmer about "web services" or "remoting") above Graham's mere hackers is an exact mirror of Graham's own "great hackers are just like me" arrogance. If I may presume to make one comment about what makes a great hacker/engineer/programmer, I'd say that it's someone who recognizes that other people can be great without being exactly the same. In fact, they recognize that people they find intensely annoying might also be great. The people who are truly great welcome the chance to compare and contrast their ideas with those who have different design aesthetics, who use different tools, etc. Where do you think all of those design patterns came from? They came from people who were capable of understanding tradeoffs at that level, presented in cookbook form for those who can do little more than follow instructions.
Re:you can't "become" a "great hacker" (Score:5, Interesting)
And so on and so forth with insane stereotyping throughout the whole thing. Anyone who actually takes anything said in that thing (or by ESR in general) seriously... are taking the wrong things seriously :)
Re:All hackers are "great" (Score:3, Interesting)
We have some incredibly bright people here. We are a financial services company and we hire PhDs by the boatload and set them to work on trading software.
What you've said is true of none of them. Anyone who dared to claim that writing test cases diminished returns would very quickly find themselves sidelined. No-one is perfect, and EVERYONE needs an independant authority who can veto the release of their code if necessary. That's why we keep development and test groups entirely seperate.
Amen (Score:2, Interesting)
Particularly enlightening, the insight into work that's desirable versus work that is agony. The chance to learn and grow, and an environment that lets you do this, make all the difference. And, I agree that the type he describes often are very self managed, given this. "an environment that lets you do this" -- not asking for management's hand-holding; rather, that they do their thing and stay our of your way, letting you do yours. Including not telling you that you have to work in the midst of a melee and spawn a dozen processes and a thousand threads, putting all your resources into overhead instead of effective work.
I believe it is quite possible to make yourself stupid. I've experienced this myself, working in corp environments that constrained my ability to act, made me clean up after incompetents who had come before (I mean, really incompetent), and which value imposing every conversation and twitching pencil tapper on me, over the effective, for them revolutionary work I pulled off on the off-hours.
I'm on my way out of another such situation. Thanks to Graham for helping to restore a bit of my self esteem.
(I'm not saying I'm great shakes. However, the article gives me some encouragement and ideas for making the best of what I've got.)
Re:Great Hackers ignore the specs. (Score:3, Interesting)
You got lucky, then. Are you your own boss? Do you work in a small, relatively informal shop?
In most employment situations, doing what you want to do instead of what you've been instructed to do is a terminable offense.
(Hmm, maybe I shouldn't be posting to Slashdot right now.)