How I Learned Linux

[Update: A bunch of you are here because Eric S. Raymond is awesome and nice. Thanks, ESR!]

And, by extension, how you can.

I’ll start this off with a disclaimer. I am not a Linux expert by any means–in fact, I’m not even fluent, and don’t use it as my main operating system. However, if I sit down in front of a Linux computer to do some work, I’m perfectly comfortable with using it. I can use the command line comfortably, I know what repositories are for and not to download just whatever interesting-looking tarball off the Internet (unless I’m doing so to tinker with it), I can do a tiny bit of shell scripting, and I can even compile or interpret my own programs (written in less annoying languages) via the command line.

Most people are not there. It took me a long time to get there; I remember being interested in Linux long before I figured out even how to learn how to use it.

The boost that let me get into the Linux world was discovering virtual machines, which are great for letting you play with different distros, screw things up, delete everything if you want/need to, start over–all sort of nonsense. It’s worth noting that Linux systems won’t be as reliable on a VM because of funky stuff with virtual hardware and guest additions and that kind of thing. The tutorial I wrote earlier can help with that. (If you’re used to Windows, you won’t notice anything strange about their reliability.)

You don’t need to take a formal class on Linux. In fact, if you really want to learn Linux, taking a class will feel painfully slow for you and will probably try to teach you silly stuff like how to get X Windows [*] to run on a network, which will be boring and frustrating. You can learn much of what you would in a Linux class by tinkering–although, if you’re focused on computer networking rather than programming, you might like taking a class.

On whether it’s right to write intro posts like this

Hackerdom seems to contain a large contingent which considers that anyone who can’t find the information in the rest of this post for themselves isn’t worth helping, because they won’t have the right spirit or work ethic. I disagree. It’s entirely possible to not even know what to type into Google in order to start solving your problem, and this doesn’t necessarily imply anything about the person who is confused. Whether they’ll admit it or not, many hackers will have been similarly helped by being around other hackers who at least know what program their juniors are looking for but don’t know exists. This is what Linux User Groups are for–but, again, most people don’t know those exist, either.

I can understand not wanting to spoon-feed people all the way, and someone with the true hacker spirit wouldn’t want to be spoon-fed anyway because it’s too much fun to do your own research, since you run into lots of other interesting knowledge along the way. But I don’t consider it a detriment to the Linux world to give people a boost in, so here we go: how to get comfortable with Linux.

No, I’m not going to describe what everything does. This post would become ridiculously long and that IS something you can Google for yourself. I will, however, provide you with good links and descriptions where they’re necessary. 

1. Set up your first virtual machine (VM).

i. Download VirtualBox (opens in new tab)

ii. Download a torrent client–a reader suggested deluge or transmission; I haven’t used them myself. I use uTorrent, but as I don’t know much about P2P systems, I pretty much picked the first one I found. As our commenter pointed out, uTorrent has certain questionable downsides. Perhaps when I have time, I’ll do some research about the different torrent clients and do a post about it.

Also, learn how to set it up. If stuff downloads, but only uploads at a painful snail’s pace, you probably have it set up wrong (although you might just have a less popular distro).

iii. Torrent at least one Linux .iso file. If given the option, choose 32-bit.

Distros (distributions) you might want to play with include Xubuntu (which is pretty easy to use and has a decent interface), Debian with GNOME (which is my favorite), Fedora (which is a little different! but maybe you’ll like it), and Mint (which, depending on which one you get, may be based off of either Ubuntu or Debian–it’s kind of a nice middle ground between them and very popular). I suggest making VMs of any distro you’re interested in, and playing with them, rather than relying on other people’s opinions about which you should use. Those posts can be fun to read, but not very helpful in the long run.

Distros you should save for a point when you know what you’re doing better and want to explore other things Linux can do include, but are not limited to, Puppy Linux and Kali Linux. Puppy is meant for running on tiny systems and can be run on computers which don’t even have a hard drive (it can run on just RAM), and Kali is meant for digital security testing. Please don’t do anything stupid with Kali.

iv. Set up your VM.

There are a lot of how-tos on this subject, including my own, which I just updated; I really suggest that you get into the habit now of checking more than one to see how they’re different and how one might be better than the other. My own included a few weird voodoo/cargo-cult programming things that were in there because they’d made something work for arcane reasons when really it was something else that was wrong–which is why it just got updated, and why you should always look at more than one tutorial. Keep the links of good tutorials; you’ll meet other newbies who need them.

