Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

This question already has an answer here:

After the school i think my learning process has been slow(not yet stopped), so give me some advice which will be help me to keep learning. UPDATE: I am a web developer in PHP. I am working in PHP last 2 years.

share|improve this question

marked as duplicate by MichaelT, gnat, Kilian Foth, thorsten müller, Jalayn Apr 17 '13 at 12:43

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

Always convince yourself that what you know is a fraction of the knowledge available to you, and this is very easy now that we have the internet –  Mahmoud Hossam Feb 9 '11 at 11:37
Can you give some extra details about your background because the question seems too general. –  Nipuna Feb 9 '11 at 11:40
@ Nipuna Silva i update the question –  enthusiastic Feb 9 '11 at 11:43
"i think my learning process has been slow"? Why? What makes you say that? –  S.Lott Feb 9 '11 at 11:49
@enthsiastic: "Apart from my work i get little time for myself". There is no royal road to learning. Learning is work and takes time. –  S.Lott Feb 9 '11 at 13:26

11 Answers 11

up vote 8 down vote accepted

Always try to look at and understand the problems you are solving day by day more deeply, and to provide a proper long term solution to them. If you are out of ideas, google for similar problems and the best practices to resolve them.

If you are out of challenges at your workplace, join SO ;-), or look at Project Euler. You can find more suggestions with regard to specific areas or technologies on SO (check out the info and FAQ pages for the tag(s) your are interested in).

Read at least one (but preferably more) professional book every year, and try out new languages/frameworks/platforms every now and then.

The Pragmatic Programmer discusses this topic in more details. Their advice is to think about your knowledge as a portfolio of assets, and manage it just as you would a financial portfolio to keep and increase its value over time:

  • invest regularly by studying even a little bit a time
  • diversify your knowledge
  • review and rebalance your existing knowledge every now and then: what is obsolete? what needs a brush up? what new, emerging hot stuff to learn now?
share|improve this answer

I read, watch, listen, do a lot. My RSS reader has some 80-90 feeds that I skim through everyday. Everything from podcasts, videos, and text that cover topics from web to scalability to architecture.

The other more important thing that I do to learn is to do. I keep coding and using the new stuff that interests me or what would benefit my career. For example, I am toying with a few NoSql DBs to see what all the fuss is about.

My single most important advice is to never stop learning. You don't have to spend every waking seconds learn but keep a high level idea of what is going on in the industry. What is trending, what tools are out there. You don't have to be an expert at everything but since everything changes so damn fast if you don't keep learning you will be left behind. Once behind it is a very hard to catch up.

share|improve this answer
+1 for reading. Just keeping your feet wet if you don't have time now keeps you from having to make up a ton of time later. –  Michael K Feb 9 '11 at 14:11
@Michael, I feel I can talk intelligently about tons of things. Now if I had to actually use them or were considering them for a project, there would be a ramp up period but at least it wouldn't be a cold start. –  Tony Feb 9 '11 at 15:08
That's why it's good to be a 'jack of all trades and master of a few.' Rennaisance man! –  Michael K Feb 9 '11 at 15:13

Work with people who are smarter than you.

"What was it like working with John Carmack on Quake? Like being strapped onto a rocket during takeoff – in the middle of a hurricane." -- Michael Abrash

share|improve this answer
+1 Do this whenever possible. –  Michael Feb 9 '11 at 16:22

Take more classes - You could enroll in night classes at a local or online university, or you could just look through the offerings of one of the many free online programs. I highly recommend MIT's OpenCourseware. There's a lot of good material in their Electrical Engineering and Computer Science course work.

Help others learn - There are several ways to do this, depending on how much time you want to invest. I do all three of the following:

  • Tutor CS students at a local college. It can be really rewarding to help others learn, and it also reinforces your knowledge when you have to explain it to someone else. The questions that students ask can reveal gaps in your knowledge, or just make you think about something familiar in a new way.
  • Write a blog about things you're learning at your job or in a course you're taking. Looking for interesting topics every week helps to keep you focused on your learning goals.
  • Post regularly on Stack Overflow. Pick a tag that you'd like to become proficient in and look for unanswered questions in that tag. Try to get bronze, silver, and gold badges in that tag.
