When my children tell me that they hate school, I often tell them that they need to get used to continuous learning because they live in a generation in which constant learning will be required. How do I know -- because I live in a generation and work in an occupation in which continual learning is imperative.
Do you agree with this sentiment? If so, what do you do to keep up with the continual pace of change in the field of software development?
This question exists because it has historical significance, but it is not considered a good, on-topic question for this site, so please do not use it as evidence that you can ask similar questions here.
More info: http://stackoverflow.com/faq
Read. Read blogs, white-papers (if thats your thing), books (read books by the truckloads), read anything and everything.
Write. Write down your views and opinions on whatever you are reading about. Make your point of view clear. Blogs are really excellent for this purpose.
Code. Write code every day. In your head, on paper, in a compiler. On a train in the rain on your way to Spain. Write code every day.
Talk. Talk with other programmers about programming. You will be amazed how often you A) never saw something from a particular angle, B) were flat out wrong, C) didn't know enough.
Read
Evaluate
Discuss
Practice
I try to never assume that I am good at what I do - just that I am better than I was and I want to be better than I am now. It's basically the journey-not-a-destination thing.
Remember that adage, "it's not work if you'd do it for free."
Notice carefully. Children do not hate learning; they are the most curious creatures on the planet. What they object to, is pointless and uninteresting learning. We all hate make-work, but at the same time all of us have something we are willing to dedicate insane amounts of effort to understanding/playing with.
In programming, unlike childhood, our obsessive interests, the ones in which we can immerse ourselves 10 hours at a time, have the ability to shape the world. Every single innovation in computing has come out of someone spending far too much time alone in a little room, dead to the world, working on something certain to be viewed as boring by the vast majority of the world's population.
This should tell you something. If you're not having fun playing with a new language, or protocol, or technique, you are learning for some other reason than sheer obsessive interest. And no one ever changed the world doing make-work.
This issue might be a little too broad for Stack Overflow, but:
Have you considered that the learning isn't the problem? School is many things, and learning is only a small part of it. I also hated school, but have always loved learning.
To stay in touch with what's new and what developers are talking about, I read these regularly:
OK, a bit off-topic, but before I start my daily technical reading, I visit Woot at http://www.woot.com/. It isn't just the loot, it's the literary quality of the product description.
I try to learn at least one new thing a day.
It's so easy to get wrapped up in life to forget to learn new things. But if, say, first thing in the morning, you read a tip from "Effective Java", try learning Python by solving a problem on Project Euler, or something like that, you'll find that over time, you've learned a lot!
The rate of change is accelerating, people also rarely stay in one profession for their entire work career. So yes continual learning will be necessary unless the children are willing to do manual labor. I personally love learning for learning sake; I don't go a day without reading at least one book. Professionally I read books on new versions of software, I read blogs and sites like this one. My learning is more focused of course when I am looking for a specific technique, but I learn continually. Everthing comes in useful eventually.
As adults we are often the ones responsible for turning children awy from learning, young children want to learn and do it without thinking about it. But when we send children to school, it becomes less about learning than about obedience and following a narrow set of rules. You now no longer have any choice in what you want to learn. Not that this is entirely bad, children don't know what they need to learn to be successful as adults and learning discipline is extremely valuable as well. But what we forget to do is supplement that by giving them the tools they need to learn about the things they are interested in. Or we tell them that there isn't time to learn about dinosaurs because math is more important. Or we get impatient with answering a continual stream of questions (on subjects we aren't interested in and may know nothing about) and so by our tone of voice and body language, we teach them not to ask questions or try to learn anything.
My strategy when dealing with children old enough to read is to provide books on the subjects they express an interest in, and when they ask a question that I don't know the answer to, well the internet is only seconds away. Take time to answer questions (or show them how to look up the answers) and you will foster a love of learning. Be excited when they learn a billion facts about some subject you aren't particularly interested in. Who knows the kid may end up as a geologist or archeologist or something you never considered.
Model that learning behavior in their presence as well, Let them know when you are learning something new for your career. Get excited about learning it in front of them. Get excited when you learn something new non-career related. Play games with them that involve knowledge not just chance. Think it is really cool when they tell you something you didn't know before.
Never allow yourself to think you know all you need to know, or that everything you know is correct. The unteachable attitude is the deathknell to learning.
The best thing you can teach your children so they continually learn is to ask questions. The more they ask, the more they will develop a natural curiosity. You can't really force a child (or even a person for that matter) to learn, unless you use some sort of punishment for failing to learn, which is detrimental and can cause the subconscious fear of failing to learn, and in essence, hatred of learning.
The best ways I've found to learn is by hands on approach, especially when I was younger. Kids are active learners - they like to do things on their own and figure things out for themselves when they can. Not only are they active, they are interested in things because of the fun factor. A child doesn't chase down a frog because you tell them "Hey, go learn about amphibians," they learn because they want to. When things are fun, learning is easy. I like to give props to Randy Pausch's "head fake" technique: where you make something fun and people don't realize they are learning something.
As for me, the best way I keep learning is books and tutorials (for my tech side). I learn a lot more for tutorials than I do from books, but that's just my hands on learning style. If I need to solve an immediate problem, tutorials and Google are my best quick learning tools. Keeping up with other things I tend to watch things like the Discovery & History channels, and read about things I'm interested in. If something isn't interesting to me, or isn't a necessary knowledge to have in this day and age, I usually skim it or ignore it completely.
Practicing mostly. And reading.
Oh, and I try to incorporate new technologies into small areas of new projects, where it's feasible.
Also see what-do-you-do-to-keep-your-coding-skills-in-shape-and-how-often [1]
[1] http://stackoverflow.com/questions/92648/what-do-you-do-to-keep-your-coding-skills-in-shape-and-how-often1- Reading book
2- Read tutorial over the Internet
3- Try new stuff in programming (learning framework... other new thing like LINQ...)
Here are some of the things that I do to keep learning:
I think the most important thing is to be intentional about learning. To seek out opportunities to learn. To cultivate curiosity about things that I don't necessarily need to know right now. This applies to stuff outside programming as well. I try not to limit my perspective only those things that I know are important but to find ideas and principles in many different areas of interest.
I make a point of learning programming languages which are radically different from the languages I use in my day to day work. Learn a functional language like Haskell, a dynamic language like Ruby, a logic-based language like Prolog, etc. When you have absorbed these very different ways of approaching programming problems, you will be able to find solutions which are not obvious from a more limited worldview.
I keep current by reading everything I can from blogs to technology news sites. Really, being involved in every facet of the industry helps me to stay energized and enthusiastic about what I do. I keep a list of RSS feeds in Google Reader tuned to the various technology sites (Gizmodo, Engadget, Digg) as well as fun things such as XKCD. Keeping my job and field interesting keeps me in the loop, and in the know.
I've wanted to pick up new languages and build small projects in my free time to expand my project management and technical skill sets but I haven't found the time. I guess you could say I subscribe to the "learn more by not coding" paradigm. ;)
One day I need to squish the unit test, build script, system architecture bugs. As a lowly developer I haven't had much hands on time with those things as of yet.
I think there's two different styles of learning that I have. One is the "I need to know this immediately because I have a project that needs to be working by Friday." In that case I will usually consult the all-wise google, dig through some forums / blogs, or more recently, post the question to stackoverflow.
The second style is a more continual, ongoing learning that I get through the regular reading of blogs, listening to podcasts, reading books, etc. I like reading things by people much more intelligent than I am, in the hopes that some of it will actually sink in. And often I do find that I have a little tidbit of info floating around up there that helps with whatever issue is at hand.
Call it trite, but I read everything I possibly can. Books, MSDN, blogs, SO.
I find that the best way to learn is to teach, it really makes you think about how and why things are the way they are. Of course to be able to do this you have had to read a little first :)
I want add one single thing to all great answers given so far:
Play:
Playing is the most natural way of learning. If there is something new to learn, try to have some fun with it. If You can learn something by playing, then there is no better way to learn it.
Get a job that is interesting and seek out/invent challenging projects. Nothing makes you learn like doing.
I am horribly lazy.
Having said that, I must confess I do not read that many blogs and / or engage into discussion boards neither do I have a blog myself.
However, it is not all lost - I learn things based mainly on needs (both personal and professional).
As a person I have some "pet projects" of my own and I am always on the outlook for something I can aggregate to one of my projects and make it better - I love solving puzzles and this gives me the opportunity to use some very different languages / programming environments.
Professionally speaking, my client demands more and more (functionalities / quality/ non functional requirements) every time we talk / meet. Every new demand almost always cause me to learn a new thing - which is equivalent to the Pragmatic motto of "be a jack of all trades".
Read books, read web pages, read blogs, then practice what you read.
Reading stack overflow has been a good way to learn for me aside from my own coding projects. You can also become active by coding other than just at work. Join an open source group that is using the language that you want to learn. With our industry learning is imperative as you said so the best way is to put as much time toward it.
Do you own mistakes. Yes, others have made mistakes, but your own scars burn most. Just start pet projects and adhere to certain rules. Either, they work out, or they are going to fail and the project will crash and burn. In any case, you learnt a practice you should avoid or use further.
Furthermore, I agree that you should write about those crashes and burnings, even though I don't do so myself yet ;) Writing things down makes you think harder about them and understand them deeper -- or you learn areas you did not explore yet. However, don't let this stop you. If your current results are interesting already, publish them and just say "I have no clue what happens if you do THAT. I'll try that later". Others might help you or even try it for themselfes.
I am in total agreement its about reading / discussing as much as you can.
One thing on reading though. I find it sinks in almost 100% more if I read it outloud to myself. It doesnt have to be loud outloud, it can be a mutter. But concentrating on saying the words seem to make things just stick more for me.
just my 2 cents...
Learn radically different things. Only focusing on one topic, like programming and technology, will not do. By finding new kind of things to learn you keep the brain in good form. I read somwhere that while alzhimers will phisicaly destroy the brain it's possible to avoid psychological symptoms entierly by doing this.
I guess it's just a matter of keeping it flexible to have usable neurons at your disposal when needed.
Yeah, the definition of learning keeps changing. If "learning" means rote memorization, this generation will refuse to do that because Wikipedia and Google can do it for them. So yeah, they'll hate that. But fun stuff like problem-solving they'll probably like.
What I do to keep learning is actually having real-life problems to work on. :-) It's much better than some academic thing that you don't see the value of.
This is probably common to everyone that posts here, but I try to solve programming problems in the best way possible, rather than the quickest way.
I've been in academia for a long time so a lot of new technologies passed me by. I try to read a general developer's resources (e.g., Dr. Dobbs print version) to at least get a feel for what is going on, see the technologies, and in some cases get a feel for them from source code excerpts.
Learning is like a drug, for me, i love computers, programming, been that way for me since my 1st computer, Apple 2+.
Because then your fingers become the doorways for what your mind can imagine, conceive and visualize...
And learning stimulates our brain, and pushes to grow, and learn from our mistakes, and other people's mistakes, and enables us to be more efficient with our time...
I just don't get why some people, just don't care to learn more....
I can agree with part of the sentiment. I wonder if you understand what are the elements that are part of school that are outside of continuous learning though. For example, what are the social dynamics that your kids experience on a daily basis? If they are being picked on and bullied at school repeatedly, then telling them to "suck it up" isn't a great answer in my opinion. How openly do your children discuss the problems they have at school? That may also be useful to know.
I keep up with some things by reading, discussing and trying out things. At the same time, there is something to be said for knowing what I want including which kinds of duties, what skills do I want to develop, what technologies would I like to explore, etc. Part of my job involves learning what I need as I need it,e.g. I don't know how all the different Sitecore search connectors work because I don't work for Sitecore but I do have to know how a specific search connector for Sitecore works as that is part of the environment where I work.
Just to give an example of being picked on, back in Grade 11 Biology there were these 2 students, one who sat infront of me and one who sat one row over and behind me liked to play this game involving making a little "o" symbol and trading blows in class where I'd get the odd blow as one would miss the other. The one almost behind me also liked to take a pen and write on my Bugle Boy shirts that I'd wear to school and the ink didn't always come out. One time there was a student teacher and apparently I turned red enough that there was concern about me that led to me being asked a few things and so I was crying with tears and a runny nose and hyperventilating that day that just wasn't a good day.
While reading, writing, coding, and talking: strive to understand how things work under the hood - preferably all the way down the rabbit hole. For example, understand how everything below web services works all the way down to HTTP (I would prefer all the way down to machine code or even transistors, but that may not be feasible). This will help greatly in understanding new things, since they most often build on existing things.
Also, to answer your second question: learning should be valued in its own right. The mind finds unlikely connections between seemingly unrelated things you already know, which will also help you understand new things more easily.
"School" and "learning" are often only mildly related, unfortunately.
I read Hacker News [1] "to keep up with the continual pace of change in the field of software development".
[1] http://news.ycombinator.com/I don't see learning as an activity. Learning is something that happens when you dispatch complex activities. Some people love those, others doesn't.
When your children tell you that they hate school, they mean what they say. They do not probably mean that they hate learning. Why would they? Learning is not an activity, it's a result from certain kind of activity.
How do you put your children to learn things then though? Let them face challenges and give them activities. Give them a reason to pick a book, other than a simple reward or punishment! Of course this is hard and requires you to learn couple of things as well. Perhaps biggest one is that you need to learn know your children and understand their traits. You need to find out their dreams and put them walk a path towards achieving them.
Anyway, learning is all about achieving something better and maximizing enjoyment with your life. You learn to roundhouse kick that apple down high over your head.