2. Learn the command line.

There are numerous excellent tutorials on this. I don’t need or want to rewrite them, but I will link to them.

Zed A. Shaw’s tutorial at the end of Learn Python the Hard Way. Start with this one. Keep the link; you can learn Python at that web site, the tutorials are really good. Don’t be dissuaded by the name, it’s easier than learning from the dispassionate bureaucrats writing Microsoft programming manuals any day.

How-To Geek (Will teach you how to install things, very important–although if you’re using Fedora or a derivative, you can’t use apt-get. Just replace “apt-get” with “yum” in any of the commands mentioned and you should be fine.)

If you’re still confused about apt-get, look here for Ubuntu’s how-to.

LinuxCommand.org — I don’t remember reading this all the way through, but I had it bookmarked, so probably it answered some question or other. Come back to it if you have questions.

3. Don’t break your system (unintentionally).

Sometimes you intentionally pound on stuff to see what breaks it. However, if something breaks and you have no idea what you did, that’s a glaring neon sign that you haven’t learned enough. It helps to know what kind of stuff will break your system and why before you get to that point, though.

Here’s a link I found with good advice. It says Debian, but the points it makes are not Debian-specific.

Don’t Break Debian

4. Know where to go for help.

Your first resource when you don’t know how something works should be this really helpful command that you NEED to know. It’s called “man”. No, there isn’t a “woman” command. “man” is short for “manual.”

Typing “man ls” into the Terminal will show you everything you could ever want to know about the ls command, including different formatting options like -a and -l. The utility of those flags may not seem like much, until you write a shell script that needs to use ls and have the output in a reliable format, so man pages can be your best friend.

Man pages can also be found on the Internet.

Google is your other best friend. Learn how to use it, please; it’ll save everyone’s time, including yours, in the long run.

However, if you’ve spent more than 30 minutes to an hour (depending on the complexity/obscurity of your problem) trying to find answers, it’s probably time to go to a human. Preferably, one who can program.

Your distro will have its own forum. If you’re trying out different distros, make sure you go to the right forum for the distro that has the problem, even if the bug isn’t distro-specific.

There are also more general Linux forums, like this one which even has a newbie section.

5. Learn the secret handshake.

I was going to make a joke about this to finish off the article. Then I realized there actually is kind of a secret handshake, if you want to be a hacker and not just become competent with Linux. Consider this optional but fun; it may help you stick with Linux instead of giving up, so visit these links if you get bored.

The Jargon File

How to Become a Hacker

How to Learn Hacking

This collection of links should set you in good stead to becoming competent with Linux. If, given this boost, you can’t get any further or find anything interesting to do with what you’ve learned… well, that’s the point where we’d be spoon-feeding you. But I think it’d be hard to get through all this without sort of learning the attitude and skills you’d need to keep going, if you wanted. If you weren’t cut out for this sort of hobby, you probably wouldn’t have had the persistence or interest to make it through–you would have given up halfway through this post.

Good luck, and happy hacking!

*X Windows is an older remote access program, and a window system. It used to be a reasonably good program, I’ve heard, but it’s not a good option now. It would allow you to virtualize one computer’s GUI on another computer. But there are inherent security risks in programs that transfer GUIs over a network–at least, so far. If there were a startup that wanted to improve that, I bet there’s a huge market for a secure remote access system.

Our teacher didn’t like it–she’s a firm believer in using SSH and the command line for this sort of thing, and I agree until someone comes up with a better solution–and I don’t think the textbook writer liked it either because he put it at the very end of the chapter, after all the other options.

 

SSH is faster anyway.

