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."
Interesting insights... (Score:3, Insightful)
I wonder, how does one become a great hacker? How do you make yourself a great hacker? I'm not sure it's possible...I mean, I know you can do a lot of things to make yourself dumb, but what can you do to make yourself smart?
I guess a good part of it comes from working on what inspires you, and what makes you happy. In general, I find that it's very difficult to make very smart people do things they don't want to do.
I suppose that in order to accomplish something important, it has to be important to you. It could be that you love it. Obviously, if you can keep alive the zest for programming you had when you were young, then you're bound to do well. If your current profession is making you senile, then you're probably not going to keep that hacker spark going.
I think the real issue must be inquisitiveness. I find that good hackers are very curious about the world around them. Ultimately, that must be the answer. To be a good hacker, you must have a genuine thirst for knowledge, and a desire to improve things for those around you. Sounds good to me.
Eric Raymond (Score:5, Insightful)
Now I would classify myself as a hacker, but cant play a musical instrument (CD player isn't a musical instrument right?) and sci-fi gives me a softie. Dig guns though.
IMHO a good/great hacker must be prepared to go where he wants to with confidence. Don't just take on everyone else's mindset (if you do what the other 6 billion people are doing you're not going to do anything worthwhile). In short, scratch your own itch.
you can't "become" a "great hacker" (Score:4, Insightful)
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:Interesting insights... (Score:3, Insightful)
How does one become great at anything else? 1 part talent, 9 parts determination.
Another part of the question is: how do organizations support the development of "great hackers". The first part is to recognize that programming is a skill. There is only one proven method of developing skills in people, and that is mentoring. We do it for doctors. We do it for carpenters. We do it for all professions that depend on the workmanship and talent of one partic
All hackers are "great" (Score:4, Insightful)
It took some explaining to convince my boss that "hackers" wasn't a negative term, but since then I've received nothing but compliments from other geeks in the office.
Hackers are great!
Re:All hackers are "great" (Score:3, Insightful)
Re:All hackers are "great" (Score:5, Informative)
By the time of WWI America was put in the position of having to license aeroplane and engine technologies from England and France.
I think you should find a better example.
KFG
Re:All hackers are "great" (Score:3, Insightful)
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.
Re:All hackers are "great" (Score:5, Insightful)
He mentioned several key qualities, namely: curiosity, concentration, and the desire for control and autonomy over tools and environment. He suggested that Great Hackers exhibit these qualities, but it's not as though you can judge how curious a person is, or rate their desire for autonomy (they might just be a jerk).
Perhaps the more important thing is that people have these qualities at all. In societies where people seek life quality in television, money and "quality time", we ought to all admire the Hacker's qualities and aspire to them (amongst others, of course). Companies ought not to worry too much about Great Hackers, if they are as rare as Graham suggests, but it's well worth considering how they can improve the lives of their employees and thereby improve their productivity.
Hackers don't just give us great software... they give us a successful model of how we can improve ourselves. Well, except in terms of exercise perhaps
Re:All hackers are "great" (Score:5, Insightful)
The problem is that frequently the job of programming is routine and boring. Maintaining old code, debugging, writing tests etc are all crucial to delivering software but the great hackers can't be bothered with that boring stuff.
If you see a great hacker don't hire them as an employee. Hire them as a consultant so they can come and go. They are useless once an application has been built and the mundane stuff kicks in.
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 wri
Re:All hackers are "great" (Score:3, Insightful)
I see you've never worked with a typical business team.
Sure, a great hacker will produce code that Does the Right Thing based on the specs he (or she) is given, but in the real world those specs are guaranteed to be between 5% and 100% WRONG. The client can't explain what it is they actually want, the business rep can't help draw real specifications out of them, the systems analyst can't convert the n
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.
Re:All hackers are "great" (Score:3, Insightful)
If a GreatHacker wrote the original code then the same GreatHacker will derive absolutely ZERO pleasure in modifying his/her old code to work in a slightly different way. GreatHackers thrive on solving new and difficult problems.
So if you hire a GreatHacker good luck getting any productivity out of him/her after the hard and creative work has been done
I'm going to have to go with "blowhard" (Score:5, Insightful)
Second, and I'll probably be modded as troll for this, but all the programmers I know who like perl are sysadmin types who don't know better. Popularity isn't a much better measure of "goodness" in the open-source world than it is anywhere else.
Graham may make some good points but he's SO far out in left field on others that his credibility is shot as far as I'm concerned.
Re:I'm going to have to go with "blowhard" (Score:5, Informative)
Nah, that's just the people you know. Perl, in my experience, tends to be used by people who write little programs to get things done quickly. And really, this covers a lot of sysadmins. But that's always been the secret of Perl: it's geared toward solving problems quickly. For example, in most languages you compile regular expressions and get back a handle, then you use the handle for searches. But in Perl the compiler takes care of this for you. You don't worry about it. You don't have to import an "re" library either. A good philosophy overall, even if the language isn't as pure and pristine in other ways.
Still, I read the article, and I can't help thinking that Graham has already written this same article a couple of times in different forms.
Re:I'm going to have to go with "blowhard" (Score:3, Interesting)
Re:I'm going to have to go with "blowhard" (Score:5, Insightful)
For reference, I much prefer python to perl - I find it cleaner and easier. When pushed I like to use python combined with C for any heavy lifting (farm out any intensive routines to some C code that returns python objects).
Jedidiah.
Re:I'm going to have to go with "blowhard" (Score:3, Insightful)
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:I'm going to have to go with "blowhard" (Score:4, Insightful)
Um.... No. No way. That's midsized.
Come back when you have atleast 600,000 lines; or 6 million.
I've worked on projects with 500+ people hacking on the same code, or different streams of the same code. That's a big system. And there are bigger.
Re:I'm going to have to go with "blowhard" (Score:3, Interesting)
Re:I'm going to have to go with "blowhard" (Score:5, Insightful)
With the wrong language you can't write little programs even if the job is a little job
The advantage of Java is you can outsource the bulk of the programming to 100 different people in Bangalore or something. The hopefully smart person doing the design and architecture at the HQ doesn't have to type many lines of Java - he programs in human languages.
Whereas with Lisp or other Great Hacker languages while that smart person is 20x-100x more productive, you can't outsource the job, so when the job becomes boring it's hard to keep that smart person around to do maintenance, documentation and other low level stuff.
And sometimes the boring stuff makes money. I mean how many great hackers want to do accounting programs, custom portals (with ever-changing requirements), ERP etc?
With Perl the smart hackers have created the blocks of Duplo and Lego (CPAN), and made them available for the not so smart ones like me to use em. Prefab code
"Perl is geared toward solving problems quickly" (Score:4, Insightful)
A computer is a machine for getting wrong answers quickly.
Perl can help with that.
Re:I'm going to have to go with "blowhard" (Score:4, Insightful)
Heck, for all I know, the high number of C, C++, and Java projects could just be an indicator that users of those languages tend to start things but never finish them.
And, by the way, the _main_ thing Perl and Python have is common isn't that they are scripting languages (a term that isn't very well defined anyway), but they are much higher level than, say, C or C++ (and to a lesser but still important degree Java). And _that's_ why they allow developers to be much more productive. If you have trouble understanding/believing this, then imagine explaining to an assembly programmer why you're so much more productive in C++ than assembly. Now, apply those same principles to something like Python, and you'll start to see the light.
Re:I'm going to have to go with "blowhard" (Score:5, Insightful)
BTW, we have had Java programmers come in and give preso's on why Java is so great, and its pretty funny, they talk about a lot of things that perl has, but they don't realize it. Oh, we can create "objects and manipulate them", or "we can reuse our code". Crazy me, I've been typing all those perl modules by hand and throwing them away when I was done with them!
Re:I'm going to have to go with "blowhard" (Score:5, Insightful)
Well, I'm a 'sysadmin type', and Perl lets me get my job done with a minimum of fuss. I have lots of one-off tasks that would be tedious to do by hand, and shell scripting is just annoying. But I've also written a whole ISP provisioning system with Perl, and tied it into our company's proprietary billing system. If I'd been doing it with C or Java it would have taken me a lot longer and definitely wouldn't have been as stable as quickly as it was.
Is it possible for me to program in C or Java? Sure. I had CS classes. But for me, Perl is the right tool for most of my jobs. People like you who look down your noses at a 'scripting language for sysadmin types' are typically the sort of people whose messes I have to clean up because they have just enough knowledge to demand root on their workstation so they can screw things up.
You haven't taken the time to appreciate how Perl can be used in a sane manner to create stable, maintainable codebases and applications. That's fine, but it doesn't invalidate or devalue what the rest of us are doing with it.
Re:I'm going to have to go with "blowhard" (Score:3, Insightful)
Interesting that you would nitpick that one point, and do it with poor grammar to boot. Did I strike a nerve?
No, I'm not using the fact that I had CS classes as a testament to my mad skillz. I was simply making the point that programming languages are just tools to be wielded by a programmer. If you've learned basic CS concepts (either in the context of a formal CS curriculum or by teaching yourself), it's fairly trivial to apply those con
Re:I'm going to have to go with "blowhard" (Score:3, Insightful)
I'm going to have to disagree. You're confusing "open source hackers in general" with "Great Hackers", which is what he was describing. The two terms are not interchangable. For every 1000 crappy programmers who were never meant to be, there's 100 decent programmers, and there's 10 open-sourcy hacker guys are pretty damn cool (they make up your sourceforce demographic), and there's 1 Great Hacker.
And yeah, these great hackers, oddly enough, tend to have a lot of overlap with those sysadmin-y perl-y type
Tool for the job. (Score:5, Insightful)
If you look at what a good joiner uses, you'll note that he has a large set of tools, and picks the right one. There is no advantage in trying to turn wood on a lathe with a screwdriver - that's the job of a chisel.
A similar thing applies with computational work. If you truely know what you are doing, you'll use the right tool for the job. If your wanting to accumulate a large set of facts, and then do some comparisons across that set of facts, that's a job for Prolog. No matter that C, or Java, or Perl, or whatever, is more popular. They are just a poor fit to the task, which would mean you'd need to write a predicate logic packeage in them, to get them to work.
Look at tools like FFTW. It's written in OCaml, and C. Two different languages, each used seperatly, to play to thier strengths. OCaml does tree parsing, and optimising of an abstract syntax tree. C code does the numerical heavy lifing. That's choosing the right (rather, a good, there is a pluraity of good tools for that) tool for the job. Trying to do the abstract syntax tree parsing in C, or the numerical heavy lifting in OCaml is just stupid - you'll end up with something that's nowhere near as good.
Try writing an OS kernel in Perl.
'Favourite language' is something that's not a good metric. I've solved problems (and that's what it's all about) using 50 lines of C feeding 100 lines of Fortran feeding 50 lines of Perl producing Postscript that compiled to the desired diagrams, because that's what suited the problem domains best.
Claiming that 'good hackers like language X' misses the whole point. Good hackers will use the best tool for the job.
Also, Graham seems to be conviently ignoring the 'can this be understood three years down the line' aspect. There is no point in having code that you can't maintain. That's where Java comes in - it's got a blend of power and syntactic salt help keep things maintainable. Asserting that maintainabilty isn't relevant just strikes me as something that's, well, immature.
Re:Tool for the job. (Score:3, Funny)
I fear for your life the first time someone wants one little change.
Re:Tool for the job. (Score:3, Insightful)
Maybe, but most of a Linux distribution is written in C, C++, Perl and Shell because that's what the programmers are used to. Even stuff that should use Prolog don't, because it's not taught in schools and most hackers aren't familar with it.
Re:I'm going to have to go with "blowhard" (Score:5, Insightful)
Perl, more than any other programming language I've ever used, directly reveals the mind of the programmer.
Most programmers have very messy minds and very poor discipline. Python neatly solves this problem by having the One True Solution approach. Perl embraces the risks of a TIMTOWTDI, and you often get line-noise (especially with too-cute neophyte "hackers" who figure that doing seventeen operations in one line is somehow a good thing), but in allowing this, Perl allows a few nuggets of utter glorious beauty to shine through.
Very few people can properly wield Perl in more than a one-off capacity. But those that can will make magic.
Re:I'm going to have to go with "blowhard" (Score:5, Insightful)
The key reasons for shaggy code are deadlines and ever-shifting requirements. When the requirement is clearly defined and you have ample time, you can plan the solution and produce something great.
I agree with both - but as I said, I mostly see (and write) average code at work.
Java (Score:5, Insightful)
The idea that one must automatically be a crap programmer because one likes Java is an egotistical and obnoxious point of view. I happen to like Python and C and C++ as well as Java, and I use all of those on occassion, but Java is no less a suitable and appropriate language to use for some tasks as any of those other languages.
I'm sorry, but Graham's dismissive attitude towards Java is evidence of extreme arrogance.
Re:Java (Score:5, Insightful)
Java has nothing about it that makes it any more maintainable than any other language.
But,
LISP, Python and Perl do have language _features_ that make it much more powerful to good programmers. Closures, anonymous functions. LISP has macros. Imagine java or C/etc without recursion. That's what Java is. A language without closures, macros and lambda. It's missing stuff!
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
Re:Java (Score:3, Informative)
for example.. python:
ruby:
python reminds me so much of windows. everyone uses it, because it's all they know exists. if you want to see a language with modern OOP, and clean syntax, give ruby [ruby-lang.org] a try some time.
Hah! (Score:4, Insightful)
Or maybe they tried it and found it lacking?
And what is this fascination with OOP? The only task I can think of (please name some more if can think of any) that lends itself naturally towards OOP is GUI/Widget handling. Everything else is much better expressed using so-called "sum types" (read about ML to find out what they are) and pattern matching.
Forcing everything into the OOP way of thinking without even considering that e.g. the functional/declarative way of doing things might be better suited to some tasks is certainly not clever. So much for Ruby (and Java, but the Java people probably didn't know any better at the time).
Ruby vs Python and blatant lying (Score:5, Insightful)
OMG, not the Ruby cliche again.
Python is not by any stretch less OO than Ruby. Having first class functions is not a liability, it's a strength. Object model is not bolted on Python - everything in Python is an object.
python reminds me so much of windows. everyone uses it, because it's all they know exists.
Ruby people go to great lengths to attack Python at every opportunity. For the most part this appears to be because modern Python renders Ruby pretty much irrelevant. Ruby is not really better than Python as a language, period. Ruby is better than Perl, and pretty much equivalent to Python on all linguistic accounts, but loses royally on maturity, community and industrial popularity.
Offset that with the fact that most Rubyistas that talk crap about Pythonistas don't really have experience with Python, but merely reiterate the misunderstandings of other Rubyistas. Repeating a lie often enough doesn't make it true - it makes for mediocre advocacy that might catch a few clueless perl refugees, but isn't going to work for "great hackers" which is the topic of today.
Re:Ruby vs Python and blatant lying (Score:4, Informative)
It's a conscious design decision that makes the system more elegant. "Explicit is better than implicit". Of course it would be trivial to circumvent this by writing a preprocessor, but it's not considered a good idea.
if i have to prepend and append __ to special object functions everywhere, that's bolted on.
No, it's just a decision to call the methods that. It's just a naming convention. It has no relationship with whether OOP is implemented through functional constructs or not.
in this case i'm defining foo, passing foo as a parameter to bar, and calling foo then returning it's return value. i'm not sure how first-class you can get, but that's pretty first-class to me.
Well, you could do:
def f(x):
def g(y):
return x+y
return g
myfunc = f(1)
print myfunc(3) # prints 4
to this day, python still lacks many of the oop and functional (lisp like) features of ruby.
What are those features, apart from "blocks"? And functional != lisp-like, BTW.
guess what, i have used python. it's the language that is lacking, not ruby.
When did you use it? Modern Python is quite different from, say, 1.5.2 or even 2.1. Ruby had the upper hand in language features before 2.2, but that's gone.
modern "windows" renders linux irrelevant too i'm sure, yet we persevere because linux is a better operating system.
I would rather compare Ruby vs. Python with FreeBSD vs. Linux. In fact, that's a surprisingly good analogue.
where have i lied?
It's the wording, and speaking of "bolted on OOP". It is simply not true, and a standard part of Ruby rhetoric.
if you'd broaden your horizons and actually dive into ruby maybe you'd understand why the few of us loyal to it hold it so dear.
I understand very well why rubyistas hold ruby so dear - it's exactly the same reasons as with Python. The languages are more similar than they are different, which kinda undermines the less mature/popular choice. It's FreeBSD vs. Linux again.
I believe ruby is like that. along with scheme, OCaml, Haskell, and other hacker languages that require discipline and free thinking to adopt and appreciate.
Ok, Ruby is perhaps different in that way. Appreciation of Python didn't require discipline at all for me, it hit me pretty much instantly. As would have Ruby, if I hadn't "been there, done that" with Python before.
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 s
Re:Java (Score:5, Insightful)
Perhaps arrogance, but also perhaps frustration. To anybody familiar with a broad variety of languages, the ascendance of Java (and C#, which is Java + 1) is irritating at best. Here you have a language that finally managed to overcome the entrentched nature of C/C++, but is at best one step backwards for each step forwards. It's got shades of Smalltalk, but none of it's flexibility; shades of Self but none of it's innovation; shades of C++ but none of it's control. It's not particularly good at anything (but not particularly bad), nor is it a good all-rounder. Certainly, it's decades behind the state of the art compared to something like Lisp, or Smalltalk. The main reason Java got popular was hype, chance (the rise of network computing), and a giant class library that had pre-canned solutions for most things. Put simply, it was an example of worse technology winning out over better technology, for market reasons.
Re:Java (Score:3, Insightful)
Why are market reasons invalid when determining the quality of technology? How is it that the use of technology in the real world, something market reasons influence very strongly, is less important than the theoretical virtues?
Re:Java (Score:3, Interesting)
More generally, m
Re:Java (Score:3, Insightful)
Things have changed. The hype is in the past, Java is a popular language now for real tasks - hence all the jobs in Java - that's not hype, that's work being done. You can't say that the majority of jobs being done are by dot com newbies with Java - glint in their eyes.
I suppose the reason I like J
Re:Java (Score:3, Funny)
I may be like the last guy to get on the boat, but I just realized through your parenthetical remark that "C#" is a lot like "C++" squished together: the "#", when separated, is two plus signs.
I had some cool ASCII art showing what I meant but the fucking lameness filter wouldn't let it through, even with a ton of extra text around the art. So, just imagine that the top line and left line form the first "+", and the bottom line and right line form the second "+", and then
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.
Re:Java (Score:3, Insightful)
And Lisp for a videogame is hardly showing off -- commercial games have been written quite well in Lisp. Remember --- most games toda
Re:Java (Score:3, Funny)
Re:Java (Score:5, Insightful)
Re:Java (Score:3, Insightful)
You have to keep in mind when you code something that reusable parts should be put in separate functions, the flow should be logical, variable/function names
Re:Java (Score:5, Insightful)
Insisting that one and only one language is the true language is just silly.
Having programmed in Java, Python, Perl, and a motley variety of other languages, I've got to say, if you are happy in Java, especially after having tasted Perl or Python (or Ruby or Ocaml or whatever)... no, you're not one of the great and yes, they will sound arrogant. But their claims, nonetheless, will be true.
Uh huh....
Look, I'm a software engineer with 20 years experience. I'm no newbie by a long shot, and as much as I back myself and my skills, I would never say such a bullshit statement as "if you're happy with language X, then you can't be one of the great"
Your milage obviously varies
Re:Java (Score:3, Insightful)
And the sign of someone who is definitely not a great hacker. Great hackers can sit down and program in any language. Arrogant arseholes refuse to work on projects because of the language or OS being used.
Flamebait my ass (Score:5, Interesting)
Re:Flamebait my ass (Score:3, Insightful)
Sometimes the arrogant assholes spend all their time telling everybody else how much they suck with brings the productivity of the whole team down.
creativity plays its part (Score:4, Insightful)
Re:creativity plays its part (Score:5, Insightful)
Dear God, I'm beginning to see parallels between this place and our political system. I need a drink...
Re:creativity plays its part (Score:3, Insightful)
Great hackers use Perl and Python? (Score:4, Interesting)
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.
Re:Great hackers use Perl and Python? (Score:4, Funny)
I put forward to you... vmlinux.NET
Re:Great hackers use Perl and Python? (Score:4, Insightful)
When he starts comparing languages... (Score:5, Funny)
"No they don't", you cry, "the best hackers user Assembly and Visual Basic".
"No, you're a fucking moron", someone else pipes up, "the best hackers use Pascal and COBOL."
"No, you are a fuckwit," a voice from the back of the croud screams, "Fortran and Algol are the languages of the best hackers".
"Quiet you fools," an elderly guru from the wings yells out, "I happen to know that the best hackers use Perl when they aren't dictating their programs to their secretaries to be outsourced to Taiwan to be compiled into Haskell"
"Shows what you know old man", a kid in the front row sneers, "the l33t hax0rs use Lisp and C++".
Well anyway, it looks like this might go on for a while, please enjoy the other comments while we try and work this out...
Re:When he starts comparing languages... (Score:3, Funny)
Re:When he starts comparing languages... (Score:3, Insightful)
I think, by any definition I am familiar with, we can safely rule out that particular claim. Besides, maybe the best hackers in the world never shower, shave once a week, wear 10 year old T-shirts with stains, and (as a consequence maybe) haven't had sex in 5 years, or never at all.
Should we still follow their livestyle blindly ? I don't think so. So it doesn't matter which language the Uberhackers use, who cares if they use Perl, Python or Ruby. I use what I am m
Offices Rock! (Score:4, Insightful)
Not all jobs are that way - sometimes overhearing what the other people around you are talking about is more useful to overall productivity. And some people can concentrate even with lots of background noise. But for a lot of people, offices would have been more productive than cubicles.
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.
Re:AS/400 (Score:5, Insightful)
I thought it was pretty funny, actually.
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...
Re:Esoteric Languages (Score:3, Interesting)
Java Vs. perl (Score:5, Insightful)
He's talking about hackers here, kids. Not 90% of the
a. sysadmin
b. java developer
c. janitor
Personally, I'm voting for (a). (A) because most sysadmins deal with perl, lots of unix systems, they know *nix inside and out.
Java guys are out of the question, they're too wrapped up in their baby blankets sucking their thumbs to realize they are not _in_ the group we're speaking of.
Janitors, well, it's possible, but probably not common.
I'm a sysadmin, and I user perl all day long. Sometimes at night, when a brute force ssh attack comes along. I need to know which exploits are out there, I'm constantly trying to break my system. I'm constantly learning about the newest buffer overflows in solaris. I am intimately aware of memory space in the kernel. I don't live in a Java Dream World (tm). I don't have all day long to dream of how, if java were tangible matter, it'd be able to cure world hunger. I'm too busy living in the Real World(tm).
In conclusion, while it's uncommon to have good hackers know they're good, it's a lot more common to have a bunch of wanna-bes think they are "the hackers".
Re:Java Vs. perl (Score:5, Insightful)
I think our major disagreement stems from our preferred definition of hacker. You seem to think that hacker means sumpreme uber UNIX geek. I have no doubt that you're a good sysadmin but I think that you really have no idea what the "Real World" is when it comes to programming.
My definition (and I believe it's fairly close to what the article author meant) was that a hacker was someone who used a programming langauge to solve hard problems. Under my definition you're clearly not a hacker. Sure you use perl to help automate your every day tasks, but these are certainly not "hard" problems. The mere fact that you can get the job done with a few hundred lines of code is adequate proof that these problems aren't hard. Hard problems take a lot of smart people working together to solve.
I dare you to write an application that is scalable, secure, accesses data of a variety of types, sends instructions across the network, maintains transactional integrity, and more in perl. I'm sure you could do it, but I certainly wouldn't want to maintain it. Besides that you'd have to start from scratch and create a bunch of library code before you could even think of starting.
This is why a lot of people use java to solve hard problems. Its large user base ensures a gigantic amount of reusable code in the form of extremely robust libraries and frameworks that have already been created. The language itself is not really anything special, but the ability to solve hard problems with the language is pretty impressive.
In that sense (b) java programmers are far and away the most likely people to be hackers in your list. Just because you don't understand what they're doing doesn't mean they aren't hacking.
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:Java Vs. perl (Score:3, Insightful)
Janitor... (Score:3, Insightful)
He was a janitor in a State Government building, and he was about 40, so I'm guessing he got the job when he was a kid (maybe he bailed out of high school because it was boring) and got this job as a janitor. If I was 10 years or so from a full-ride pension, I'd empty garbage cans all day and hack all night, u'betchum.
Astrology for Geeks (Score:5, Insightful)
Taken literally, the people Graham is talking about are perhaps 2-3% of the coding population. In other words, they're the equivalent of supermodels, rock stars, and brilliant twentysomething CEOs, and just as accessible to you or me. In practical terms, you'll almost never, ever work with, hire, or be the kind of person he's discussing, so put down the geek wank material.
Every time I read a Graham article, I feel dirty at the amount of false modesty and self-congratulation involved. He's like a digital Stuart Smalley.
Re:Astrology for Geeks (Score:5, Insightful)
Few of the really good ones are like the stereotype of the "geek" mentioned here. First, top programmers write well, and have demonstrated this by writing for publication. Second, they have strong theoretical backgrounds. Some are self taught, but are comfortable filling a white board with math. Third, they're not overly attached to a single programming language or operating system. Fourth, they tend to have a sense of aesthetics, and can articulate why something is ugly in an engineering sense, rather than merely grumbling about it.
Microsoft paradox (Score:4, Interesting)
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.
Incendiarially (Score:5, Funny)
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.
java-like python features (Score:4, Informative)
Python is still evolving though. One thing that I don't like about it is the absence of an option to enforce declaring variables before use, a la "use strict" in Perl. Python does complain if you try to read a non-existent variable (instead of just returning nothing as Perl does), but will create it with an assignment.
Another thing (probably related) is that since applications don't declare what they throw you can never know what exceptions can come from where, which encourages people to use catch-alls (not a good idea).
Finally, a (major ? minor ?) difference is that Python has no class protection per se, it relies on programmer's cooperation in that respect. It also has no class methods/variables although there are workarounds when those are needed.
The indentation is annoying at first but you get used to it, especially when using an IDE that does it correctly for you.
Short version (Score:4, Informative)
What an amazing ego.
Python, PERL and Hackers... (Score:5, Insightful)
Software maintenance is the single largest portion of the software life cycle. (IMHO)
So, why would I as chief programmer or system architect on a software project (that has a budget) allow pieces of the of software system to be built with languages that the 'common' programmer doesn't know? Sure, you could spend money training all the 'lesser' programmers in Python and/or PERL but, why waste the money? There are perfectly good languages that are defacto standard, provide loads of functionality, development tools, and are known by the 'so-called common' programmer. Every language has its pros and cons. So, if Java's weakness is uber-hackers don't like to use it than PERL's and Python's is maintainability. :) )
(However, I think author might be poking the tiger with comments like: "Of all the great programmers I can think of, I know of only one who would voluntarily program in Java." And we all feel right into that trap... I know I did.
Also, the single most important resource on a software project is people (again IMHO). Typical development scenario: New contract has been acquired. So, you as the "boss" hired 10 developers for the new project. One of which falls in the author's super-elite hacker class. The project's initial system delivery goes as smooth as glass cause the 'brains' of the operation (or the 1% as the author calls it) did majority of the work. Well, shortly after the initial delivery the hacker decides the project is now boring, the system was delivered and he or she is now looking for a new challenge. He or she now leaves the program and/or company. Now, there is a serious issue. Since the hacker did 90% of the work, now 90% of the core knowledge of how to maintain the system has left as well. (And I don't care who you are. Jesus himself couldn't write software that is perfect the first time. Bugs are always present and requirements can and do change. And Jesus also can microwave a burrito so hot he himself couldn't eat it!)
Given the author's profile of the hacker- Quiet, anti-social and loves his/her corner office with the door locked (which is a BS stereo-type)probably also didn't bother to pass any knowledge on to anyone else on the project. So, tell me again why this person was 'the most valuable thing' to us and the delivered system?
I personally love working with people are technically sharp but, also like working with other people and sharing info. I have caught myself being sort of elitist when I was the technical authority on something. But what does that gain you? Nothing in my experience. You want to be respected by your peers and co-workers? Share with them your knowledge not just lines of code (be it byte-code or interpreted scripts).
Unnoticed... (Score:4, Interesting)
summary of slashdot response to this article (Score:5, Insightful)
Paul Graham is unbiased (Score:3, Insightful)
Great Engineers (Score:5, Insightful)
But having said that, I think it's time we retire the word "hacker". The reason I think this is because the use of this word, which is supposed to be so positive: the curious, problem-solving tinkerer, isn't really that positive anymore. I'm talking about hackers as craftsmen (another word the author uses in the article). Defining software development as a craft harkens back to a an age when the industry was young and still defining itself. An age when the industry was hidden behind equipment in a backoffice or university machine room populated by bright-but-eccentric pioneers. A time when the industry, and its pioneers, didn't know what its Best Practices were. Those days are over.
Today, the industry has matured in many ways. Today, projects, and the organizations that manage them, don't want a tinkerer who will sit in the backoffice and figure stuff out. They want well-rounded individuals who can gather and interpret requirements, communicate with their team, and develop elegant, well-designed solutions using best practices. They want Software Engineers and Software Architects.
There is still a camp out there that is resisting this change. They still believe in the craftsman lifestyle, and they still code with emacs (oops, another flame war!
The author makes the point that some developers are so much more productive than their peers because of how they use technology, but does he realize that those productive developers are not hackers/craftsmen pecking out PHP or perl in their emacs session? They are Software Engineers using latest-generation tools and languages, design patterns and best practices, object-oriented techniques and integration technologies like message queues, not to mention web services and remoting. And incidently, they're still employable.
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 G
Re:Great Engineers (Score:3, Insightful)
If you are talking about sound quality, I doubt a craftsman working in his garage could come up with something worse than Bose. If you're talking aesthetics, it depends how skilled the craftsman is.
It's too bad... (Score:4, Funny)
Ba dum bum!
False conclusion from the premises (Score:3, Insightful)
Actually, the fact that good hackers prefer Python to Java only really tells you something about the relative unsuitability of Java to hacking. That a language is not easy to hack with is not a reflection of the strength of the language, it a reflection of how "safe" the language is.
I'm doomed! (Score:4, Funny)
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:Its slashdotted.. (Score:3, Informative)
--Pat / zippy@cs.brandeis.edu
Re:Article text (in case of slashdotting) (Score:3, Funny)
THAT'S META KARMA-WHORING; OMG!
Re:java duuuudes (Score:3, Insightful)
I have *never* met a true hacker who programmed in java
Pleased to meet you.
A true hacker would know that there is no "one language". I've "hacked" together scripts in shell script, batch, EMCAScript, VBScript, and yes.. Perl! I've also written applications in BASIC, C, C++, Java. Many of these applications started life as quick 'n' dirty scripts. As I needed better maintainability, I've rebuilt them in the latter languages because they become easier to extend and maintain.
I recall the day when P