share|improve this answer

I found myself in exactly the same spot. I've worked on a PHP web application for the past four years, and eventually realized my experience was very one-dimensional. However, I feel like I've gone through some explosive growth the past couple months, and am now very active in pursuing learning. Here are some of the things I've found:

The more you can expose yourself to others' code, the better. Seek out programming blogs that actually teach you something (example: 10 Things I Learned from the jQuery source). Follow or participate in an open-source project. Look over the shoulder of other developers on your team.

Make a hobby of programming. Find a project you can spend a couple hours on each weekend that you enjoy, and stretch yourself. This is a safe environment to experiment with new approaches and make mistakes in a low-stress atmosphere. We learn a lot from mistakes, but I've found that at work, when a deadline is looming, I rarely take the time to stop what I'm doing and research a better solution to a problem. At home, there are no deadlines, so you can look stuff up all you want.

Teach yourself a new language or framework. In my case, I decided to learn Python and am now building a home finance web app in Pylons. StackOverflow is invaluable at speeding up learning time, too; ask questions!

Browse Stack Overflow, and when you stumble across something unfamiliar, research it. And believe it or not, answering questions will help you learn, too. Answering forces you to clearly think through what you know (or think you know) and articulate it in a precise way. I've found this is especially true on topics I have just recently learned about.

share|improve this answer

"Stay hungry, stay foolish" - Steve Jobs

EDIT: To clarify: from my personal experience i can say, i am learning so much every day, because i am interested in so many things.

share|improve this answer
Second one is easy ;) –  Simon Feb 9 '11 at 11:54
This answer does not really help. It could be taken to mean "Eat plenty of hamburgers, give out your ATM password to people" :D –  Arjun J Rao Feb 9 '11 at 14:04
@Simon, haha =) –  rreeverb Feb 9 '11 at 15:45

Broaden your world view. Expose yourself to new things. You will find things that interest you and create the drive to continue learning. Learning begets learning.

share|improve this answer

A few questions to ponder about your work:

  • How often do you review how you did something?
  • Do you look for better ways to do things?
  • Do you look for new techniques or technologies to use in your job?

Knowing your Learning Styles could also be quite useful in helpful increase the efficiency of what you learn as if the new information could be in a poor format for you.

"Stay curious and thirsty for more knowledge" would be a kind of motto that may also be useful here.

share|improve this answer

Part of the learning process is to learn how get good habits, habits are powerful as they give you automatic perseverance. So make a habit of learning something new everyday, dedicate either a part of the day or half a day every week to learn new things.

Things like looking at agile methods or a new programming language give you often new ideas to incorporate in your work which can make a job that was seemingly repetitive interesting again.

share|improve this answer

Keep on the lookout for things outside your daily routine of work. Like Napoleon Hill said "A man should make it his business to gather ideas daily from sources outside of his field of work"

When you do this, what will happen is that you will be aware of all the things that are possible, the current trends and what you need to do to be on the cutting-edge. With awareness comes the desire to do those same things that you read and think about.

In Code Complete, it is written that programming is largely a matter of character because nobody can force you to improve, force you to keep learning. It is up to you to do those things, because you want to be better, you want to be more useful and be more impactful.

Finally, develop powerful habits of daily learning. Inspiration is what gets you started, habit is what keeps you going.

share|improve this answer

I've always used Proggit to learn new things or be inspired/motivated to try new things, although the quality of Proggit has been declining in the past few years -- it used to mostly contain computer science (particularly programming language theory) articles, but now it's more about mundane work-a-day programming topics.

I also follow blogs and occasionally participate in open source projects.

share|improve this answer

Not the answer you're looking for? Browse other questions tagged or ask your own question.