I have been programming for a while already. Counting the time when I was studying, it has been over ten years already. If Peter Norvig is correct I should know by now what I am doing, although I often get the feeling I don't know anything (which seems to be a widespread problem if you see the job applications we get).
In this time I have been in a number of companies, mostly focused on web programming. I started as a developer, focused on backend topics. At some point I became frustrated having to wait for somebody else to implement the layouts, so I ended up learning HTML and CSS past the random pixel assignment part. I guess that qualifies me as a Full Stack Developer.
At some point somebody thought it was a good idea to make me the technical lead of a SCRUM team. I quickly discovered that it is not the same doing something yourself than helping somebody figure it out himself. I learned, somewhat to my surprise, that I really enjoy doing that, and that the people I have coached did as well. At least they don't tend to run away screaming from me, which is, I think, a good thing. Another consequence of this switch is that I have done a lot of interviewing in the last years.
I have managed to work with plenty of technologies and tools. It took my a while to realize, though, that while solid tech and good foundations are important, they are not the only thing needed to deliver high quality software.
Following the Pragmatic Programmer advice, I try to learn some new technology every year. My github account is full of small projects I have started to teach myself new things, such as this page itself. A list of them, in no particular order
I am a bit picky about the tools I use. Actually, I am very picky. I cannot remember how many times I did rewrite my shell config in the past. It is problematic for pair programming because I usually am the only one that can work at my computer.