Of course, now I'm not in a programming job, so I can only imagine I've gotten worse.
So, I think it helps to do more than just passively "read" it. I might create a private branch, run the sucker with lots of print statements, comment the hell out of it, take copious notes in org-mode, draw diagrams to leverage my visual systems, etc. (It might feel silly, but no one's watching.)
Running it repeatedly (with print statements) allows me to form little hypotheses and test them. The idea is to approximate having a REPL. Something like emacs helps to automate this as much as feasible.
Context makes it so much easier. In the real world there is usually a purpose to code, and good code has a cohesive metaphor you can understand before you start reading. Practice eventually makes the syntax second-nature, but I found being able to understand the context and subtext of the code is a much bigger boost.
I took a poetry class in college and found that learning to read poetry helped me become more fluent at reading code. Instead of reading it like prose, from start to finish, reading poetry is about building a mental castle of what the poet is talking about, and then the actual words fill in the important details. Plus you learn to pick up on repetition, rhythm, deviations from established patterns and is-a relationships ;-)
I recently started programming at work after at least a decade of mostly not programming at work. My experience so far has been that reading code is easier than writing it, at least when an unfamiliar SDK is involved.
The one thing to add (related to 1 and 3) is:
*do not focus completely on the technology. learn what's around it also*.
I once worked for a company where 1 week/month the managers would work in 1 department (as regular team members). With the hands-on feedback, they would improve the process/team/business. Needless to say, that company was making profits in the 2008-2009 "dark-age period".The main lesson for me is that software is the business where you learn about & improve other businesses. The value is that you get to understand better the world (business) around you. That way you can avoid building "innovative products" that no one needs.
I think there's a lot to be said for it. I suspect we (as a species) waste a lot of time because we're ignorant of the big picture.
In some cultures (eg. ex-communist countries) there is a natural "distance" (approachability) between employees and management. I did not see this in Western Europe (at least at such level)
EDIT: thanks for the tip about edw519 ( https://twitter.com/#!/edw519 ). New feed to read!
Followed by
Goranka Bjedov is a capacity engineer
Hmm.
1. Look for jobs that will let you <do whatever you want to do>. 2. Don’t give up on becoming <whatever you want to become>. 3. Learn how to take charge of your career.