Hey, Shan, this is for you ;)

Shan Reddy commented on How I Learned Linux:

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

Thanks for your comment, Shan! You brought up a few things that I wanted to discuss not only with you, but with others in your situation.

Programming can be really tough at first glance. It depends on how you were introduced to it. I started off with HTML and CSS when I was 13 (not counting my RPG Maker XP experiments a year before that) and I think that helped make other languages seem not so intimidating. HTML is kind of the gateway drug to programming, haha.

In your case, I’d suggest that Java hasn’t made it any easier on you. Java is not a great first language. Java isn’t a spectacular language anyway; it can be very useful, and sometimes it’s the right tool for the job, but it’s not the first tool that a programmer with a varied language skill set will reach for. Python is cleanly designed, easy to read, and won’t give you fifty lines of error messages because you forgot a semicolon.

(Also, contrary to popular opinion, starting with a more difficult language is not necessarily going to make you a better programmer. It may just make you a more frustrated programmer. In other words–don’t start off with C or Lisp either, even if knowing those later on *will* make you a better programmer.)

Furthermore, you expect learning Linux to be a long, hard slog because you started off with Java and that was a long, hard slog. This is likely to MAKE learning Linux a long, hard slog. And that doesn’t help you! Don’t be so pessimistic. Programming is fun!

So, learn HTML5 and CSS, and tinker with it a while. That should keep you busy for about, oh, three weeks. Maybe more, maybe less. Then head over to learn Python. That’ll take you… mm, six weeks maybe. Maybe more, more likely less. Don’t let yourself get bored with either of these tasks–if you’re bored, then either make it interesting or move on, because if you’re bored, you aren’t working at your full efficiency.

(Bored || frustrated || mentally tired) programmers == ineffective programmers.

THEN come back to Java. Wow, it’s a lot easier, right?

It’s like this. Imagine a guy walking down a path. He comes across a boulder in the middle of the path, and thinks, “I should move this boulder so I can move on.” He could go around the boulder, but he sort of wants to try to move it because he thinks moving the boulder will make him stronger and thus be a better option than going around. So he shoves and pushes and presses all his weight and muscle against it for hours, until his muscles are extremely sore and he is hungry, thirsty and exhausted. He gives up for the night and goes home.

From here, the story splits into two parallel universes.

In Universe 1, the man goes back the next day. He pushes and pushes the boulder until, like the previous night, he’s sore and exhausted.

In Universe 1a, he gives up and goes home to watch TV and drink beer. He’s pretty happy about that but he never got to go on his hike. This is the more likely outcome from Universe 1, really.

In Universe 1b, he doesn’t give up. He goes back to the boulder every day, and while he gets stronger and stronger from trying to move it, he’s started to hate going out onto the path to push against it. One day he goes out and is finally strong enough to move the boulder, but is too fed up with just the sight of his path that he goes home to watch TV and drink beer anyway. Besides, the seasons [current technology] have changed and the mountain the path led up is five feet deep in snow.

In Universe 2, he just goes around the boulder… and finds a pickaxe. He uses it to get rid of the boulder and then goes on his hike. The hike is long and in places difficult, but at the end, he is as strong as he would have been from trying to push the boulder, and he’s enjoyed his time out in the fresh air.

You see where I’m going with this?

Yet there are a lot of teachers (and old programmers! and competenprogrammers!) who will insist that the best way to get the metaphorical boulder out of your way is to push and push until you hate the path, even if there’s a more efficient way to move it and a more enjoyable way to become strong.

Anyway, I’ve heard a lot of people struggle with this problem, so I wanted to write about it.

The bottom line is that Linux, and programming in general, won’t be as hard for you as you think it is as long as you use the right tools in the right order.

If you get told that the ONLY way to move a boulder is with a pickaxe, though, but it doesn’t work for you, try a crowbar or something instead. Not everyone’s creative brain works the same way; if they did, we’d have a billion copies of Mona Lisa and no “Starry Night”s or “The Scream”s or “Persistence of Memory”s. And sometimes you just need a break from trying a certain approach.

So, even as I give you advice to learn HTML5/CSS and Python (a set of introductory but objectively useful tools which has indeed worked for many programmers), I warn you that it may not be the right beginner’s set for you. But be warned away from anything that’s specifically meant as a teaching tool; these generally aren’t worth learning because you can’t use them for anything bigger than a 50-line toy program.

Anyway, get yourself a VirtualBox download and set up a Linux VM. I’ll warn you that BASH scripting is annoying to work with, but you should learn it at some point. You know where to go for links on learning the command line and stuff, of course 😉

Oh, and if you ever make a blog to share what you learn, send along the URL and I’ll link you on here.

Happy hacking!