As a beginning guitarist/musician, I would often browse sites such as ibreathemusic.com and vai.com in an attempt to further my knowledge and perhaps meet some like-minded person who perhaps had slightly more experience than I, but not enough to be considered an expert, or even an intermediate musician.

My first inclination would be to head straight to the beginners section of the forum and read everything, offer my thanks for a benevolent master musician's help, or perhaps offer a small bit of my own wisdom, if I felt sufficiently confident that day. Occasionally, I would foray into the Music Theory section, where discussions on the merits of the Hungarian Minor scale or the proper voicing of an A13sus chord abounded. For the first couple of months, I would always leave that section with my head spinning. After a while, I would find a thread that I understood, and in my joy I would attempt to give my input, only to be politely patted on the head and told to go play with the beginners.

Years later (well only a couple, 3 years feels like a good chunk of my 17 year old life), I can comfortably enter that section and post with the best of them. I felt like being surrounded by that community helped me see where I was as a musician and what areas I desperately needed to improve upon, be it improvisation, music theory, technique, or ear training.

Being an avid technophile as well as a musician, I have always been drawn to programming. I got into it once when I was 13 and bought some For Dummies books on C++, XML, HTML, and one called beginning programming. Basically anything that sounded cool. Music pushed it the back of my mind for a while, and I promptly forgot about them.

Recently, after reading William Gibson's Neuromancer, half of the Dune series, and all of Alastair Reynold's novels (big fan, if you can tell), I've decided that I must get a Ph.D in computer science and become a master hacker(I do wish I had discovered this need earlier, and I would have taken a few more AP classes). It's been about four months since then, and I must have bookmarked at least 100 sites by now, ranging from stackoverflow to hacker news to zed shaw's blog. My language of choice is Python, though I did spend a fair amount of time on Perl and C++. I feel pretty confident in my abilities right now. I've done about 20 Project Euler problems in Python (just started a few days ago), and I can usually understand the source code of a medium sized Python program if you lock me in a room for a day with some Red Bull.

But here's my problem. I don't have anyone to identify with. Everyone seems to be an expert hacker already. So onto my questions:

  1. Are there any programming communities that cater to the beginner/intermediate programmer?

  2. Would joining an open source project be feasible, or is it too early?

  3. If possible, share your journey towards your rockstar ninja pirate coding guru status? I like the term 'expert hacker' better, but I've seen this term thrown around quite a bit recently, and I find it kind of funny.

Sorry for the life story, I'm just a lonely beginning programmer looking for some friends and guidance. I hope I didn't violate any rules or anything, as these types of questions seem to reside in a gray area.

6 accepted

My wife Anna recommends the tutor mailing list -- she's active there (I'm not, but then, she's the expert on teaching beginners, I'm more oriented to intermediate to advanced students;-).

Most open source projects will welcome you.

My life story's peculiar -- got a MS in EE 30 years ago, started designing chips, and systems around them; joined IBM Research to keep doing that; found out that, given the researcy environment, I had to also write some SW to let others use the cool research chips and systems we were doing -- eventually found myself not having designed any chips, and hardly any systems, for like 2-3 years, but being quite good at that "software" thingy, apparently;-).



Seriously, however, Stack Overflow is a great resource for beginners. Everyone on here is quite helpful in pointing you in the right direction. It isn't a "forum," but it functions as one.

Just ask intelligent questions and learn to use the search function.

As for joining an open source project, go ahead. You don't have to contribute very much code. You don't even have to join the project - just download the source code and read it.

Also, don't throw around terms like "hacker" if you intend on using Python a whole lot. You need to go to perl and C if you want to be considered a hacker. It is quite a subculture, and Python is not part of it (I am not a hacker).

@a comment regarding hackers, here is verbatim what a game programmer told someone:

Programmers generally fall into three (extreme) categories:

  • Software Engineers
  • Computer Scientists
  • Hackers