36 thoughts on “How I Learned Linux

  1. Great post! First of all you write in a clean and concise manner which made this a pleasure to read.
    Second you “leave no stone unturned” so to say, many other people would not bother including a section about whether its right to write posts of this nature.
    Really great information and advice as a whole, I loved how you sprinkled the whole artical with helpful links. That is something that I should make an effort to do myself, It really shows how much that you put into the post. I just noticed a couple things that you might want to tweak.
    You reccomend the use of utorrent, now utorrent is incredibly popular and I myself used it a couple years ago. What you might not know however is that it also bundles in a bitcoin miner that uses your CPU to mine bitcoins while you use the program. This slows down both your downloads and your computer as a whole.
    I’d recommend deluge or transmission for alternatives. You might want to look into that…I’d love to read a post of yours on the ethics of software bundling and botnets.
    Great post and keep it up! I will be reading

    Like

    • Hello, and thanks for your comment! I’ve updated the post to include your suggestion.

      I’d be interested to know; where are you in the learning process? Are you a long-term hacker, or a neophyte who found this immediately helpful, or somewhere in between? It’s important to me that articles of this nature are at least reasonably accessible to the “uninitiated,” so to speak.

      Furthermore, you mentioned that you wanted to imitate my efforts–does this mean you have a blog of your own? If so, would you be interested in swapping links?

      Also, I like your chosen avatar. Pickle Inspector rocks.

      Like

      • Impressive! you got the reference to problem sleuth. Yes I have a blog but it is nowhere near as nice as yours, I actually just started posting on it again so there is not much in the way of content. As for my stage in the journey I would be somewhere in between. The world of technology is wide and I have little experience with hacking. I do have a lot of experience with Linux however and have been using it exclusively for several years now. As far as programming and the rest goes I am a novice, I’ve played with python and hope to learn c but that is still on the horizon. Thanks for the reply!

        Like

      • Ah, I’d say you’re about on my level, then!

        I know a few more languages because of college classes, but I don’t feel like I really know them because it’s been so long since I programmed in them–and I have so little experience working with them outside the padded cell of Visual Studio, Microsoft’s IDE. I feel fairly solid on Python, but really, it’s the OO stuff that’s tripping me up right now. So, I probably have more programming experience, but you probably have more Linux experience. Psh, I’m a teenager, don’t act like I’m some kind of hacker genius.

        Both Python and C have available tutorials online by Zed Shaw, which are great if you aren’t the sort to get uppity about being a little bit talked down to. (I’m a girl in the tech field, so it’s not like that’s anything new for me… :P) The C tutorial is still in beta, though, last I checked. Perhaps it’ll be all polished up by the time you’re ready for it.

        Liked by 1 person

      • Thanks for all the advice, and don’t be so modest and down on yourself! I think it’s really amazing the amount that you have learned. I actually ordered a c programming book from amazon the other day. It’s amazing how cheaply you can buy used books. I myself am just a teen and in my eyes I’m still far from an expert at Linux. One day maybe! I’ll have to check out those C tutorials by Zed Shaw. Maybe we can work on a project one day.

        Like

      • I would really like that! That would certainly settle the question of how much cred we each have, if nothing else. 😛 Some hackers would even say it’s the only way to do so. http://www.paulgraham.com/gh.html

        In fact, I’ve just started a project written in Python that I might want help with at a nebulous future point; I think I’d like to be a little more solid on what I’m trying to do before I wrap anyone else up in my confusion, though. I’ve spent the past year or so reading a lot of essays (like the one I linked) about programming in addition to trying to learn it myself, and one thing I’ve learned is that it’s not a terribly good idea to try to write software completely on your own, that the end product is nearly always better if you have help. Maybe once I have a rough testable version to tinker with, or at least the structure for one, I could bounce it off you. I think we’d both learn something.

        I’d really like to stay in touch; I have surprisingly few people to talk shop with, and even fewer who are interested in this particular corner of the shop. You’re working on really similar stuff to what I’m working on, so maybe we can help each other out! Finding people like that is one of the main reasons I made this blog.

        Do you mind if I email you? I can see the email connected to your Gravatar account (probably the one you used to make your blog) because I’m the admin, so you don’t have to risk feeding the spambots.

        Liked by 1 person

  2. Nice post! You definitely have the *nix in you. Though, you may want to re-check the purpose of X11 if you ever want to switch away completely from the MS proprietary world. 5 years of no-windows makes a great start. Keep it up!

    Like

    • I have no idea what X11 is. Care to elaborate?

      Man, I can’t imagine going back to Windows. *shudder* I keep one VM with Win7 on it, for school stuff that requires Windows software; that’s as much Windows as I’ll tolerate.

      Like

      • X11 is the old name for the “windowing” system in Unix-like operating systems – otherwise referred to as X Windows. The project has been forked and lives on as Xorg, which is the default window system for most Linux distributions with a GUI desktop.

        Yes, it can be used over a network – the part that shows the desktop is the “X Server”, and the programs that draw windows can be considered clients. You can shell into a machine with a graphical program on it, and have it draw it’s GUI on your local X server. You can even install an X server on Windows and shell into a Linux box and have the GUI show up locally.

        This was the most common usage when computers were big and expensive – you’d have a terminal that implemented an X server, and the big mainframe in the middle would do all the heavy lifting. These days, the majority of people running an X server never use it’s network transparency, they’re running programs on the same machine as the display.

        It still persists for reasons of legacy compatibility. Although there is a movement to get away from it now – the architectural considerations that make it “network transparent” cause a lot of difficulty and inefficiency from the POV of an install base that primarily wants to run local apps on desktops with much more powerful hardware than most of those old mainframes, that want slick window transitions and other forms of shiny. Projects like Wayland and Mir seek to remake the display server for the desktop age.

        Liked by 1 person

      • Thanks for the elaboration! Yeah, I don’t know about using GUI stuff over a network in general. As I understand it, it’s a lot easier to protect a plain old SSH session, so that should be used whenever possible… which is a lot more often than many people would like to admit.

        However, it also looks like we’ve gone from mainframes, on to micros, and now that virtualization software is becoming more prevalent we may be back to some places using mainframes again. Not sure how widespread that’ll be, but a few networking guys I know are really excited about it. That’s not really my turf (networking), so I can’t authoritatively comment on it. But it would certainly be a bad idea to try to reuse old tech from back when mainframes were popular last time. That was long ago enough that those systems are mostly gone, and it’d do more harm than good to try to pander to them.

        Backward compatibility has a real price. C++ is probably the major example, but basically anything from Microsoft has been afflicted by it somehow. It’s one reason I want to find the person who made my .NET programming class required for my degree and shake them around the shoulders. ASP is bletcherous. (One reason. I won’t get into the others.)

        I know, I’m probably not saying anything new here. Networking isn’t my turf, again; I was largely relaying opinions from a teacher I respect as a good source of info. Thanks for commenting!

        Like

  3. I’ve landed here from Steve’s page. Great post. It was so neat, helpful, clean like a crystal. I’ve bookmarked all the links which you’ve included. That’s such a great help. Oh yeah! your blog as well and I’d be following regularly to check the updates and read more. Your writing skills are excellent. Appreciate it. Wish someday I could write as well and share my info all that I learn with the rest of the world like you.

    I liked the part where you said that someone if they weren’t interested or not confident they could do it would not have read through so much. I was so happy to read that. ‘Cause for me my programming journey was very steep but once I picked up I could find the intellect in me moving much faster. And now I’m looking to learn hacking and that’s how I landed on Steve’s page and here finally from there. I’m currently on Windows but after reading this article and understanding the importance from Steve’s I’m determined to learn the whole of Linux no matter how hard/long it takes. And the other languages which Steve has mentioned in his article. I’m currently programming in Java but learning more web technologies as well.

    i look forward to more great articles from you and hope to stay in touch. Cheers!!!

    Like

  4. I hope I am not too late to the game by commenting now. I just marathoned your blog and found it very informative and inspiring. I am a self taught programmer with three years of university level instruction behind me and I could really relate to many of the subjects you talk about.
    Linux has been a passion of mine for quite some time now and I am working on a project for school that I am hoping will be adopted and supported by the open source community. I think your work here is great and you definitely have the right motivation and drive to succeed.
    If you ever need a pair of eyes on a project or someone to work on something with please let me know!

    Like

    • Posts don’t come with a time limit! Especially not this one. It’ll probably be useful for another year (?) before I have to release Edition 2 or something.

      I’m glad you like the blog! Sometimes I wonder if all this chatter about my personal projects is actually interesting to anyone else, or if I should start focusing on releasing how-tos and essays more. Except that when I write about a problem I’m struggling with, I usually come up with the solution; if not, at least I think I have for a few minutes. 😉

      What’s your project about?

      Like

      • In my opinion the commentary is really important and something sort of lacking in the industry. Sure we have opinion pieces and blogs about programming, but many of the ones I find are from experienced professional level people who have already made it where they want to be. Anyone can make a tutorial about a subject but I like how you highlight the common struggles of students and passionate techies as they pursue their goals. In doing so I feel you provide a reassurance and validity for those struggles as well as no small degree of hope in what can sometimes feel like an insurmountable effort. I can’t tell you how many times I read something on your blog and thought “Wow, I didn’t know other people thought that too!” I write a blog myself and I know just how difficult it can be to put things down and express them in a way that both relates to your audience and retains your original feelings about a subject.

        My project uses principles of machine learning to tailor lesson content material to individual characteristics. I wont clutter up your blog with links and unnecessary details but basically it will use data points gathered by the way students complete lessons to decide what types of content to give them in the next lesson. I may make a companion application for mobile platforms after I finsh the project just to get a bit of experience with that sdk as well. Is your project going to make it to market soon?

        Well this comment has gone on long enough. Verbose mode off. Keep up the great work and I hope to see more of it to come.

        Liked by 1 person

      • I know what you’re saying… new programmers read those professional blogs and go, “Wow, I’m incompetent,” and then they think they’re too unqualified to write anything themselves. (But you can’t stop me babbling, and I know from experience that if you’re genuinely unqualified, people just don’t pay attention, and it can be fun to write anyway. I expected that to be the case here, but it isn’t, and I’m pleased.) What they don’t understand is that they understand other newbies far better than the older programmers do, and there are a lot more newbies than pros because the field is expanding so much. The older programmers can’t relate, either because things were drastically different when they learned and/or their knowledge is so ingrained that they have a hard time remembering that other people don’t share it, let alone what they were like when they didn’t.

        But programming is really, really hard to learn. Oh, you can learn syntax and logic and basics, those are easy. But structure, design, construction, and all the things you can do with a language… You can’t learn those except by doing. And the doing is hard, because you always feel like you’re missing something, some core piece of learning that you need before you’ll finally “get it”. Well, here’s a spoiler: it isn’t in any book, and nobody’s going to teach you because they don’t know how. We’re probably all after the same sort of piece of understanding, and it’s probably something that we don’t have a word for, and nobody knows how to teach it except to point you at GitHub and hope. (Most people don’t even know that much.)

        Sometimes you can recognize little skills developing. I came across a piece of code in a textbook the other day; immediately hated it. Not just because it was long and I had to type it in, although that was part of it. It was a piece of C# code that spelled out different database entries with all their fields and so on. You had to list the fields’ names and everything. It looked like C#’s version of a really long Python dict and everything was hardcoded in. I’m cringing just thinking about it… By the time I’d finished typing it out, I had a more elegant solution constructed in my head, one that was scalable and user-friendly and didn’t involve all the code duplication or hard-coding of the original. It wasn’t a difficult design, and I found myself resenting the ebook author’s laziness, as a good design would have been quicker and less boring to type in.

        That project sounds ridiculously complicated, but potentially very useful! Kudos if you can pull it off. Glad I’m not doing it.

        Dev has stalled since I’m sorting out my classes. I miss it greatly. Raspberry Signage, though, is strolling along, as that is one of my official classes now. My mom even paid for it today, although I thought we shouldn’t have had to because if I weren’t conveniently there, they’d be paying someone else thirty dollars an hour at least to do the job I’ve been asking to do. (This project has also been referred to on this blog as the RPi Project, a name I’ve abandoned since the non-techies have gotten involved. “Raspberry Signage” sounds cuter and less intimidating, and easier to pronounce.)

        Long comments are a definite quality of this blog. Can you guess where it started? 😉

        Like

  5. I have always said that programming experience kind of ebbs and flows. You start off feeling like an absolute moron and it is a very humbling experience. Then somewhere along the line you learn a thing or two and your whole world opens up for a moment. The stars shine brighter than ever before and you feel like the power of the universe is yours to command. Then you try something else, meet someone more awesome than you, or read a blog about programming, or see a stackoverflow post and realize you know absolutely nothing. Again, you are humbled and the process starts all over again. I started learning programming about three years ago and I have consistently felt this over and over again throughout the process in both my academic endeavors and self study. I have learned to love the process and laugh at my rediculous notions of power before moving on.

    I think one of the issues is that the field almost requires you to have taught the concepts to another person or in your blog or workplace in order to prove mastery in some way. The issue with this is that many people simply are not very good teachers and so you get all manner of material that is wrong, less than optimal, and/or just horribly written. I agree with you and can completely relate to the feeling of being resentful of an author or publisher for that very reason.

    The project I am working on tenatively entitled Project AVLE (Adaptive Virtual Learning Environment) is not so much super complex as it is a hefty amount of work. Machine learning sounds really daunting and indeed it really can be if you go past the surface stuff, but with Python libraries like SKLearn it is simply understanding the principles that are going on under the hood and not really needing to know how to do the advanced statistics and calculus work by hand. Thank the maker for computational machinery eh!

    You certainly will have a nice group of projects to round out your resume if you get those finished. That is something I am currently struggling to do. Ambitious graduation projects requirements aside I need to have more to show for the years of learning I have been doing.

    Well I am powering down the wordsmith forge for now but I look forward to many more long winded comments in the future.

    Liked by 1 person

  6. Great post! I am one of the people who came here through the link on the ESR’s page. I liked too much the way you write and I added your blog to my list of resources and to my feed reader.
    Currently I’m using linux (fedora) as my main operating system, I switched from windows in the begginin of the year (I still have windows installed as dual-boot, but I use it only for gaming, when I have time…). Before, I was trying some distros through live CD, and the ones I liked most I installed in a little partition I had for testing.
    I would also like to recommend the guides available on ‘The Linux Documentation Project’, that always help me a lot.

    Note: Sorry if something is syntactically wrong. I’m learning English but my writing skills still pretty bad.

    Like

    • Hi! Your English is pretty good, actually, for a second language (or third or whatever). It sounds like you’re making good progress learning Linux. I’m glad you like the blog! Thanks for reading 🙂

      Liked by 1 person

  7. This was fantastic! I am also one of the many here because of a wonderful article by ESR. My entire life I have always been fascinated by the idea of programming, but to my chagrin have mostly just danced around it, never quite sitting down to discover the world that awaited me. Finally I made the decision to pull the trigger and just do it (far later in life than I would have liked, but now’s as good a time as any, right?).

    As someone who knows a little more than absolutely nothing (the “little more” due to yourself and ESR) it has been incredibly encouraging to read this post and being reinforced in feeling comfortable not having any knowledge yet, but possessing a great desire to simply obtain one more piece of information that I did not hold before. Currently I am sifting through your tutorial on setting up a VM and loading in Lubuntu. I must say that I am rather excited to begin this adventure that I hardly know the starting point of! In addition to this I have started the Codecademy tutorial on Python so I am hoping this will go hand-in-hand and help out by utilizing one another.

    Normally I am not one to leave a comment, but I wanted you to know that I (and I am certain so many others that have not left breadcrumbs) am so very grateful that you have decided to share your experiences with the rest of us. It has helped guide my first steps as well as provide some great encouragement and often that’s all most of us need. Thank you!

    P.S. Your style of writing is very enjoyable to read!

    Like

    • Aww, thanks! I’m glad it was so helpful to you.

      If you need any help setting up your VM, drop a line here on the blog and I’ll send you an email using the address you used to comment (unless you want to specify another). It’s the one using your full name, if you used some auto-login system or something and don’t remember.

      Curiosity and the desire to build things outstrip actual existing skill in terms of potential, in this field. That is, a curious newbie who wants to make silly name generators for his D&D games, and happens to go on to other stuff, has far more potential as a coder than the guy who learned to use a language well already, but is starting to wish he’d joined an Amish colony and become the local underwater basket-weaver instead.

      Anyway, remember me if you run into a roadblock. I don’t claim to be the authority on everything tech (anyone who does is pulling a fast one on you), but I’ll see if I can help.

      Like

      • Hahaha your analogies get me every time. That’s hilarious. Thank you very much for the offer! I was able to successfully get the VM set up and Lubuntu running thanks to your tutorial. I will definitely keep you in mind along the way though!

        I do not have any specific issues or questions as of yet, but just in general do you have any advice based on personal experience from when you first started coding? Things to do (or avoid doing) or perhaps something that you know now that you wish you had known when you first started?

        Feel free to use my email (the aforementioned being usable) to reply if you would prefer to respond there instead.

        Like

  8. hmmm I hope my comment is not too late, though you have already said no comment i s too late. I am landed on this page after reading Raymond’s How_to_become_a_hacker article. First of , like all the others, i really like your style of writing, putting things plain and as clear as possible. I also appreciate the time you have taken to share this vital info with some of us who madly need it. kudos!!

    I am also a newbie in programming, have been doing a bit of html and php (just the surface stuff, self thouht to reading ebooks and some blogs) and i have really developed interest in programming and will also want to learn hacking to help solve problems. After i read Raymond’s piece, i decided to come here and now I am very glad i did.

    Now, please i know you have already shared a lot – links to various helpful articles, but are there any other books you might recomment for someone like myself who knows nothing about computer science ( by the way i studied accounting at the university) yet has a VERY STRONG desire to learn programming ?

    thanks in advance

    Like

    • Ack! Sorry I’m late to the party. Life has picked up the little shoebox I live in and shaken it hard. I’m moving into my first apartment this week and everything’s been kind of bonkers.

      I would recommend Steve McConnell’s Code Complete. It’s been called the “Joy of Cooking” of software development, and it’ll give you roughly the same information you’d get by reading lots of technology blogs and best practice articles, which is how I got a lot of what I know. But the book is not only a faster format to acquire this information, it’s also more cohesive–you can refer to it when you want to explain something to someone else.

      I’d also recommend Learn Python the Hard Way by Zed A. Shaw. It’s available on the Internet, or in book or ebook form. Basically everyone likes Python! It’s got its limits in what you should use it for, but it’s considered a well-designed language for general application development, and open-sourcers are already trying to use it to make mobile apps. As for the writer–Shaw can be… uh… let’s say temperamental, so if he gets up in arms about something you might look into things before taking him too seriously, but his books are very solid. He also, like many writers in this field, can be condescending and has… a bit of an ego (even if he, like many other writers in this field, frequently claims otherwise).

      On a similar note, some people like this can be so obnoxious that it’s demoralizing for a newbie to read their writing. Just leave them be–sometimes their information isn’t worth the format it comes in. Similarly, not everyone who sounds impressive knows what they’re on about, and it’s really easy to sound impressive to an audience of non- or beginner programmers.

      For PHP, I’d recommend Murach’s PHP and MySQL, which is a good book that explains things well and isn’t too expensive. PHP, depending on who you ask, either “has fallen out of fashion” or “has always been horribly broken.” I haven’t used it enough to choose my side. JavaScript is more popular; it gets a lot of hate as well for poor design, but people still like it because it’s more fun and hacky and generally works.

      It’s up to you what you want to continue learning, but I wouldn’t worry about it too much. You’ll work with a dozen languages in your first <5 years of coding, probably, and eventually it gets super easy to pick them up. For instance, last semester I left about 90% of my PHP coursework until the last… mm, five days. But with insane and unholy rituals involving caffeine, sugar, and hours in which no one should be awake, I learned basic PHP in about four days and completed enough work to pass the class. (I don't recommend this option, but sometimes Sith Happens.) Don’t worry about your work being wasted. When you’re learning, I don’t think any of your work is wasted as long as you’re doing something new.

      All of the above are available from Amazon via the affiliate links in my Toys page, in case you want to get your books while making me some pocket change 🙂

      One more thing. When your code breaks (when, not if–everyone’s code breaks all the time), make sure you haven’t misspelled something or missed out a bracket or that sort of thing. I understand English may or may not be your first language, but in my experience, people who don’t write English syntax consistently will do the same thing to code, so just watch out for those kinds of errors. It doesn’t matter in a blog comment, but the computer won’t be able to make the general leaps of intuition that a human reading a message can. I’m sure you know this though. 🙂

      Like

  9. hey Rebekah awesome post made me sit here and read ur post and everyone else’s too I’m new and I’m disabled just want u and everyone to know I would love to have a good friend’s don’t have any 😦 but I’m want to learn how to but come cross this post I had to say awesome post really make me feel like I’m part of family hahahahaha really would u Rebekah to help me to guide me step to step crossing the finger’s especially need friend like u and people here on post just a suggestion??? I like chat to make friend’s hopefully hear from you!! I’m always on my computer but bad wifi signal had to use mobile hot spot on my phone to use my laptop ugh! pain the butt. well so far so good! Rebekah have a awesome day!

    Like

    • Hey Joel! Sorry it’s taken me so long to respond.

      My suggestion to you is to join an online programmer community like Dream In Code or Hashnode. You’ll meet lots of friends there who can answer all kinds of questions, and you won’t have to rely on me–I can’t always respond to people quickly because of other responsibilities I have.

      Making an account on one of those sites should help you find the community you need. It’s hard to learn to code alone! Other people can be a big help if you know where to look for them.

      Good luck, and happy hacking!

      Like

    • This advice may be outdated and I probably need to update the post. It’s there because I kept running into a weird bug on my VMs with 64-bit. (The computer I used is quite old now.)

      If you barge up against a weird black-screen problem with 64-bit, try swapping it out, but my current advice would be to try 64 first provided you’re giving your VM >4GB of RAM.

      Thanks for letting me know this needs an update.

      Like

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.