This is a tested recipe to become a programming expert:
Learn to use a text editor or IDE
- Arguably the most imporant tool for programmers
- Learn to navigate source code quickly
- Vim plugins/tools for source code navigation: cscope (only for C), ctags, ctrlp, fzf
- C: man pages (sections 2 and 3) and info pages (libc, gcc, make, gdb, etc)
- Ruby: ri pages
Read interesting books
- C: Expert C programming, Build your own Lisp, ...
- Ruby: Ruby under a microscope, Metaprogramming Ruby, ...
- Skip the basic (syntax, control-flow, etc). Read fast. Focus on sections with interesting titles. Do the excercises. Use the sandwich approach (start with first few chapter sections, then last few sections, then the middle sections).
Read source code from interesting projects
- C: coreutils, binutils, findutils, ...
- Ruby: rake, God, jekyll, unicorn, ...
- If something is unclear from source use a debugger (byebug for Ruby, GDB with '-g3' compile option for C)
Make programming projects
- C: clones of linux utilities (cat, ls, etc), a server, ...
- Ruby: a static site generator, a DSL, a server, irc bot, ...
Read and write blog posts
- Use RSS feeds to follow your favorite blogs
Answer and ask questions in online forums or chats
- IRC channels
Repeat these steps often. There's no better way to become a programming expert.