Hackers will tend to use languages like C and Perl because, well, they are "hacky" languages -- they practically encourage you to create unusable code in every sense of the word (the code is inflexible, unreadable, and unmaintainable). It's no surprise whatsoever that C and Perl are two of the languages that have competitions to see who can produce the most unreadable code (IOCCC and OPC). That basically sums up the attitude of 95%+ of their users: they get their pleasure not from making good programs, but by reinforcing their hacker identity by making the most indecipherable code imaginable.

Software engineers strive for elegant code that is reusable, flexible, modular, and coherent. As a result, they almost always use an object-oriented language such as C++, C#, or Java. Unfortunately this group of programmers has the largest share of "bad" programmers (the ones that lack passion for the art), but the ones that are passionate about programming produce the most amazing code that you'll ever see.

Computer Scientists are programmers that barely ever program. They are mathematicians in disguise that occasionally program to test out a theory. They'll generally use the language that is theoretically best for the task at hand, which usually ends up being some crazy functional or logic language like Haskell, Lisp, or Prolog (it's no surprise that the syntax in these languages are practically math).

Your friends are hackers. If you want to be part of hacker culture then you have no choice but to use C, Perl, Ruby etc. They won't accept you otherwise (you'll also be required to hate Microsoft without reason). However, if your primary goal is to actually make good software, I suggest looking at some more well-engineered languages like C++, C#, Boo (I guess Java too, but I personally dislike it).


Typically, if you want to get better(at anything), just work at it. I've spent the last 13 year working on programs in one language or another; it tends to rub off after a while. Same thing with music: takes 3-4 years to get decent, another 6 to get good, a lifetime to become a master. I am no master(although the degree I am working towards is a Master's(heh)).

Couple notes:

  1. P.h.D is different. It's not something you should choose at 17 unless you are absolutely certain of it and have some kind of knowledge of what a phd's life is like(ideally, from talking to real-life engineering/comp sci phds). It's not like in books, or in movies, or in the stackoverflow representation. Those are biased. A much better goal is to get a Master's thesis option as well as doing undergraduate research. Then you'll know enough to make an informed choice.

  2. I want a Phd. I want to know that I can work at the top level of academia and produce quality work. I want to be able to contribute something original to the discipline. That is a common reason for doing a Phd. I probably will spend some years in industry prior to doing so. Other reasons for gettting a phd include "to max out their qualifications", "to be a professor", "to be a researcher". Each individual usually has a lightly different story for why they chose to be underpaid for 3-6 years and learn an obscure part of an obscure discipline.

  3. Don't worry about being a "hacker", or an "engineer", or a "computer scientist". Labels will distract you; usually the only label anyone really has use for is "learner". Be a learner. You'll learn your self-identity in time, and labels won't really describe it exactly.

  4. Python is a good language. So is C++. You would be stood in good stead if you had a good handle on those. Try to find a project you want to do; keep working on it until you have over 10,000 lines of code on it. Perseverance gets you farther than genius. :-)

  5. Above all, recognize that geeky people will argue obscure points of nomenclature until they are blue in the face, and rise above that. :-)


You're right at home, chap.

Well, as much at home as you can be anywhere. In music, you have a centuries-old culture of both theory and practice, of teaching, educating and training. This is not yet the case in programming. It's much more chaotic, - and some other posters have tried to give you a bit of orientation -, which means both a lot of freedom and opportunity but also less guidance and well-padded paths. When I started my undergraduate in math, I was rather skeptical about computers, but we had to choose a minor and most of my pals chose CS, so I stumbled along - and fell in love.

There is no beaten track one could send you to become a hacker. There are a few ingredients, like enthusiasm, mental flexibility, creativity, and abstract thinking. But then there are so many forms you can put this to work in the realm of programming. The only certain thing to foster it is doing it. Beyond that the choices are endless.

Choose a language, where it is more important that you choose one where you find a good book you feel comfortable with, or one you can share with friends so you can talk about things.

Choose an application field (web applications, databases, GUIs, XML, games, ...), in which you are really interested (not something somebody else told you woud be important).

