menloparkbum said (emphasis mine) "What you should really do is make a complete system and put it out there for people to use. A web service, an iPhone application, a desktop application, whatever. "
pg replied "Yes. Making stuff is the way to learn, the way to meet smart people, and the way to increase your morale."
If the OP were to build a significant library or subsystem for an existing language/ecosystem, say a natural language processing library in Erlang (I know some people who need something like this today), or create a version of Django with SQLAlchemy, that also worked well with django-admin (I know people who need this too) that would count (I think) as "making stuff" (pg) but not necessarily "make a complete system" (menloparkbum).
So is it necessary to build a complete system (a webapp that uses the NLP library), or is significantly enhancing an existing system (just writing an NLP library, with just enough usecases to drive the library design) enough (to make progress)?
If you want to get a programming job it's a good idea to publish a lot of stuff to github. Personally I find it more satisfying to build applications vs. libraries. Others find the opposite to be true.
Remember, too, that 20 is still way young. It feels old to you, because it's the oldest you've ever been, but you haven't really cut off any options yet.