

Ask HN: Advice for a fledgling hacker? - wihon

_Hacking For Dummies_<p>OK. I'm pretty new around here.<p>I've been scouting HN for a few months as a passive user, and I've seen a lot of interesting stuff. You guys seem like you've got a pretty solid community going on. A good number of the questions that get posted are answered in real depth, and most of the links are of a good quality - and are of interest to a newbie like myself.<p>I've decided that I'd like to join up and get more involved in the world of hacking. Plus, I plan to post some interesting stuff. :)<p>(I've also signed up at reddit, but I don't necessarily expect to get good answers to questions. Once you cut all the crap out of your front page and post to specific subreddits, it gets better, but there's still a lot of pointless commenting and posting going on.)<p>I'm currently a science undergrad. I've got HTML and CSS nailed - I started off with the easy stuff - and now I'm getting pretty good at hacking about with JS thats <i>almost</i> what I want, but not quite. Hence the messing around.<p>So far I've had some advice from a certain friendly duck, who told me about the importance of knowing how to write good algorithms.<p>Have you guys got any other advice for a newbie programmer? For example, what programming language would you recommend I started with? And do you have any ideas about how to get a foot in the door of the hacking world (like good experience and making contacts)?<p>Even the most general and obvious stuff is much appreciated - as, more likely than not, it won't be obvious to me!<p>Thanks very much! :)<p>- Wihon
======
davidw
* Get involved with open source.

* Ruby and Python are good languages that you can do a lot with.

* Eventually, knowing some C would be a good idea.

* Run Linux as your desktop.

~~~
wihon
Thanks!

> * Get involved with open source.

Say, by helping improve the code of open source apps, etc?

And if you had to choose between directing my attention towards Ruby or
Python...?

I'm currently in desperate need of a new laptop. Can you recommend any basic
requirements for programming? I have a rough idea - something along the lines
of lots of RAM and not much else - but getting it from the horses mouth (no
offense (: ) would be ideal.

Thanks again!

~~~
gaius
The Ruby vs Python (vs any other language) question is easy for a newbie: what
do the people near you (personally or professionally) use most? Then you will
have access to advice, sample code, relevant documentation etc. If you strike
off on your own it's no less fun, but it will take longer for you to get the
point at which you can do something "useful".

You say you're studying science: perhaps NumPy or Sage
(<http://www.sagemath.org/>) would be useful? (I don't know what the Ruby
equivalents of these are or if they even have them).

The same is true for your OS - if the people around you are using OSX (for
example) then you should too. Make an actual "decision" when you identify what
it is that your current choice doesn't do that some other OS would do. For now
the availability of help if you need it outweighs everything else.

~~~
wihon
I'm all on my lonesome atm, so all these choices are mine. The college IT guy
at my university (he's just completed a PhD in quantum computing - and he's
been forced to work as the maintenance guy because of the recession, poor guy)
works with linux, and I imagine I'll be able to ask him for help and tips. So
linux it is! Cost is also a consideration, and while Macs aren't bad value for
money (<http://bit.ly/3SGXeJ>), but they're still expensive. So linux suits me
fine. :)

I think I'll go with Ruby too. I had a look around both sites (Ruby's and
Python's), and decided superficially that I liked Ruby better, as I've nothing
else to go on. Plus, Ruby's online trial thingy (<http://tryruby.org/>) is
pretty cool. :)

As far as programming for science goes, I'm not sure tbh. The main program I
use at uni is ChemBioOffice (by Cambridgesoft), but I'm not sure what that's
programmed in. Any ideas?

Can you recommend any particularly good ways of learning a language? There
seems to be some debate over rote learning, then programming vs. practical
learning. Any good tutorials etc that you know of?

Thanks to both of you!

~~~
gaius
Yep, so Linux is the right choice for you based on your immediate environment
(but there was no way for the first poster to know that :-) )

No idea about that package, but there is BioPython (<http://biopython.org>) so
that's a possibility.

My usual advice for learning a language is to get the "plumbing" first. You
don't even need to understand exactly what's happening at this stage, but
learn to say parse command line arguments, read and write a disk file, connect
to a database, open or listen on a socket, that sort of thing. You can just
cut and paste code to do this at this stage. This gives you a framework for
"doing stuff". Then it's just a matter of identifying a problem and gradually
working your way towards a solution. E.g. if you wanted to read a file, do
some computation, then store the result, you could concentrate on the
interesting part. You'll learn how the plumbing _actually_ works by osmosis as
you go along.

If I could give some advice to my younger self, and he was programming in a
vaccuum, I'd have said start with ML.

~~~
wihon
I know, literally, nothing about ML. Why's it better for a beginner? Can you
recommend any implementations in particular?

davidw above mentioned getting involved with open source - have you got any
suggestions for how to get stuck in?

Thanks! :)

P.S. Do you think it's necessary to have a presence on the web, i.e. through a
blog, in order to make connections with other kindly programmers? I'm also
thinking that as I'm starting from scratch, I could record my progress and
potentially help other baby hackers.

~~~
gaius
There're plenty of books, e.g. <http://www.ccs.neu.edu/home/matthias/BTML/> is
very good. As a working professional with 15 years experience who has only
gotten into strong inferred typing relatively recently I consider it a
godsend; I wish I'd known about it from day 1.

Most of the popular languages have a beginners mailing list, so just join
that, ask questions if you're stuck, answer questions as you learn more. To
"get involved" in open source, solve one of your own problems, tidy up the
code, upload it to GitHub or wherever and announce it on the list.

~~~
wihon
Thanks again for all the tips! Much appreciated. :)