Choose a community, where you feel at home, a project you like or something else. Don't be offended by the narrow-minded, aggressive-arrogant self-called experts which you will come across all over programming land. Try to avoid them when possible, there are lots of friendly folks too. Everything else (like contributing to a project) will follow on its own. Don't be intimidated by titles and positions, sometimes the big animals are kinder and more helpful than the guy that is just two steps ahead of you.

The whole field, although it hugely benefits from research and science, is at its heart still driven by people that bring curiosity and a desire to create, rather than formal education and degrees. (If you want to pick up a bit of that lore, read Steven Levy's "Hackers").

Well, I guess what I want to say is, you seem like a sensible person, so don't let anybody throw you off when you have something you want to pursue. Many things will clear up for you in the course of going. And of course you can become a whizz hacker, and still obtain a Ph.D. :-) .


The best place to get started, I think, is with the plentiful tutorials to be found online and a place like StackOverflow. Since you tagged this as Python I'll point you to Dive Into Python which I see recommended pretty often for beginning programmers ( http://diveintopython.org/ ).

Since you ask specifically about community, though, and not just learning resources the best place would be IRC chat rooms for the language or projects you're interested in (for me it might be something like Python, Django, and Pinax developer chat rooms.) Just mention that you're a beginner and some people should be more than willing to help.

A quick Google search also reveals beginner-specific forums on sites like http://forums.devshed.com/ but I can't vouch for them myself. Do a search for similar forums and spend some time there to see if it suits you.

Lastly, I'd follow people involved in the languages/projects you're interested in on Twitter or their blogs - it's a great way to stay up-to-date and give yourself more exposure to the topics you're dealing with.

Good luck!


You don't need to learn perl or c to become a "hacker". If you have a solid low level understanding of how your program is executed, it doesn't matter what language you code in. There are plenty of Perl programmers who don't have a clue how there code goes from a text file to machine instructions that control their computer. I will agree than knowing C is a good way to become a hacker, is pretty hard to do serious C programming without learning quite about about how computers work.

The #python irc channel on freenode is a pretty good place to ask for help, and many open source projects have their own channels.


GO check out irc.freenode.net. live IRC, lots of programming channels, lots of noobs and pro's.


I think all these answers are good. And one of the things you will realize as you get older is that newbie is a permanent condition, in one form or another. Just as you start to achieve mastery of a particular topic, i.e. get "good at it" more often than not things will change. Not to mention your perspective. There is always new stuff to learn, even about old topics. And the internet, and sites like stackoverflow are putting mountains of knowledge at a finger click, a phenomenon truly unprecedented in human history. More information than you or I can ever begin to hope to comprehend. Just relax and be in awe at what a wonderful time it is to be alive.

I would recommend finding someone as equally enthused as you are about the subject matter. Perhaps someone older who can be a good mentor. But even a buddy the same age. Two minds can plow through things much faster than one. The feedback loop of constant dialog reveals more and deeper insight. If you can, attend local usergroups. Meet people that way.

Also, don't get too hung up on being a newbie. Just enjoy the process of learning. When I was younger and in college the following Marshall McLuhan quote brought me a lot of comfort:

"Jobs are finished; role-playing has taken over; the job is a passe entity. The job belonged to the specialist. The kids know that they no longer live in a specialist world; you cannot have a goal today. You cannot say, 'I'm going to start here and I'm going to work for the next three years and I'm going to go all that distance.' Every kid knows that within three years, everything will have changed -- including himself and the goal."
~ Marshall McLuhan


Another important community for beginning Python programmers: comp.lang.python, which started as an old-school Usenet newsgroup but is still very active and can be a great resource. These days the newsgroup is duplicated through several channels, so you can take your pick on how to access it or participate: besides directly through an nntp newsreader, it's available as a mailing list, on places like Google Groups, or in several formats at gmane.org. There are other lower-volume, more specialized Python discussion lists, too; see the Community page at python.org for more info.