“How To Become A Hacker” updated

Just a minor edit. Correcting some translation URLs and removing C# from the bad-languages shitlist now that Mono has made it portable. Read it here.

32 comments

  1. Hats off to the good folk behind Mono, indeed…love it or loathe it, the M$ bastardization of xmlrpc has taken off, and we’re all going to have a much nicer time living with it thanks to Mono :-)

    I recently added ruby to my arsenal…and rails is such fun to play with…I was getting tired of being thought of as ‘old school’ ;-)

  2. “How to become hacker” should be renamed to “How to become Eric Raymond” because thats what its about.

  3. From the section on getting and using an open source unix, this statement:

    From a new user’s point of view, all Linux distributions are pretty much equivalent.

    appears to be somewhat out of date. There are several Linux distributions, like SuSE and Ubuntu, which have advanced a long way toward the goal of being immediately substitutable for Microsoft Windows when it comes to basic computer tasks; others, such as Slackware and Gentoo, have much less so advanced, and present a considerable learning curve for buck newbies when it comes to getting them installed and running.

  4. Kaisaire,

    I *loved* Lisp when I was immersed in it…but remember, it isn’t a language, it’s a way of thinking!

    I’m thinking of trying to work some Scheme into a future project…something a bit lighter than full-blown Lisp.

    WildMonk

  5. I sometimes wonder what would’ve happened if I’d had a good symbolic algebraist as a maths instructor at the right point in my life.

    I can intellectually ‘grok’ the concepts of loop and iteration structures, and hash tables and data structures, but I cannot write them, or read code using them, without so much mental effort that it sparks migraines. I get the same problem following a lot of maths, and had enough difficulty that I steered clear of maths in much of my education. (My degrees are in English and medieval history. I make my living writing games about rocket science and kinematics…)

    I learned, long after college, that my brain does maths very spatially. When I can finally cut through the Random Jargonism of symbolic logic, and “see” the problem, not the equation, my head plots out spinny-rotaty 3-D graphical images behind my eyes, and I know the shape of the problem space with the same amount of ease that most of the people reading this post just “hear” a voice in their heads as they read it.

    A lot of my professional work in game design is trying to A) present problem spaces described in the terms *I* see them in, and B) explain those terms to end users, in a manner such that exploring them is entertaining and fun.

    Had I had a good maths instructor years ago, who recognized that I was getting the right answers by the “wrong method”, and took the time to learn the method that my mind uses and build translation tables, perhaps I’d be a programmer.

  6. > Had I had a good maths instructor years ago, who recognized that I was getting the right answers by the “wrong method”, and took the time to learn the method that my mind uses and build translation tables, perhaps I’d be a programmer.

    Not unlikely. You’re certainly bright enough, and you have an engineer’s way of looking at the world.

    From your description of your mental processes, though, I think you’d have been more successful in analysis than in algebra. Calculus and followons like topology reward good visual imagination more than algebra does.

  7. Well, at least some of the abstract algebra I learned maps relatively easily over to a spatial representation. Especially certain symmetry groups (where the group operation is basically a transformation of a certain shape — the only issue is figuring out what the shape looks like, and what the group operation does to it).

    OTOH, I can’t argue that calculus rewards a visual imagination *more*. I just don’t want anyone to get the impression that algebra is completely non-visual. ;-)

    (On the third hand, I’m a CS person, not a math person; I just took a decent number of math courses while in school. So my experience may not be quite what a math major’s would be, for instance. Still wish I’d have been able to take some of the more abstract math classes, though, like topology, or what exactly a “manifold” is, and how they work (perhaps this is part of topology?).)

  8. Agree with Jeff Read there… Telling new users to try Ubuntu, SuSE or Red Hat would be nice. Ubuntu is of course preferred because it’s free of proprietary software, non-commercial, and just plain better than all others. Oh, and the question about C# needs a rephrasing – It’s a question about VB anc C#, but there’s no mention whatsoever of C# on the answer, which is definitely confusing.

  9. I’d suggest adding Ruby to the languages of choice. If you liked Python’s setattr() when writing fetchmailconf, then you might be interested that Ruby is so dynamic that it even allows you to write setattr() yourself… meta-metaprogramming :) I think this is not possible in Python. Example:

    def setattr (className, *args)
    #create a new anonymous class
    anonymClass = Class.new do
    attr_accessor(*args)
    end
    #bind the anonymous class to constant, thereby giving it a classname
    # if the classname already exists, it will extend that class
    Object.const_set(className,anonymClass)
    end

    setattr(“MyClass”,”foo”,”bar”)
    baz = MyClass.new
    baz.foo = “cool”
    baz.bar = “even better”

    puts baz.foo
    puts baz.bar

    >> cool
    >> even better

  10. It might be worth revisiting your assessment of perl (which I read as “useful, but not beautiful in the way a language for a learning acker should be”) in the light of the pretty far-reaching changes coming with perl6, which give the foundations of the language a thorough spring cleaning and make it a pretty damned attractive language, and the best support for core functional programming style of any of the major languages (with the guarantee of tail recursion, it beats common lisp). It’s pretty much a given that perl6 will have macros.

    Of course it’s anybody’s guess as to when we will see the final product, but the appetisers have been tasty.

  11. Doesn’t Ruby already fill that niche that Perl6 wants to fill? Chanches are high that Perl6 will be a wonderful solution to an already solved and therefore forgotten problem.

  12. Bruno:

    I am not sure I agree with the current Ubuntu fad… for me, hardware recognition and such was excellent, but I could’nt play a damned video file in Totem before semi-legally installing MPlayer codecs, and symlinking the directory as Totem expected it to be in another dir than the howtos suggested. Hasn’t been a pleasant user experience. FOSS purism today is a bad idea – which one is better, watching AVI, MPEG, RealMedia, etc. videos with proprietary codecs or not being able to watch them? The long term goal is to have everything in FOSS, but the short term goal should be to make things WORK no matter what. And to the hell with licencing issues: it is rather unlikely for BSA to visit our homes for using a proprietary RealMedia codec. (And even if it happened, I’d count on the power of public outrage to kick’em back.)

    I will stick to (K)Ubuntu for a while because I am tired of distro wandering (UHU -> Gentoo -> (K)Ubuntu just in the last 12 months) , but FOSS purism serves it really bad. Hell, even installing Skype needs a lot of googling around and doing ugly klugdes. I’d rather like a distro which is not so strict about FOSS purism but rather treats usability as the first priority. Maybe I’ll try Fedora when I have some free time around…

  13. >Doesn’t Ruby already fill that niche that Perl6 wants to fill?

    Hmmm…you know, I think you might be on to something there…

  14. esr seems skeptical about there ever being a perl6: well the last year has seen a lot of activity. Pugs is a usable product now, to people who like to play with languages. It looks much more like a train that’s going to reach a destination now than it did before pugs came along. I won’t play at guessing when it will all be done, but I will hazard a guess that macro design is the last sticking point in the language design.

    Shenpen: perl6 & ruby? Well, semantically they’re similar sorts of languages, which is to say they are rather like scheme. But perl6 will be a perl and ruby really isn’t. There’s two things in particular that make perl6 a perl: firstly one of the core constraints on the language is having a canonical perl5 to perl6 translator, and secondly what is now implemented for pattern matching (what used to be regular expressions and are now called rules) is very sophisticated, and does much more than ruby’s re.s.

  15. Shenpen,

    True, Ubuntu has issues dealing with proprietary formats, notably WMV and Quicktime; luckily for us Flash video (Which Ubuntu deals with just fine) is becoming more popular (Youtube, Google Video). I’m not sure the problem is with Ubuntu in particular, however; it seems to be standard for Linux distributions to try and avoid the not-quite-legal MPlayer plugins. MPEG files are handled just fine, I think, and I haven’t seen anyone distribute a RealMedia file in years. As for Skype, I have it installed system-wide, but for most people manually installing from the statically linked binaries will work (It won’t be pretty, of course; ideally you’ll want to install Kubuntu or at least Qt and use the dynamically linked vinaries.)

    Ubuntu’s advantages are mostly that it identifies with hacker ethics, that it’s cheap, and that it’s easy to install and configure, and that it has generally recent software packages.

  16. From what I’ve read of Perl 6 it sounds like it’ll be more lisp-like than Ruby. Full-blown macros and all that. And I’m looking forward to the built-in support for LR parsing.

  17. Charles & Daniel:

    what you wrote about Perl6 sounds really exciting. But there is something I don’t quite understand: Perl’s defining feature is the rich, DWIMmer syntax. LISP’s defining feature is that lack of syntax, thereby allowing you to rewrite the language – or, more correctly, to write A language, as LISP is not really a language in the ordinary sense – for your needs. How can this two be put together? In the case of Ruby, LISP-like language rewritings are made possible by 1) deeply the extending the concept of OO – classes being instances of class Class, therefore classes created in a way similar to higher order functions in functional programming, code blocks (lambdas) being instances of class Proc etc. 2) and heavily relying on programming conventions thereby abandoning the TIMTOWTDI concept – f.e. “print” being able to print any object that has a to_s method so it is a good idea for your classes to have it etc.

  18. /* 1) deeply the extending the concept of OO – classes being instances of class Class,
    */

    I’m not sure this helps make something like Lisp, but Perl treats all objects as being subclasses of UNIVERSAL.

    /* code blocks (lambdas) being instances of class Proc etc.
    */

    Perl has anonymous subs, which can be tied to references, and which sound a lot like lambdas to me. Especially given the eval command, so your program can write an arbitrary string, and pass it to an anonymous sub which will eval it.

    “Programming in Perl” also makes a big deal about Perl 5 having closures.

    /* 2) and heavily relying on programming conventions thereby abandoning the TIMTOWTDI concept – f.e. “print” being able to print any object that has a to_s method so it is a good idea for your classes to have it etc.
    */

    Perl 5’s object system is nothing but a set of programming conventions. Now, I have to grant you the ability to print any object with a to_s method sounds pretty cool. Kind of reminds me of C++’s ability to stream any object that overloads operator ostream&

  19. “I’m not sure this helps make something like Lisp, but Perl treats all objects as being subclasses of UNIVERSAL.”

    Objects (instances) or classes?

    “Perl has anonymous subs, which can be tied to references, and which sound a lot like lambdas to me. Especially given the eval command, so your program can write an arbitrary string, and pass it to an anonymous sub which will eval it.”

    All dynamic languages have the eval – but having to use it to have closures somewhat yucky to me. I think the eval is always a kinda last resort – it might be a hell to maintain, especially in a team.

    “Now, I have to grant you the ability to print any object with a to_s method sounds pretty cool. Kind of reminds me of C++’s ability to stream any object that overloads operator ostream&”

    Is there a clearer idea to do that? I think a convention is clearer than having to resort to complicated built-in features in the interpreter, isn’t it?

  20. Unfortunately, half of my comment was eaten up when I tried to submit it. The rest of the comment said something along the lines of:

    Languages borrow good ideas from each other all the time. I don’t pick a language because it has one good idea, I pick languages that have several good ideas that work well together. Right now I’m looking at OCaml, but based on this thread, I think I’ll take another look at Ruby. But if I want a Lispy language, I’ll use Lisp (or Scheme).

    Now:

    /* [Me] Perl treats all objects as being subclasses of UNIVERSAL.”

    [Shenpen] Objects (instances) or classes?
    */

    You’re right. Perl trats classes as subclasses of UNIVERSAL. Normally I’m against this kind of thing anyway, but given that many people seem to not know Perl has OOP, it sounded like something to bring up.

    /* All dynamic languages have the eval – but having to use it to have closures somewhat yucky to me.
    */

    Actually, closures don’t need eval. They’re described in “Programming Perl” as simply being a certain kind of lexically scoped object. After all “closures are a poor man’s object” (http://www.kimbly.com/blog/000063.html ).

    Lambdas don’t *require* eval, but I believe eval makes them more versatile.

    /* I think the eval is always a kinda last resort – it might be a hell to maintain, especially in a team.
    */

    Generally speaking, you’re correct. I don’t know about other languages, but Perl also uses eval as a kind of catch statement, and in those cases there is no maintenance problem. But eval for the kind of thing I was referring to, yes, hard to maintain, debug and test all the potential code paths that can be generated, and the code paths of the generating code.

  21. I’d put C# back on the evil languages list and add Java too. Java and C# are both clones of that infamous bag on the side of C, with all the narsty bits swept under the rug (but likely to peek out from time to time).

    For beginning hackers I recommend Scheme and/or Smalltalk. Both languages are easy to get started with, provide instantaneous feedback, have little to no syntax and provide a relatively clean and simple abstraction or model of the machine.

    Heck, I’m beginning to think maybe MIXAL was the Right Thing. It helps drive home the point that the computer is a machine with a CPU, memory, and stored program architecture; it is not what the layers of abstractions and metaphors that have been placed on top say it is. Someone who is just getting started needs to be reminded of that; and too many of today’s younger generation of hackers have grown up without the benefit of having had an 8-bit, Z80- or 6502-based machine to play with where writing almost to the bare metal was not only feasible, but fun.

  22. How about including ksh (as in ksh93, not ksh88)? Arguably it is just as powerful as Perl 5, and with a
    more readable syntax. Especially now that it’s no longer proprietary and more Linux distros are including
    ksh93 ;-)

  23. well its really amazing to knw how dumb u can get becoming hackers, first ur sooo time wasting, secong a big fucking jerks and third mr pro hacker if ur tht good here take my email franger100@hotmail.com nybody tht wants to hack me feel free nd show me wat u can do :) ( nybody tht does tht will be congratuated and well we living rest of his life in jail) austa lavista fuckers……. or lets say hackers loooooooooooool :P:P cioa :D:D

  24. In ‘snake’, we have yet another illiterate dimwit without a clue as to what real hackers are like. Pretty funny that he accuses other people of stupidity and can’t spell worth a damn.

  25. Mono is out of beta, so what? Does it support C# 2.0? With mono you are left without generic types, without anonymous methods (i.e. closures). You are basically stuck with outdated language version.
    Considering the rate at which Microsoft is adding new features to the language, Mono will always stay behind.
    I wonder, did Microsoft help you in any way with this removal?

Leave a comment

Your email address will not be published. Required fields are marked *