Slashdot Mirror


Paul Graham On 'Great Hackers'

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."

132 of 620 comments (clear)

  1. Interesting insights... by Fux+the+Penguin · · Score: 3, Insightful

    Interesting insights.

    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.

    1. Re:Interesting insights... by IrresponsibleUseOfFr · · Score: 2, Insightful
      I wonder, how does one become a great hacker?

      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 particular person, even if they are in a team setting. It is the only proven, time-tested way.

      That said, most companies don't want great hackers. They want coders. That is interchangable people who can write code to produce a product. Coders don't require originality. They require that you can implement features X, Y, Z in a product in a certain time-frame with a certain quality. I personally don't think that being a coder is a bad thing. Not everyone is very ambitious at their job. Frankly, they have better things to do. Spend time with the wife and kids. Go fishing. Whatever. A job is what they do, not who they are. I highly respect that point-of-view. The most important thing to realize if you are a coder is that you are a coder. You should work 9 to 5, 40 hour weeks in a nice environment for good pay. Don't let your job control your life.

      Great hackers are wired differently. Their priority is what they produce. Everything else is secondary. They are out to change the world and how it works with their art. But the reality of the matter is, they don't have as much of a life outside of their job. They don't get paid as well unless they are in a start-up that goes big. Their financial situation is naturally riskier. 9 to 5, 40 hours a week are not practical. While, we might idolize great hackers for the amazing things they are able to produce. For a good portion of the time, it actually sucks to be them. And success is by no means guaranteed.

      Most people fall in between these two extremes. Take into account your ambition and what you want to do with your life. Great hackers make huge sacrifices. You might find it to be more satisfying to just be a good coder.

      Organizations fall into extremes of how they support programmers also. But the best environment for programmers is that there needs to be a way for a person to work uninterrupted and quiet for as long as they need, and there should also be a place where programmers can mull about communially during breaks.

      Microsoft is actually a great place to work. They do attract some of the best coders and some great hackers. This is with respect to working for them, not their business practices.

      The worst organizations to work for are those that claim that they want great hackers, when all they really want is a bunch of coders. These organizations will appear to be run by PHB's. They use duplicity to build a better wage-slave. It is simple cost/benefit and trying to extract the maximum amount benefit out a person for the lowest cost. I honestly believe this has become the dominant thinking in American corporate culture. Partly, because it requires no skill, and why the US is losing its technological edge. It is very demoralizing to work for those companies too. No one believes implementing yet another payroll system is going to change the world. Or replacing an old mainframe system with some sort of EJB web interface. Businesses need this done. But it is done by coders, not great hackers.

      I think that this basically summarizes what Paul Graham said along with my own insights. I think Paul Graham plays a little bit fast an loose with definitions, which is why, what he says comes off as controversial. When, in fact, it isn't. He is stating well known facts, just not very well :)

      --
      Facts are meaningless. You could use facts to prove anything that's even remotely true! -Homer Simpson
    2. Re:Interesting insights... by TuataraShoes · · Score: 2, Insightful

      Generally, I enjoy Paul Graham's techno-philosophy. But I think he's gone off the rails a bit here.

      First of all, his word 'hacker' seems to imply something that excludes application programming. Most of my job is application programming. Second, a 'great hacker' seems like a rare breed. It's like talking about the great legendary firefighters, when in reality, many good hard working fire fighers could put out regular fires just as well.

      I am not a 'great' programmer. But I write good, stable, maintainable, software. If I may be so bold, I think some of my work is artful, functional and bloody good.

      I enjoy perl and I enjoy Java. The scripts that personalise my linux box are perl. The scripts that shoehorn my customers' data into various systems are perl. The cgi's that give an interface to email and admin utilities are perl. But If I need a gui (other than http - and yes, I've used Tk before) or if I'm starting a new large scale project that will be coded and administered by a team, I would choose java. Why, because we have a large scale server app entirely in perl, and many of the routines are so stylised to the person how wrote it, that nobody else can figure out what's going on without hours of head scratching.

      So each tool has its merits. It may be that some of the Mozarts of computer software prefer various languages. And these guys may be Paul Graham's buddies. But the rest of us are programmers of varying experience, many very good. And we can write elegent code in Java just as we can pen poetry in perl. Some of us can even pick the right tool for the task without imagining that the choice says something about our personal greatness.

      --
      Surely in vain the net is spread in the sight of any bird -- Proverbs 1:17
  2. All hackers are "great" by beee · · Score: 4, Insightful

    Anyone who spends their time improving software is doing us all a favor... that's why my screensaver at work has always said: 'Hackers are great'.

    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!

    --


    + Donald Gunth
    + Email: dgunth@quicktek.net
    "Caffeine is the greatest lubricant ever created." -ESR
    1. Re:All hackers are "great" by the_argent · · Score: 2, Insightful

      The best non-techical reference for a hacker to get the point across to people that I've used is the Wright bros. They used bicycles to build a fully flight capable aircraft. If they tried to do that today, they would get procecuted under some form of the DMCA. Thank god they weren't born under the current hampering of innovation that we face....

    2. Re:All hackers are "great" by kfg · · Score: 5, Informative

      The Wright Bros. sued nearly everyone in sight for patent infringement, which is the main reason the center of aero-technology moved from America to Europe in less than a decade.

      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

    3. Re:All hackers are "great" by Telex4 · · Score: 4, Insightful

      One thing that Graham's essay didn't address directly, but that he alluded to, is not only how you can tell a Great Hacker from an ordinary Hacker, but how one can tell how good a Hacker is in general.

      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 ;-)

    4. Re:All hackers are "great" by Safety+Cap · · Score: 2, Interesting
      They used bicycles to build a fully flight capable aircraft.
      Seeing as how bicycles are/were made from metal tubing, and the Wright Flyer was made entirely from wood, canvas and wire cables, please explain how the "fully flight capable aircraft" was built.

      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.

      --
      Yeah, right.
    5. Re:All hackers are "great" by killjoe · · Score: 4, Insightful

      More to the point. Sometimes great hackers make the worst employees. They are hard to get along with, arrogant, and throw tantrums.

      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.

      --
      evil is as evil does
    6. Re:All hackers are "great" by bladesjester · · Score: 3, Insightful

      Oh, I think that it shows IP protection spurs innovation - right to places that don't have it. :P

      --
      Everything I need to know I learned by killing smart people and eating their brains.
    7. Re:All hackers are "great" by frank_adrian314159 · · Score: 3, Interesting
      Maintaining old code, debugging, writing tests etc are all crucial to delivering software...

      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.

      --
      That is all.
    8. Re:All hackers are "great" by frank_adrian314159 · · Score: 4, Interesting
      Where did I say I live on this mythical plane? Most of my work has been involved with the same bad code you describe.

      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.

      --
      That is all.
    9. Re:All hackers are "great" by Keel · · Score: 2, Insightful

      I firmly believe that the notion that great software developers are arrogant and difficult to get along with is a total MYTH. I think those individuals believe they are great (hence the word arrogant) and they may successfully convince others, especially non-technical people, that they are great, but they are not.

      In today's large, complex, object-oriented enterprise application development environments, being able to work with teams and communicate is an essential skill. Sticking an asshole in a corner and waiting for him to kick out thousands of lines of code by himself doesn't fly anymore. Developers not only have to get along with their teammates, they often have to communicate with business people, or even customers. This is even more true when they're consultants.

      --

      ----

      "Oh, bother," said Pooh, as he hid Piglet's mangled corpse.

    10. Re:All hackers are "great" by killjoe · · Score: 2, Insightful

      No code is self modifying. All code needs maintenance. Business rules change, the marketplace changes, the competition does something you didn't expect etc.

      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. Unless you have him/her working on something new he/she is likely to go into serious apoplexy once the work gets boring and mundane.

      --
      evil is as evil does
    11. Re:All hackers are "great" by runen · · Score: 2, Insightful

      This sounds more like the Tao than reality.. "Code written by a great hacker usually doesn't need maintenance because it already does the right thing" All software needs maintenance, no-mather how close to perfect (perfection is an illusion) they are from the start. The world changes, requirements changes, frameworks, APIs, Operating Systems, hardware.. everything changes. Sorry for dissing the Tao - I shall not sleep tonight :)

    12. Re:All hackers are "great" by poot_rootbeer · · Score: 2, Insightful

      Code written by a great hacker usually doesn't need maintenance because it already does the right thing.

      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 nebulous requirements into a solid spec.

      Clean as the code may be, if the Right Thing at the core of it turns out to be the Wrong Thing, you're going to have a maintenance nightmare.

    13. Re:All hackers are "great" by sql*kitten · · Score: 2, Interesting

      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.

      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.

  3. I'm going to have to go with "blowhard" by jbellis · · Score: 5, Insightful
    From someone who has RTFA, Graham says,
    What we ought to look at, if we want to know what tools are best, is what hackers choose when they can choose freely-- that is, in projects of their own. When you ask that question, you find that open source operating systems already have a dominant market share, and the number one language is probably Perl.
    First of all, if you look at sourceforge stats, the top languages are C, C++, and Java, so if Graham is right and these languages are vastly less productive than Perl and Python (whose only common characteristic is they are both "scripting languages"), he's very wrong that open source programmers working on their own time are better judges of language power than others.

    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.

    1. Re:I'm going to have to go with "blowhard" by Junks+Jerzey · · Score: 5, Informative

      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.

      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.

    2. Re:I'm going to have to go with "blowhard" by jbellis · · Score: 2, Interesting

      Yes, that's exactly my point. Perl is fine for "little programs." I have written many perl programs myself in the 100 line range; by the time you get to 500, though, perl is clearly a poor tool for the job. And however concise perl is, there are few really interesting programs you can write in under 500 lines.

    3. Re:I'm going to have to go with "blowhard" by Anonymous Coward · · Score: 4, Insightful

      LOL, since when is the number of projects on Sourceforge a good indicator of anything? 90% of them never make it to a release - sooo many projects are "pre-alpha" with near-empty homepages with comments like "project X will be the greatest Y ever built. Right now we're deciding how to start designing it."

      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.

    4. Re:I'm going to have to go with "blowhard" by mike_scheck · · Score: 5, Insightful

      As a sysadmin type who "doesn't know any better", I can tell you that I like PERL because its effective, and easy to write a short legible program that is far more powerful than a shell script. I work at a large company, and we have many cases where a perl script evolved into something much more complex than many C/Java programs in production, simply because when a small change needs to be made, almost anyone who has taken a previous programming language can make the changes or add features.

      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!

    5. Re:I'm going to have to go with "blowhard" by JerkBoB · · 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.

      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.

      --
      A host is a host from coast to coast...
      Unless it's down, or slow, or fails to POST!
    6. Re:I'm going to have to go with "blowhard" by photon317 · · Score: 2, 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 people.

      --
      11*43+456^2
    7. Re:I'm going to have to go with "blowhard" by Coryoth · · Score: 4, Insightful

      It's quite easy to write larger programs in perl, all you have to do is start the program with a different mentality. Write modules, use perl's OO (which is in some ways a kludge, but in other ways remarkably flexible and versatile). People who claim you can't write large programs in perl are simply failing to use the features of perl available for doing those sorts of things - they're trying to expand the same sort of programming they used for their 500 line program into something that works for a 5000 line program. Really, this is akin to trying to write a large C program by just putting everything in main() and then complaining C is no good for large programs.

      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.

    8. Re:I'm going to have to go with "blowhard" by TheLink · · Score: 4, Insightful

      I've written 6k line perl programs but that's probably proof that I'm not great. A great programmer/hacker would probably do the same thing 1K lines ;).

      With the wrong language you can't write little programs even if the job is a little job :). Even medium jobs look like huge jobs.

      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 :).

      --
    9. Re:I'm going to have to go with "blowhard" by Dwonis · · Score: 2, Insightful

      You can write large programs in assembly, too, but most people would agree that assembly language is not the best tool for the job.

    10. Re:I'm going to have to go with "blowhard" by Anonymous Coward · · Score: 5, Interesting

      Please define what you mean by "large programs".

      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.

    11. Re:I'm going to have to go with "blowhard" by Garin · · Score: 4, Insightful

      Perl is a very powerful tool. I've said it before, and I'll say it again:

      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.

      --
      In any field, find the strangest thing and then explore it. -John Archibald Wheeler
    12. Re:I'm going to have to go with "blowhard" by grcumb · · Score: 2, Insightful

      You've got your stats on backwards. 8^)

      He didn't say that Linux and Perl were the most popular choices of programmers, he said *really great hackers* tend to choose them. Popularity among the general programming populace has no direct bearing on this metric.

      So let's try and measure things differently. If we hang out in the perl and python communities, we *do* tend to find a surprising number of able hackers, many of whom display the qualities Graham describes.

      The Visual Basic communities, however, are not quite so rife with mental agility.

      BTW, when you read this, pretend I'm speaking *really* quickly. 8^)

      --
      Crumb's Corollary: Never bring a knife to a bun fight.
    13. Re:I'm going to have to go with "blowhard" by SageMusings · · Score: 2, Insightful

      Thats a pretty poor statement you're running with.

      As one of the unwashed masses that has dared to write a great many apps and tools in Perl, to include complete 3-tier systems, I have to tell you that besides pattern matching, Databases are second nature to Perl.

      I can code any DB-driven app a Java coder can in less time with complete clarity and ease of maintenance. It can be done. I do it and enjoy it. Java is and always will be 75% marketing hype wrapped around a tool that has existed in various forms in different languages for some time. And please, don't pester me about JVMs and the promise of easy cross-platform. Perl uses a VM too (read up on the internals) and I can *actually* count on it to run everywhere.

      Is Java a bad tool? No, I don't believe that. However, I do not agree with those that write off "mere scripting languages" as inferior. There are different problem domains, hence different languages. Java just happens to be the one language I know of that still hasn't found it's niche. It's a me-too language that has been (for the meantime) been shoe horned into a few server-side DB integration apps.

      I would not use Perl for writing a UI (Tk is tedious) but I would consider it for core logic.

      --
      -- Posted from my parent's basement
    14. Re:I'm going to have to go with "blowhard" by Anonymous Coward · · Score: 2, Interesting

      I've been a Python evangelist since 1996, and I find Graham's thesis retarded. That's ok, a lot of what he says is retarded, and the reasons people might refer to it as "controversial" is that it's often retarded and spoken matter-of-factly when it's always unsubstantiated opinion.

      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.

    15. Re:I'm going to have to go with "blowhard" by Milo77 · · Score: 2, Interesting

      I think when working on a large project that many different people (different abilities, different styles) may touch it is important to choose a language that provides some guidelines for usage syntactically. Java has all kinds of problems, but it forces you to do things a certain way and the community is widespread enough, that for the things it doesn't force you to do a certain way, the community has come up with de facto standards (or patterns of usage). Something like perl can be abused by the idiots on the team to a much greater extent (imho). Now, if the hacker realizes that everyone can't be as great as he is, then he may also understand why his company can't go out and standardize on perl. But like Paul suggests, most hackers are baffled by the idiots.

      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...

    16. Re:I'm going to have to go with "blowhard" by crucini · · Score: 4, Insightful
      I write a lot of Perl. I almost agree with you, but I think most of the code we write at work is just average. It's not great, but it's reasonably easy to understand and maintain. I have written great, beautiful code at times, but it takes more time.

      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.

      Really good perl code is, for many things, some of the best code I've ever seen. Really bad perl code is easily the worst I've ever seen. There is more bad perl than good perl.

      I agree with both - but as I said, I mostly see (and write) average code at work.
    17. Re:I'm going to have to go with "blowhard" by JerkBoB · · Score: 2, Insightful

      you are using CS classes as an argument to show of your skill?

      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 concepts to any programming language. Some languages lend themselves to solving certain sets of problems more quickly and easily than others, though.

      That probably makes too much sense to get through to you though, huh? I know, I know... There I go throwing logic into the argument again.

      --
      A host is a host from coast to coast...
      Unless it's down, or slow, or fails to POST!
    18. Re:I'm going to have to go with "blowhard" by jschottm · · Score: 2, Insightful

      Maybe I'm one of those "sysadmin types" who doesn't know better, but if that's your view on perl, you're not using it correctly. Perl is very good at writing software that works with text data. I do projects such as extracting data from html files and tossing it into a database or making custom log file parsers in perl with little effort or time. I _could_ write the same thing in C, C++, or Pascal (still haven't learned Java), but why would I? It would take longer to write and longer to debug. It might execute faster, but that would have very little effect on the way that the tool is used (the last log file parser I wrote can go through 4TB of data transfer log files in about 4 seconds). Could you explain how this is not knowing better?

      It's not cool, sexy work, but it's stuff that has to get done. Most people don't get to make really cool applications, we write stuff that handles shifting the data that the world generates around.

      That said, I think Graham is wrong in dismissing his "non-geek" languages. Use the right tools for the right project.

    19. Re:I'm going to have to go with "blowhard" by WolfWithoutAClause · · Score: 3, Insightful
      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?

      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.

      --

      -WolfWithoutAClause

      "Gravity is only a theory, not a fact!"
  4. Java by kaffiene · · Score: 5, Insightful

    Is suited to people who simply want to write large bodies of maintainable code. It's not intended for small hacks, nor is it intended for being close-to-the-metal.

    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.

    1. Re:Java by daveinthesky · · Score: 5, Insightful

      Herd mentality.

      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!

    2. Re:Java by ansible · · Score: 2, 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. :-(

    3. Re:Java by be-fan · · Score: 4, Insightful

      I'm sorry, but Graham's dismissive attitude towards Java is evidence of extreme arrogance.
      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.

      --
      A deep unwavering belief is a sure sign you're missing something...
    4. Re:Java by jjohnson · · Score: 2, Insightful

      "Put simply, it was an example of worse technology winning out over better technology, for market reasons."

      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?

      --
      Anyone who loves or hates any language, platform, or manufacturer, doesn't know what they're talking about.
    5. Re:Java by kaffiene · · Score: 2, Interesting
      Java has nothing about it that makes it any more maintainable than any other language.

      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

    6. Re:Java by Cyno · · Score: 4, Insightful

      I agree. But the same can be said for Perl.

    7. Re:Java by kaffiene · · Score: 5, Insightful
      Java Python and Perl are simply NOT aimed at the same target. The things I would gladly write in Python or Perl I just wouldn't consider Java for.

      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

    8. Re:Java by Coryoth · · Score: 4, Interesting

      Untrue. Checked execeptions and strong typing are two features that Java has over Python, for example, which aid maintainability.

      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 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

    9. Re:Java by kaffiene · · Score: 3, Insightful

      I don't disagree with a lot of what you say. Just that Java is not popular *now* because of hype. It was hyped at one point, and I ignored it during the period (actually I looked at it, but it was too slow).

      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 Java is that I tend to program large systems for which maintainability and stability are important. C++ is the other major player in this area, but where C++ has more ability to get close to the metal, I don't need that , and C++ loses out on GC, bounds checking, security management etc...

      But again, like *every* language, whether it is the best fit or not depends on your problem domain. The popularity of Java shows that it fits a lot of problem domains well. The /. meme that Java sucks because it's not elite is somewhat infantile. Being cutting edge is not relevant to getting work done.

    10. Re:Java by Thing+1 · · Score: 2, Funny
      (and C#, which is Java + 1)

      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 pull them apart, the first to the top and left and the second to the bottom and right, and you'll have seen what I saw when I read your comment.

      Not that it helps me understand the language any, but I thought it was a neat "pun".

      --
      I feel fantastic, and I'm still alive.
    11. Re:Java by Tony-A · · Score: 2, Interesting

      It's not particularly good at anything (but not particularly bad), nor is it a good all-rounder.

      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.

    12. Re:Java by FuzzyBad-Mofo · · Score: 2, Funny

      the ascendance of Java (and C#, which is Java + 1)

      A great hacker would have said Java++ .. ;)

    13. Re:Java by SageMusings · · Score: 2, Funny

      Ahem, cough, CPAN........

      --
      -- Posted from my parent's basement
    14. Re:Java by be-fan · · Score: 2, Insightful

      You've never seen my code, so don't comment. Java is a halfway-decent language for OOP, but it does not get out of your way. It beats you over the head with it's limitations at every step, forcing you to deal with a primitive type system, constraining object model, limited control constructs, and limited ability to write any abstractions that don't fit a very narrow paradigm.

      And Lisp for a videogame is hardly showing off -- commercial games have been written quite well in Lisp. Remember --- most games today are hybrids, with a low-level core in C and the bulk of the game logic in a higher-level scripting language. Since you can get C-like performance out of Lisp, and it works just great as a scripting language, it makes a great deal of sense to write games in Lisp!

      --
      A deep unwavering belief is a sure sign you're missing something...
    15. Re:Java by OmniVector · · Score: 2, Informative
      how about something more important, like integrated OOP. nothing's worse than claiming to be heavily object oriented, that has a bolted on OOP model.

      for example.. python:
      class foo:
      def __init__(self):
      // do stuff


      ruby:
      class foo
      def initialize
      // do stuff
      end
      end


      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 a try some time.
      --
      - tristan
    16. Re:Java by be-fan · · Score: 2, Interesting

      The market advantages of a technology are orthogonal to the technical advantages of a technology. So market factors do (and should), play a role in the overall decision, but they don't have any bearing on whether a technology is "better" or "worse." Also, you can't try to mush market factors along with practical values. There are theoretical values, practical values, and market forces. They are all seperate things. There are lot's of technologies that have the first two, but not the third.

      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.

      --
      A deep unwavering belief is a sure sign you're missing something...
    17. Re:Java by f0rt0r · · Score: 2, Insightful

      And this cannot happen with Java? I reuse Perl code I wrote years ago. It is layed out logically, everything is well named and well commented, I generally just copy a subroutine or two from my old code and reuse in whatever I am writing at the moment that is applies to. What you are describing are bad programming habits, not a bad programming language.

      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 well documented, as well as explanations of what the included libraries do so people who come after you will have a clue how your code works and what libraries it needs to run. I could go one, but I think I have made the point clearly enough.

      --
      I can't afford a sig!
    18. Re:Java by lewp · · Score: 2, Funny

      Actually, a great hacker would have said ++Java ;).

      --
      Game... blouses.
    19. Re:Java by jrumney · · Score: 2, Insightful
      Insisting that one and only one language is the true language is just silly.

      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.

  5. creativity plays its part by highwaytohell · · Score: 3, Insightful

    Did he mention that these Great Hackers have quote possibly some of the greatest creative minds in the world. Sure you have to know what your doing, but the ability to think outside yourself, see the bigger picture, is what makes these guys great. When you come across a problem that may seem impossible to get a work around for, these guys think and think, and they get their solution because they are able to see a myriad of different perspecvtives as a possible solution to a really tough problem. these guys are paid the big bucks because they do have that extra quality as well as being good hackers. i think thats what separates the good, from the great.

    1. Re:creativity plays its part by Tirinal · · Score: 5, Insightful

      Slashdot... where lifting something directly out of the article, making the punctuation worse, and asking if the original author mentioned it is modded +5 insightful.

      Dear God, I'm beginning to see parallels between this place and our political system. I need a drink...

      --
      ~Tirinal
    2. Re:creativity plays its part by Anonymous Coward · · Score: 3, Insightful

      Bill Gates blows goats

  6. Great hackers use Perl and Python? by putaro · · Score: 3, Interesting

    He knows an interesting set of people, considering that C didn't come up once. Is Linus Torvalds a great hacker? Apparently not because if he was he would have coded the kernel in Perl!!

    1. Re:Great hackers use Perl and Python? by Jerf · · Score: 2, Interesting

      Is Linus Torvalds a great hacker? Apparently not because if he was he would have coded the kernel in Perl!!

      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.

    2. Re:Great hackers use Perl and Python? by Amiga+Lover · · Score: 3, Funny

      Apparently not because if he was he would have coded the kernel in Perl!!

      I put forward to you... vmlinux.NET

    3. Re:Great hackers use Perl and Python? by RedWizzard · · Score: 3, Insightful
      Is Linus Torvalds a great hacker? Apparently not because if he was he would have coded the kernel in Perl!!
      Don't be so obtuse. Perl is clearly not the best choice for a kernel, and nowhere in the article did it suggest using tools that are not fit for the job (in fact it specifically mentioned the importance of tools). Besides Linus has written a number of tools in Perl.
  7. Re:Why are Paul Graham's web pages width-constrain by pben · · Score: 2, Interesting

    You ever notice that magazines, printed on paper, have several narrow columns instead of one wide one? The eye can read a narrow column quicker and with less strain than a wide column. Web pages don't often do several columns, due to the scrolling problem but a narrow column still reads quicker. Your way is slower and harder on the eyes.

    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.

  8. Re:Its slashdotted.. by yppiz · · Score: 2, Informative
    Much of the Internet Archive crawl and processing code, at one point, was perl scripts, GNU text utils, and custom C to deal with sockets and IO. This may still be true, but I haven't seen the Archive crawler in a few years.

    --Pat / zippy@cs.brandeis.edu

  9. Canadian Mullets by Anonymous Coward · · Score: 2, Funny


    I remember standing behind him [Trevor Blackwell] making frantic gestures at Robert to shoo this nut out of his office so we could go to lunch. Robert says he misjudged Trevor at first too. Apparently when Robert first met him, Trevor had just begun a new scheme that involved writing down everything about every aspect of his life on a stack of index cards, which he carried with him everywhere. He'd also just arrived from Canada, and had a strong Canadian accent and a mullet.

    Thereby *really* standing out as an nutjob oddball.

  10. Eric Raymond by EmbeddedJanitor · · Score: 5, Insightful
    ESR will tell you that you must be like him. He says one should play a musical instrument, enjoy (and preferably write) science fiction. He does not mention having a gun fetish, but I guess this helps...

    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.

    --
    Engineering is the art of compromise.
  11. When he starts comparing languages... by SnapShot · · Score: 5, Funny

    When he starts comparing languages or, to be more specific, makes the blanket statement that better hackers like Python over Perl I am reminded of the fact that the best hackers actually use OCAML and Objective-C.

    "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...

    --
    Waltz, nymph, for quick jigs vex Bud.
    1. Re:When he starts comparing languages... by Bull999999 · · Score: 2, Funny

      You left out binary on punch cards. Now that's "L33T HaX0rz sHiZ" yo!

      --
      1f u c4n r34d th1s u r34lly n33d t0 g37 l41d
    2. Re:When he starts comparing languages... by fyngyrz · · Score: 2, Interesting
      L33T, not.

      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.

      --
      I've fallen off your lawn, and I can't get up.
    3. Re:When he starts comparing languages... by robnauta · · Score: 2, Insightful
      "the best hackers use Pascal and COBOL."

      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 most familiar and productive in myself.

  12. Then you don't know the right programmers by Anonymous Coward · · Score: 2, Insightful

    Spend some time somewhere like Perl Monks and you'll find out that there are a lot of competent Perl programmers who aren't sysadmin types. Or go and look at CPAN to see the variety of different kinds of software that are available in the Perl world.

    Furthermore I'd like to point out that Graham made a claim about the behaviour of hackers, not open source programmers. Most of the people who contribute to Sourceforge would not, in Graham's opinion, deserve the compliment of being called hackers. Therefore their aggregate choices are irrelevant.

    Disclaimer: I'm a fairly well-known Perl programmer.

  13. java duuuudes by joeldg · · Score: 2, Interesting

    I was reading through that article and when I got the point he makes on Java (which I will admit to sharing his point) all I thought was..
    "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.

    1. Re:java duuuudes by kaffiene · · Score: 2, Interesting

      All I can say about that is that I am a long term hacker. I LOVE C, C++, Python, LISP AND I love Java too.

      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 /. that this is simply a case of the right tool for the job. But no, yet again we get the same old "anyone using Java must be defective" meme. Tools are just tools

    2. Re:java duuuudes by Trinition · · Score: 2, 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 Perl was the "Practical Extraction and Report Language". Now you can build entire geek community websites out of it. What happened? Perl grew up. It gained namespaces, OO-capabilities, became more consistent, etc. Not all scripting languages have this (i.e. batch files, yuck!). Some develop them overtime (look at the great strides that PHP has made since itself was a bunch of scripts written in another language). So even the best hacker tools mature. Does that make them less of a hacker tool, or more of a hacker and non-hacker tool?

      Oh, and as for why anyone would program in Java? Well, personally, I have a wife and kids to feed. It just so happens that my bosses pay me to write applications that deploy to WebSphere servers. While I could use Jython, or probably some strange Java-Perl bindings that no doubt exist, I would be quickly fired leaving my family in an unreliable state of upkeep.

      So, I "hack" in the evenings and on weekends. I "hack" at work to help get my job done. And you know what, sometimes I even do it in Java.

      BTW, Paul Graham just went down several notches on my respectibility meter. What an idiot.

    3. Re:java duuuudes by kaffiene · · Score: 2, Insightful

      I'm a painter as well and I love oil paints. I think your idealised Engineer is just that - an ideal. In practice, I don't think people who make software are like engineers, or like scientists, I think many software creators are like painters. And like painters, I think software creators have affection for their tools.

      Show me someone who has just created their first language with flex and bison and doesn't get a bit of a buzz out of it. Show me someone that has architected something beautiful but cannot see the beauty in it.

      No, I think you have an unrealistic view about software. And if I'm no longer an 'engineer' I'm not sure that's something I really care about, never having claimed to be building bridges in the first place.

  14. Offices Rock! by billstewart · · Score: 3, Insightful
    Peopleware by DeMarco & Lister, was a fairly good book on software and development organization productivity (and I assume the second edition is still good...) One of their points is that offices are really important, because programming involves a lot of deep focus, and in a cubicle environment, it's much harder to tune out interruptions and stay focussed. Sometimes you need to talk to other people, but when you need to concentrate, you need to concentrate. Two-person offices are usually an ok compromise - you get some social contact, and you get a bit more interaction with other people and projects, but you can still ignore your officemate except if he's having a speakerphone conversation. And of course, if you're into Extreme Programming, two people is probably the perfect number...

    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.

    --

    Bill Stewart
    New Fast-Compression-only CPR http://preview.tinyurl.com/dy575ks
  15. AS/400 by Bob+Cat+-+NYMPHS · · Score: 2, Interesting

    He wrote At a startup I once worked for, one of the things pinned up on our bulletin board was an ad from IBM. It was a picture of an AS400, and the headline read, I think, "hackers despise it.'' [1]


    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.

    1. Re:AS/400 by DaveJay · · Score: 4, Insightful

      I believe that he mentioned this because the guys at the startup viewed 'hacker' to refer to themselves, not to the crackers that they knew the marketers intended, and that they probably did in fact hate working on the AS/400 -- thus making the truth of the headline (for them) ironic.

      I thought it was pretty funny, actually. :) Since, as you point out, the AS/400 is a secure box, the humor comes from the headline being true in both a literal AND an ironic sense simultaneously.

  16. Esoteric Languages by Anonymous Coward · · Score: 5, Interesting

    I consider myself to be somewhat of a seasoned hacker. I do hours of pretty intense C programming (Linux kernel code) on a daily basis. I feel that I have mastered the C programming language. Sit me down with any project written in C, and I will be able to (at least syntactically) figure out exactly what's going on with just a glance. I feel absolutely confident in my ability to easily slam through any task in C, without having to resort to any reference guides or manuals.

    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...

    1. Re:Esoteric Languages by joeykiller · · Score: 2, Interesting
      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).
      Aren't you contradicting yourself here? You say one of the reasons you hate perl because you hate interpreters. That makes me curious as to why you choose Ruby for your personal projects? As far as I know Ruby is as interpreted as Perl.
    2. Re:Esoteric Languages by elronxenu · · Score: 2, Insightful

      I hate Perl. I hate interpreters. I hate pathetic attempts at object oriented behavior.

      Perl OO is actually very elegant. Let's check the three primary characteristics of OO, against Perl:

      • Inheritance - tick
      • Encapsulation - tick
      • Polymorphism - tick

      Inheritance - How much "overhead" is there in creating a new class in perl? Almost nothing; simply set your package name and then start writing methods. Perl takes care of inheritance, even multiple inheritance on every method call. Since objects are usually created as hashrefs, there's no ambiguity about the contents of an object which inherits from multiple parent classes.

      There's no need for separating declarations and definitions - just "use" the package names which you need - typically only when instantiating new members of those classes.

      Encapsulation - probably perl's biggest advantage is that the hashref (associative array) is a first-class datatype in the language. There is no need for container classes, because you can store anything you like in a hashref. Hashrefs handle easily many real-world problem domains: categorisation of source data (e.g. sum by month), easy creation of data structures of arbitrary complexity, dynamic modification of said data structures. Programmers spend less time thinking up elegant designs for linked lists or btree structures to hold data. A hashref neatly encapsulates an object's instance data and it permits inspection. Sure it's possible to change a value inside a hashref without going through a class's setting method - but then, it's not perl's job to set the rules of object access. You set the rules yourself and you're solely responsible to follow them. Getting back to the hashrefs though, most importantly the use of hashrefs means that there is no need to to declare every single item of instance data which a class has - each class can add to and take from its instance data at will.

      Polymorphism - a perl object is a reference to something, blessed into a class. Any perl code can call an object's methods without having to know anything about the class of the object. In C++ for comparison, a reference needs to be declared as some class, and only the methods defined for that class can be used on it. What if you want to pass in references to any of several classes? Well, all those classes have to have a common parent class, and only the parent class methods can be used by the code which is using the reference. What if they don't have a common parent class? Well that's tough, but there are a lot of kludges which C++ coders can use to get around the language restrictions, like casting references and templates. Perl OO has none of these design flaws - you have a reference, doesn't matter what it is, you can call its methods.

      Memory management - unlike C for example, perl has automatic memory management. Storage is returned to the heap when it goes out of scope or when the last reference to it is deleted. Sure C++ has "new", but you have to know when to call "delete".

      First class string support - most programs use strings a lot, and it's very convenient to have first-class string support within the language (and automatic memory management so strings can be extended without overflowing a buffer).

      First class regex support - again, very convenient, very flexible, very quick to write

      Certainly perl can be used to write hideously ugly and unmaintainable code - but then it can also be used to write neat and well-structured code.

      I came from a C / C++ background. I found coding OO perl to result in much more natural OO design than was possible in C++. I could focus on designing a system of independent classes which provided functionality, and a set of interoperable classes which solved the application problem, rather than trying to fit my needs into what C++ could do, or even worse spending time trying to get around the limitations of C++. There's a reason that C++ is so devoid of public class

    3. Re:Esoteric Languages by crucini · · Score: 2, Insightful
      Sorry to tell you this, but you are a little out of your depth. The poster to whom you are replying clearly explained that he knows and uses a variety of languages and isn't speaking from zealotry.

      Im sorry you hate a language merely because of run time errors. Woah! What a concept, a runtime error! All coders, great or small, have run time errors at some point.

      Different languages apply different degrees of rigidity at compile time. One drawback to scripting languages is that mistakes that could have resulted in compile-time errors become run-time errors instead. Grandparent was making a very specific point, and anyone experienced in C and Perl should have understood that point.

      He isn't advocating that you switch to O'Caml - he's not even ready to switch himself, in professional life. He is describing the mindset that comes to someone who has used the conventional languages heavily for many years. You may arrive at that mindset yourself one day.
    4. Re:Esoteric Languages by SigmaEpsilonChi · · Score: 2, Insightful

      I'm uncertain what you mean when you suggest that "the current state of O'Caml is that interfacing to these kinds of 3rd party libraries (using standard DLL or share library interfaces) is almost unworkable."

      Are you referring to the ability to construct bindings for shared libraries written in C? Are you referring to being able to generate bindings to shared libraries written in C? Are you referring to being able to write short annotations for introducing symbols from shared libraries written in C in OCaml code?

      I suppose one of the problems with being vague is that people have no idea what you're asking.

      You can write bindings to C libraries by hand using the FFI, like you can with Python, Perl, or Java.

      There are ways of generating wrapper code for interfacing to shared libraries, like CamlIDL and SWIG. You could also generate interfaces for use with the Dl module.

      The Caml Humps site is a good place to start looking for some of the presently available libraries.

      I think a far more annoying aspect of Objective Caml is that it is not currently possible to have natively-compiled dynamic shared libraries written in Objective Caml; all programs will be statically linked to Objective Caml libraries. You can load dynamic bytecode, but that's really just not the same.
      There once was a program for wrapping Objective Caml code into a DLL but I don't think it has been kept up to date, it's a dirty approach, and as far as I recall it only worked on Windows.
      There's the SCaml effort, but it seems to be falling behind, is incomplete, and only works on a few platforms.

  17. Java Vs. perl by fimbulvetr · · Score: 5, Insightful

    He's right. You guys are so personally offended you can't see the forest for the trees.

    He's talking about hackers here, kids. Not 90% of the /. crowd. In your opinion, who's the most likely hacker?

    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".

    1. Re:Java Vs. perl by Michael+Crutcher · · Score: 4, 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.

    2. Re:Java Vs. perl by David+Kennedy · · Score: 2, Insightful

      So I'm out of the question because I'm a Java developer? Never mind that I've been paid to work in C, C++, Perl, and a few other propietary languages. Never mind that I write small Perl and Unix scripts most days. Never mind that the reality of being a working senior Java server-side developer is a knowledge of a vast, and ever growing, set of associated platforms, comms and database technologies required for large scale projects for, in my case, telecomms and financial customers. On multiple platforms. Multiple operating systems.

      Apparently my decade or more performing scientific computing or writing code on Unix somehow means I don't know that environent. Somehow choosing to use that environment to write Java invalidates everything else I know.

      You are a technology bigot and deserve the same sort of criticism I'd get if, say, I presented the view that sysadmins are just computer janitors for developers, most of whom could do the same job. See? That'd be a grossly unfair thing for me to say wouldn't it? (Even if I sometimes thought that when working with bad admins.)

      You seem to be forgetting the golden rule: pick the right tool for the job.

    3. Re:Java Vs. perl by haystor · · Score: 5, Interesting

      It has been my experience that Java developers have no problem criticizing Perl without ever having tried it. When shown, they will be amazed by what is already done and in CPAN. They say Perl is slow because it is interpreted and needs to spawn a new process for every page requested on a web server.

      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.

      --
      t
    4. Re:Java Vs. perl by arudloff · · Score: 2, Insightful

      The question really is, is it possible to be a hacker, and have a business mindset? What he proposes in this article would make it seem impossible, and the sysadmin crowd tends to not even fathom the possibility.

      The industry doesn't give a rats ass for the perl/php/python/flavor-of-the-week mentality. Time is a resource and as a resource it's way more valuable than the hardware. They don't care about spending more money on bigger and badder equipment. Therefore, really, coding in the name of effeciency is truly a dying concept. It's coding in the name of delivery and maintainability (thus the need for fast, widespread standards, not difficult to understand syntax in the name of cool)

      I spend my "hobby code" time hacking on whatever side project me and my buddies can come up with. But during the day hours, I sold my soul to the java world (and will undoubtedly do so again to another language in the future) to make that paper. More money = the sooner I have more freetime to play.

  18. Astrology for Geeks by jjohnson · · Score: 4, Insightful

    Graham essentially spouts a lot of geek cred virtues that suit the stereotype of hackers that we all, in some way, want to be. So we all read the article, see a little bit of ourselves in it ("yeah, I'm pretty politically incorrect, too."), and feel good about how special we are. Just like astrology profiles based on your sign contain a lot of qualified compliments ("you speak your mind, sometimes offending other people without meaning to."), Graham's articles have a constant thread of "geeks are special, and you're a geek, too."

    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.

    --
    Anyone who loves or hates any language, platform, or manufacturer, doesn't know what they're talking about.
    1. Re:Astrology for Geeks by Animats · · Score: 4, Insightful
      I've known quite a number of very good programmers, and worked with some of them. By this I mean people who wrote entire operating systems, major CAD packages, game physics engines, key parts of TCP/IP, and such. I mean people from the original Xerox PARC crowd, Stanford, MIT and CMU. I don't mean people who think they're l33t because they've memorized most of the UNIX command line options.

      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.

    2. Re:Astrology for Geeks by ameoba · · Score: 2, Funny

      I'd take Graham over John Katz any day...

      --
      my sig's at the bottom of the page.
  19. Microsoft paradox by _randy_64 · · Score: 4, Interesting

    I find it interesting that on one hand, he says no real hackers want to use Microsoft software, but it's Microsoft that has the number one hacker perk of private offices. So does that mean that no good hackers work at MS or that they rate offices higher than the tools they use?

    --
    I mod down all the "free iPod"-sig losers.
    1. Re:Microsoft paradox by IRLQBall · · Score: 2, Interesting

      Well, I for one would rate a 2x2 broom cupboard higher than many Microsoft development tools. But that's just me...

      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. :-)

  20. Tool for the job. by DarkMan · · Score: 5, Insightful
    First of all, if you look at sourceforge stats, the top languages are C, C++, and Java, ...


    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.
    1. Re:Tool for the job. by Steve+G+Swine · · Score: 2, Funny
      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.
      Please tell me you destroyed the source immediately afterward, or at least that no maintainer knows your name.

      I fear for your life the first time someone wants one little change.
      --
      "Consider yourself a member of a virtual corporation with Mr. Torvalds as your Chief Executive Officer." - Linux Advocac
    2. Re:Tool for the job. by dvdeug · · Score: 2, Insightful

      Claiming that 'good hackers like language X' misses the whole point. Good hackers will use the best tool for the job.

      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.

    3. Re:Tool for the job. by DarkMan · · Score: 2, Informative

      Heh, it's not as bad as it might sound.

      The Fortran code solved a particular eigenvalue problem in a few manners, to get different bits of information. Main workhog, used parrallel algorithms.

      The C code generated the set of input matrices for a spefic problem geometry. These were output into a text stream, passed to the Fortran routine. This means that the C code took input of number of atoms, orientation, interaction coefficents, and output some giant matrices.

      The Fortran output was several sets of output from the various methods. Perl chunk, for the most part, selected the output chunk desired, and pretified it. For one particular type, it output Postscript.

      So, the gist is that each indivdual part was seperate conceptually, and performed distinct roles. It would be feasable to run a specific job by piping the output of one stage to the input of the next. In practice, the runtimes of the Fortran stage was such that it was saved to disk, so the same output could be parsed in multiple ways.

      I wrote the code, ran some stuff, forgot about it, and had to go back to it 2 years later. Despite a serious lack of comments, it took around 5 minutes to get familar with it enough to extend it for a totally different crystal system.

  21. Erm... by Anonymous Coward · · Score: 5, Interesting

    Perl is a language only its mother could love. And some people who've never coded in Lisp. Python is a much nicer language of course.

    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.

    1. Re:Erm... by Arkaein · · Score: 2, Insightful

      First off, I'd like to see those benchmarks. I'm not sure I believe them. Oh I'm sure such results could be achieved, but likely they were programmed in ways that do not take advantage of the best features of Python. Probably things like Fibonacci tests and the like. Pfff.

      Second, I've got a secret to share with you about writing software. The secret is that in most applications not more than 5% to 20% of the code actually requires the speed that an optimized C/C++/Java implementation would give it. GUIs, text processing, database queries, networking (and just about any I/O bound) will be very close in speed in Python or similar languages to natively compiled code. In the cases of GUIs especially most of the time the CPU is simply waiting on the user anyways.

      Now what about that remaining 5% to 20% you may ask? If you need the speed then implement that in optimized C or C++. Python is designed to interface such code easily. But do us all a favor and leave the baggage of you high performance languages out of the main application logic.

  22. Incendiarially by smittyoneeach · · Score: 4, Funny
    (Incidentally, I think this is what people mean when they talk about the "meaning of life." On the face of it, this seems an odd idea. Life isn't an expression; how could it have meaning? But it can have a quality that feels a lot like meaning. In a project like a compiler, you have to solve a lot of problems, but the problems all fall into a pattern, as in a signal. Whereas when the problems you have to solve are random, they seem like noise. ) I think this is what you call a theological question. Besides than the Adams approach (Douglas or Scott), I think the other reasonable approach to the question is to humbly admit that it's like describing the ratio of a circle's circumference to its diameter; the actual answer overflows the finite brain.
    Walk humbly during all the days of your vanity, and look forward to an eternity when all will be revealed.
    Oh, and use emacs.
    --
    Get thee glass eyes, and, like a scurvy politician, seem to see things thou dost not.--King Lear
  23. Arrogant Obnoxious Jerk by megamegamegamega · · Score: 3, Interesting
    Don't bother to RTFA. This guy has had a beef with Java for years, and a large chunk of the article is devoted to gratuitously dumping on Java. That's when he's not trying to justify why its a "good thing" that he has more money than most other people.

    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.

  24. Flamebait my ass by Jerf · · Score: 4, Interesting
    Flamebait my ass. Seems the truth hurts:
    The original study that showed huge variations in individual programming productivity was conducted in the late 1960s by Sackman, Erikson, and Grant (1968). They studied professional programers with an average of 7 years' experience and found that the ratio of initial coding time between the best and worst programmers was about 20 to 1; the ratio of debugging times over 25 to 1; of program size 5 to 1; and of program execution speed about 10 to 1. They found no relationship between a programmer's amount of experience and code quality or productivity.

    Although specific ratios such as 25 to 1 aren't particularly meaningful, more general statements such as "There are order-of-magnitude differences among programmers" are meaningful and have been confirmed by many other studies of professional programmers (Curtis 1981, Mills 1983, DeMarco and Lister 1985, Curtis et al. 1986, Card 1987, Boehm and Papaccio 1988, Valett and McGarry 1989). - Steve McConnell, in his book Code Complete
    Enough references for you? I reiterate, it looks like arrogance from the bottom, but denying this is its own form of arrogance. It's as etablished as anything can be.
    1. Re:Flamebait my ass by killjoe · · Score: 2, Insightful

      The problem is that the line between arrogant and asshole is pretty fine. If you have a great hacker who is arrogant and hard to get along with then replace him with a mediocre programmer who can work inside a team without dusrupting it.

      Sometimes the arrogant assholes spend all their time telling everybody else how much they suck with brings the productivity of the whole team down.

      --
      evil is as evil does
  25. Short version by Salamander · · Score: 3, Informative

    "What great hackers have in common is they're a lot like me (or at least like I imagine myself to be)"

    What an amazing ego.

    --
    Slashdot - News for Herds. Stuff that Splatters.
  26. Re:Article text (in case of slashdotting) by Anonymous Coward · · Score: 3, Funny

    Who is to say you didn't post as the AC, claiming Karma Whoring, and then reply to yourself, non-anonymously pointing out the grandfather post was AC, all simply to get yourself modded up as Insightful?

    THAT'S META KARMA-WHORING; OMG!

  27. Python, PERL and Hackers... by Qui-Gon · · 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).

    --

    We are blind to the Worlds within us
    waiting to be born...
  28. Unnoticed... by Colven · · Score: 4, Interesting

    I , for one, hope to hear echoes of the major points of that article regarding improper programming atmospheres and mismanagement (ill-understanding) of programmers needs. I'm of the opinion that this issue is still a much avoided or unrecognized problem in the work place (please do correct me if I'm wrong about that.) That was probably the best manner in which I've ever heard that topic addressed... although the "langauges of choice" and so on seems to have gotten the most attention.

    --
    expletives welcomed
  29. Re:I was thinking the article was good until... by Tlosk · · Score: 2, Insightful

    He's not talking about the superiority of any language or implying that some languages have no use.

    Think of it in these terms, if you're a salesman selling yachts, looking at the type of watch a potential buyer is wearing can quickly help you identify persons of extreme interest who you should take every possible care to treat right. This doesn't say anything at all about the ability of a cheap Casio to tell the time or perform reliably. It's just saying that people who wear Rolexes are the type of people you're looking for if you are selling yachts.

    Similarly, Graham's suggesting that in his experience, great hackers he knows almost invariably enjoy using Python.

    I know it's easy to get defensive when someone looks dismissively at the Casio on your wrist, but to say that they shouldn't do so because you can tell time just as well as someone with a Rolex is missing the point.

  30. you can't "become" a "great hacker" by sinnfeiner1916 · · Score: 4, Insightful

    i read in the jargon file once that you cannot "become" a hacker -- rather, others must bestow it upon you. you have to earn it. you can't buy it. you can't decide you are. Yeah, you have to do stuff, but you should be doing it just because. Then others will decide you are a "hacker"

    --
    The More Laws, the less Justice --Marcus Tullius Cicero
    1. Re:you can't "become" a "great hacker" by tesmako · · Score: 4, Interesting
      On the other hand I also read in the jargon file that hackers;
      • Hackers don't like television.
      • Hackers don't like character based menu interfaces (?!)
      • Don't use tobacco
      • Only use alcohol in moderation if at all
      • Are only weakly motivated by money and social approval.
      • Are monumentally disorganized and sloppy about dealing with the physical world (don't pay bills on time, don't clean and so on)
      • Are more likely to have cats than dogs.
      • Have horrible handwriting.

      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 :)

  31. summary of slashdot response to this article by BlueStraggler · · Score: 5, Insightful

    "It was really interesting until he pointed out that great hackers work differently than I do, at which point it became clear that he is a moron."

  32. Paul Graham is unbiased by PetoskeyGuy · · Score: 2, Insightful

    Just like /. is unbiased.

  33. Great Engineers by Keel · · Score: 5, Insightful

    I know there have been flame wars about using the word "hacker" for years, and I certainly don't want to start another one. I don't care if people use the term as a pejorative or a badge of honor. I don't care if it means a computer criminal or software developer. I don't care if it means white hat or black hat. That's a debate best left back in 1985.

    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! ;) But I don't think this view represents the majority of developers; it may not even represent the majority of open source developers. The hacker/craftsman camp is a small minority.

    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.

    --

    ----

    "Oh, bother," said Pooh, as he hid Piglet's mangled corpse.

    1. Re:Great Engineers by jrumney · · Score: 2, Insightful
      If you were in the market for a new stereo, would want something that was soldered together in some guy's garage? That's a craftsman/hacker. While it's true he may have alot of raw talent, his stereo is not going to be better than one designed and built by engineers at Bose.

      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.

    2. Re:Great Engineers by Salamander · · Score: 2, Interesting
      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.

      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.

      --
      Slashdot - News for Herds. Stuff that Splatters.
  34. It's too bad... by PsiPsiStar · · Score: 3, Funny

    ... that he didn't talk about people who like to break into and control systems. I would love to see an article entitled "Paul Grahm on great crackers"

    Ba dum bum!

    --

    ___
    It's the end of my comment as I know it and I feel fine.
  35. False conclusion from the premises by mark-t · · Score: 2, Insightful
    FTA:

    Though, frankly, the fact that good hackers prefer Python to Java should tell you something about the relative merits of those languages.

    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.

  36. One point passed over... by jbNet · · Score: 2, Interesting

    First of all I thought the article was very interesting, When reading it I didn't see it as biased at all, it wasn't bashing any languages, and I don't understand why people are posting as if it were.

    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

  37. java-like python features by wotevah · · Score: 3, Informative
    Sorry for the PRE/ecode, I don't like HTML much:
    # No more separate header files!
    - check - Python only has modules loaded at "runtime" (does not even have separae interface/implementation)

    # Garbage collection
    - check

    # Implicit bounds checking
    - check

    # Core libraries not afraid to use Exceptions
    - exceptions are the rule :)

    # Standard core libraries provide an enormously useful standard toolset.
    - yes, not nearly complete but growing

    # Strings are used everywhere freely making the code easier to debug
    - not sure what you mean by that.

    # Stack traces!
    - yes. Default stack traces suck though (but so do Java's). This is because without knowing the actual parameters passed to each function, their usefullness is limited. I posted a better stack trace module on comp.lang.python a while ago and got a few replies from people doing even more involved stuff in the same direction.

    # Javadoc
    - it's called pydoc - the module documentation on the website is done that way

    # Many choices for great IDEs
    - xemacs has a Python mode (that's what I use) but I heard Eclipse has a Python plugin as well, I am planning to try that soon.

    # Much much much more cross-platform
    - yes although, unlike Java, it offers platform-specific modules as well. Not trying to open a can of worms but as I despise having to reinvent the wheel I was mildly irritated by Java's insistence on not implementing certain OS-specific things (like IPC or fork) which lead to artificial obstacles such as the necessity of installing an SMTP server listening on 25 just to be able to send mail from the local machine.

    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.

  38. I'm doomed! by bob_jenkins · · Score: 3, Funny

    OMG, I write in C and Java, my OS is Windows ME, I'm willing to fix bugs in 20-year-old code, and it's taken me over two weeks so far to write a simple stream cipher + MAC! I must be lousy!

  39. "Perl is geared toward solving problems quickly" by po8 · · Score: 3, Insightful

    A computer is a machine for getting wrong answers quickly.

    Perl can help with that.

  40. Hah! by warrax_666 · · Score: 3, Insightful
    everyone uses it, because it's all they know exists.

    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).
    --
    HAND.
  41. Ruby vs Python and blatant lying by ultrabot · · Score: 4, Insightful

    how about something more important, like integrated OOP. nothing's worse than claiming to be heavily object oriented, that has a bolted on OOP model.

    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.

    --
    Save your wrists today - switch to Dvorak
    1. Re:Ruby vs Python and blatant lying by ultrabot · · Score: 3, Informative

      if i have to pass self to every single member function, that's bolted on

      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.

      --
      Save your wrists today - switch to Dvorak
  42. Janitor... by Big+Sean+O · · Score: 2, Insightful

    At my last job, the guy who emptied out the garbage cans (so I guess that makes him the janitor) was a real computer enthusiast. He knew all about firewire, bluetooth, USB2.

    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.

    --
    My father is a blogger.
  43. Amen by behindthewall · · Score: 2, Interesting

    For me, this article hits the topic head on.

    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.)

  44. Re:About Ocaml by Wastl · · Score: 2, Insightful
    i>Well, guess what I found: not a single feature that C++ does not have!

    Two words: static typechecking. This single property has very far reaching consequences. Most importantly, it allows to detect many programming errors at compile time that would go unnoticed in most other languages. Oh, and don't tell me C++ has a strong type system. It hasn't. For instance, I can do all kinds of nasty things with pointers that are never checked.

    Other features:

    • higher order functions, partial evaluation
    • garbage collection (really efficient, not the time and memory consuming stuff from Java)
    • close to the mathematical description of problems
    • ...
    The point is, I can still program the functional way with all its advantages, but revert to imperative style for the small amount of code that really needs to be fast. Personally, I still prefer Haskell, though (lazy evaluation is fun!).

    Sebastian

  45. Re:About Ocaml by Wastl · · Score: 2, Insightful
    No, it does not have any advantage. Any functional style algorithm can be expressed in imperative style.

    Any program can be written on a Turing machine. Or in Brainfuck for that matter.

    And C++ can do functional programming. It *is* a functional language, in some respect.

    No, it fails on most properties that make up functional languages: functions are not "first class", there is no static type checking, there is no partial evaluation, variables represent memory cells instead of values, ...

    Sebastian

  46. Re:About Ocaml by Anonymous+Brave+Guy · · Score: 2, Insightful
    C++ can not only use functions as data, but also objects as functions. Closures are not needed in C++, since we have templates.

    Now, see, you almost had a point when you referred to function objects. They can indeed serve many of the same purposes as closures. But really, such support as C++ does have for treating functions as first class entities is hacky and unreadable template garbage at best. I'm quite a fan of C++ for some things, but that sort of claim is just unrealistic.

    Let's take a specific example. Compare the standard "fold" function in something like ML or Haskell with the hackery required to achieve anything close to the same effect in c++. In the functional languages, it's trivial. In C++, it's... well, if you think it's at all elegant, please feel free to post your implementation here so everyone else can learn from it.

    C++ has pattern matching exactly like ML. Variants can be created with templates.

    Huh? Even people like Andrei, who have written feature articles on this subject, can't provide C++ with anything close to the elegance of a typical functional programming language's "match" construction.

    In the end, there is no difference to C++. It [declarative programming] is still imperative programming.

    Um, no. There is a world of difference. Most of that world is full of side effects, things which a purely declarative style makes rather difficult, no?

    Any functional style algorithm can be expressed in imperative style. And C++ can do functional programming.

    Of course. So can assembly language. Whether they can do it well enough to be of any real use is a different question entirely.

    --
    If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
  47. Re:Great Hackers ignore the specs. by poot_rootbeer · · Score: 2, Interesting

    I got my current project because they asked for a revision, and I completely trashed their UI. The new UI took one-tenth the time for data input, and was more expandable. Then I changed how the business processes work. Now I am working on reporting tools. The customer loves it.

    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.)