New Language --- How should I learn it?
Author |
Message |
Bobrobyn
|
Posted: Wed Jun 04, 2008 12:24 am Post subject: New Language --- How should I learn it? |
|
|
So, you've decided that you want to learn language x. What's the best way of doing it? I've found that without a specific project or set of problems to work on, I tend to lose motivation for "learning" a programming language. That's why I thrive in a school enviornment...we're given the problems to work on.
Does anyone know of any good projects or set of problems that are language independent, so that you can learn new languages? Or just general plans on how to go about learning them? |
|
|
|
|
|
Sponsor Sponsor
|
|
|
rizzix
|
Posted: Wed Jun 04, 2008 12:26 am Post subject: RE:New Language --- How should I learn it? |
|
|
Project Euler? Although they do not truly test all the feature of any arbitrary language. I guess there really aren't any generic set of problem that will aid in understanding any arbitrary language. However you can use your creativity to make use of all the feature you've learned to try and solve the given problem. |
|
|
|
|
|
Tony
|
Posted: Wed Jun 04, 2008 12:42 am Post subject: RE:New Language --- How should I learn it? |
|
|
reading other people's code also helps. There are certain unique things about each language. Certain "cultural" differences and usage patterns.
If you solve problems as you would have with Language Y, only using Language X's syntax instead, then you are not really learning Language X.
For example if you are coming from Turing's background (which typically doesn't involve much Object Orientation) and into Java, and not use OOP (other than perhaps encapsulating everything into a single method), then your code will not be very good. If you are then starting out with Ruby and are avoiding the use of closures because Java didn't have them... then you are not using the language to it's full potential. |
Tony's programming blog. DWITE - a programming contest. |
|
|
|
|
Bobrobyn
|
Posted: Wed Jun 04, 2008 1:17 am Post subject: Re: RE:New Language --- How should I learn it? |
|
|
Tony @ Wed Jun 04, 2008 1:42 am wrote: If you solve problems as you would have with Language Y, only using Language X's syntax instead, then you are not really learning Language X.
I never really thought about it, but I suppose that's true. When I was learning Java, I was doing it originally in a very C way (yay for primatives!), until the prof made us do everything using OO. Thanks for saving me from making the same mistake again. |
|
|
|
|
|
btiffin
|
Posted: Wed Jun 04, 2008 3:18 pm Post subject: Re: New Language --- How should I learn it? |
|
|
Old guy rambling follows
Learning a new language can be seen by some as a "waste of time". I don't; it's my hobby. I'll clarify the statement. IMHO, programming is for fun or for profit. If it's for fun; let it be a waste of time. Time well spent. If it is for profit; then I'd classify it as two kinds of profit. For cash and to free time for more fun.
One of the motivations in my life has been a quest for the perfect PIM and to write better docs. So when I sit to learn something new in computing I try and see if it will help me save time keeping personal information organized or help with simplifying complex document writing.
Just so ya know; I have yet to find a PIM that beats a plain ASCII text file and my trusted field message pad and mechanical pencil. But I'm not going to give up. Regarding doc writing, I have ended up with a plethora of small utilities (usually one offs) but I continually find myself writing; REBOL, AWK, SNOBOL or Icon programs for this to help organize the LaTeX (or other markup) sources. (Along with shell scripts to glue the pieces together).
So, after reading up on the key features list for a language and trying to see how cool I feel they are, I try and write a program to see how hard it will be to beat plain ASCII text for a PIM. REBOL came really really close for me and I hope REBOL/3 will finally let me have a PIM where the data is code and the code is the data. So that covers the fun part.
Making cash is a completely different animal. Yes, work should be enjoyable; but that doesn't really mean fun. It should be work. Unless you work for yourself, you are trading your time for someone else's money. So it is no longer your time. And I don't mean self-employed contractor. I mean something like developing your own software system on your own dime and then selling it (or giving it away) on your own.
Life is quite short when it comes to building expertise. One benchmark being Quote: In many domains of expertise estimates of 10 years experience or 10,000 hours deliberate practice are common. From answers.com topic expert. So you might be able to call yourself expert in 5 work related areas throughout a career; probably less.
This is a personal opinion, but pick C as one of your areas of expertise. Learning C is somewhat trivial (it has keywords counted in the tens), but expertise in C can be a lifelong challenge. Along with C (and I'll count C++ in that), pick a scripting language that tickles your fancy. In that area, the choices are huge, but if the plan is to make money, check the TIOBE index for some hints on what employers are paying for. I'm a rebol, and I plan on putting in the 10'000 hours in the shortest time span that I can. (I'll prod you to check out REBOL to see why I used 10'000 instead of 10,000 in that last statement). I also prod people to try Icon. Icon is a very, very high level language that can take decades to come to grips with (sometimes the fun of Icon actually feels like work).
Tonight I start playing with the Falcon programming language. Looks cool and it might let me plop an entry down for rizzix's Actor Model challenge.
In short. Apply your interests to a programming language to see if it can make you happy. Once the fun runs out, then decide if you can use the skills for work. If you think it can, then it's time to grind through code. Lots and lots of code. 10,000 hours is a lot of hours.
Cheers |
|
|
|
|
|
michaelp
|
Posted: Wed Jun 04, 2008 8:29 pm Post subject: RE:New Language --- How should I learn it? |
|
|
You can always teach yourself in 10 years, but that might take a while.
If you want to stay engaged, you should probably learn a bit of the language, then work on a project that you will enjoy, and figure out things in the language along the way. Although I have yet to do any large project with the languages I know... |
|
|
|
|
|
jeffgreco13
|
Posted: Thu Jun 05, 2008 9:37 am Post subject: Re: New Language --- How should I learn it? |
|
|
It's all about the Learning Pyramid:
The human mind retains:
10% of what you read
20% of what you hear
30% of what you see
50% of what you hear and see
70% of what you see and write
90% of what you do.
Plain and simple, read, take some notes and then get started on a small project. Before long you'll get the hang of syntax and how the commands work with each other. Oh and hang out in forums like this.. unlimited amounts of help from programers who went through what you are now. |
|
|
|
|
|
Prabhakar Ragde
|
Posted: Fri Jun 06, 2008 1:05 pm Post subject: RE:New Language --- How should I learn it? |
|
|
While I agree that the best way to learn a programming language is to write programs in it, let's be careful about citing "Learning Pyramid" statistics. They appear to have no basis in research.
http://www.willatworklearning.com/2006/10/people_remember.html |
|
|
|
|
|
Sponsor Sponsor
|
|
|
Aziz
|
Posted: Fri Jun 06, 2008 1:40 pm Post subject: RE:New Language --- How should I learn it? |
|
|
Do something. Challenges. Except, you can look at the answers. http://compsci.ca/v3/viewtopic.php?t=18227 or http://pythonchallenge.com.
If have a good idea for a new project, try and do it in a new language. Or if you need a quick script, pick up Ruby or Python. Maybe you want some pizza.
Also, reading a good book that isn't introductory is fun. (for example, O-Reilly's 'Programming X' series rather than 'Learning X' usually are less n00b friendly, and assume you have programming knowledge).
I do my best learning in my bed at night or on the john |
|
|
|
|
|
|
|