views:

693

answers:

15

Okay, so I've been doing web design for about a year or two, and I've decided that I want to learn a Programming Language, because I've figured out that's what interest me more.

I start out learning Python, got about about 1/4 of the way through Dive into Python, but then decided to go onto Ruby because in the nearer future for now I'm going to be focusing on Web Development.

But I decided I want to learn Ruby first, and then learn Python... But I also decided I would like to learn C/C++

So my question to you is... How long should I focus completely on a specific language. I'm set on learning Ruby and the other two is but I don't want to go to fast, and not really 'know' it. I'm of a young (High School next school year) age, so I have the time, and the motivation to learn these languages (along with playing baseball), so don't worry about that.

So, how long did you spend on a specific language, and do you know any other languages along side that.

+1  A: 

Until you learn it and while you continue to use it.

While it may seem like a snarky answer there is no better way. If you're using a language, continue to use it and push further into it. If you're just learning a language, keep learning until you feel you can't learn anything more about the language itself. Don't forget, that not only will there be languages to learn but there will also be libraries to master.

For your first language I'd go back to Python and spend a good 6 months on it. In some ways learning your first language well will be the bedrock or foundation for you to explore other languages. You'll be able to see what advantages/disadvantages each offers without resorting to reading other people's opinions.

wheaties
yea I've been contemplating on going to python or not, I just recently switched, like middle of last week... I had been learning Python for about 2 weeks. What I really liked about Ruby was the resources on it, Rails, and the fact that it is more web based.But what I really like about Python is the syntax, and it's a little simpler I think.
Brad Johansen
Both are actually quite complex languages. They're massively powerful. Ruby, in and of itself, is not more web based. Ruby on Rails is web based. However, Django of Python is pretty powerful too. All in all, I think it's good that someone from the design side like yourself is trying to understand the other half of things.
wheaties
Yea even though "I'm from the design side" I believe that I suck at designing, I consider myself to be more of a 'Front-End Developer', coding all the HTML, CSS, and Javascript, while some other dude figures out what it looks like, I just make it look like that.I think the best example of this is that I haven't been able to design my web design 'business' website yet, gone through about 10 different designs, still haven't liked either of them.. I'm either picky or suck at design :P
Brad Johansen
+1  A: 

The zen answer: you'll know when you know.

Longer answer: Just keep working with whatever language(s) you feel like. It will all make sense after a while. Each person is different, there is no golden path that will work the same for everyone. And you are young, so don't worry about it too much, and keep playing baseball.

BioBuckyBall
+8  A: 

You can spend decades researching and learning and still never be finished. I've been learning on the job for over a decade.

Since you're learning without a lot of structure, I suggest you come up with a small task you'd like to perform and then learn a set of tools as a means to completing that task. Feel free to wander from language to language, where ever your interest takes you, but stay focused on that one task, whatever it might be.

Something like organizing or managing your mp3 or movie collection is probably a good place to start for someone your age.

EDIT: also, get a mentor. This community is a good source of information, but is no substitute for someone genuinely interested in your progress, checking in and keeping you motivated. Find a willing teacher or older student and latch on. Good luck!

Chris McCall
That specific task, I think, is going to be to create a blog engine in a language... Cause that would be a great asset to web design for me if I had my own blog engine, plus it sounds like fun to do that. Thanks for some of the tips
Brad Johansen
I would recommend against that task, there are so many blog engines already and the tutorials for learning most web languages are basically "make a blog engine", so you'll end up making one within hours of picking up a new tool. Try something more personal, something that's not been done so many times already. How about a Google Wave bot? An iTunes visualizer? A robotic bodyguard? Think big!
Chris McCall
I do agree that there a bunch of blog engines out there, and a lot of things like that, but for right now even if it is only a one hour thing, there are plenty of things that go into blog engines, and continuing to improve on it so it is use able, however I will make a list of things on stuff I might be interested in trying to make, and I'll work on doing that if I think it'll be better than the blog.
Brad Johansen
Only one decade?? Young whipper-snapper! :-)
Stephen C
+2  A: 

When I work on learning a new language, rather than a set time, I consider myself to know the language reasonably well when I reach a certain comfort level with it. Usually this is when I can put together a small project using included libraries of the language without having to lookup syntax, and where I'm comfortable using the language tools. For example, working on Ruby now, building a small thing with parsing/templating and some database connections, getting comfortable with ri, irb, rake, maybe rails. When I'm done I won't feel like a Ruby expert, but I'll feel like I know the language well enough to get around in it and to get things done.

Better to know one language well ( or at least well enough to be able to accomplish some of the things you want to do) than know a bit about a few languages. As others have mentioned here, the best way I've found so far to get to that feeling of comfort with a language is to build a small project with it.

Steve B.
A: 

I never quite learn something until I have to actually use it on production code.

No matter how interesting my own projects are, I always forget it.

So, keep going like that, you'll have a good grasp of the languages, when you really need to use it, the that will stick into your mind forever ( well, not forever but.. oh well )

OscarRyz
I never quite learn something until I have to TEACH it...
Brian Postow
A: 

You have a lifetime to learn languages if you want. You'll never know everything about a particular language. (Heck, even Jon Skeet doesn't know everything.)

But there is advantage to knowing something about a lot of different languages. It makes you more flexible and helps you to learn new languages more easily in the future.

If you have some web design under your belt, try to get your web sites to do some cool stuff with your new programming knowledge. Having something useful on the web in your late teens / early twenties is a fantastic start. You may never have to work as someone else's employee if you hit the next killer web app early enough.

John at CashCommons
"Heck, even Jon Skeet doesn't know everything"He didn't used to know 23 things, but he asked and now he does :)
Chris McCall
Bite your tongue, man! He's probably watching you right now!!!
Drew Hall
+5  A: 

I feel compelled to link to Peter Norvig's Teach Yourself Programming in Ten Years which is a great article about learning the craft of programming. This quote seems relevant:

  • Keep it simple. Programming languages such as C++ and Java are designed for professional development by large teams of experienced programmers who are concerned about the run-time efficiency of their code. As a result, these languages have complicated parts designed for these circumstances. You're concerned with learning to program. You don't need that complication. You want a language that was designed to be easy to learn and remember by a single new programmer.

I've been programming for three decades and I'm still learning.

Greg Hewgill
I've actually read that article, read it while I was decided which language to learn first, before I started learning any of them.And I do understand that you will always be learning, I consider myself pretty useful with HTML, CSS and jQuery, but again you are always learning, and I check different blogs everyday for new techniques they have posted.
Brad Johansen
A: 

"Working on learning a new language" is kind of the wrong thing to do. Without a goal, it will seem pointless.

If you want to pick up a new language, then pick a project you want to do, and do it in that language. You will have great motivation to learn what you need, because you'll have a goal in mind - to complete the project. As you do more projects, the language will become easier to use.

Also I don't recommend Dive Into Python if you haven't programmed before - it's a bit advanced. It's more like "Learn The Good Parts of Python Quickly for Programmers"

Claudiu
Do you suggest "Learn to think like a Computer Scientist" then? Python version of course :P
Brad Johansen
A: 

Sounds to me like you should be focusing on learning programming best practices rather than getting hung up on which language to use.

Gerlando Piro
A: 

I'd spend a while (at least a semester, and at least 5 projects) on one language to really get the feel for the act of programming.

I look at learning to program as having 4 stages:

1) Learn your first language: In this stage, you are learning the syntax of your first language. You are learning about the general CONCEPTS of programming, conditionals, loops, functions, etc, and how they are done in the language you have chosen.

2) Learn some programming techniques: In this stage you are learning about programming in general. Look into various programming idioms, data structures, algorithms, etc.

3) Learn 2-4th language: IMHO, these should be very different from the 1st. If the 1st was Java, make the 2nd Lisp or Haskell. The idea here is to learn a VARIETY of languages.

Once you know 3 sufficiently different languages, the next 20 should be just about trivial.

4) Learn more specific things depending on the type of programming you do. This can last a lifetime.

Brian Postow
A: 

So, how long did you spend on a specific language, and do you know any other languages along side that.

Actually, the latter bit of the question is kind of interesting. Maybe whenever we push our favourite language we should express it as a ratio with respect to the other languages we know. I would suggest that only languages we have been paid for usiing can count, in which case C++ would for me be about 1/30.

anon
A: 

I can't remember for the life of me where I read this, but I believe there was a study done that produced a conclusion stating after 6 months of experience with a given programming language, your knowledge of the language is no longer the bottleneck in your performance.

Having that said, I believe the participants in that study were full-time developers. So, if you figure 40 hours/week @ 4.333 weeks per month for 6 months, you're talking 1040 hours on the job. Subtract 20% for overhead and non-programming tasks (random guess), and that leaves you with 832 hours.

So, you should spend 832 hours with a given language before moving on to the next. :)

Chad Sturtz
Yea I plan on really focusing on whatever language for at least 5 - 6 months, already had that in my head before I asked.
Brad Johansen
A: 
Norman Ramsey
That's a different way to think about it, and a little bit more relevant than time.
Brad Johansen
A: 

Learn python, build a complete working website using it. then learn Ruby and write same website from scratch. then learn haskell but do not think of building something in it ;) till the time you may have already known the answer

A: 

You focus on a programming language only as long as it serves your needs. (1)

If you think that is too obvious, caution! Most programmers stick with the same thing too long, and for what begin to sound like religious reasons after a while. Programming languages are not carved in stone. They change, and adapt, and new ones come along that solve new kinds of problems, and the old ones improve based on modern considerations. The only language of which I am aware that can make any claim towards some kind of mathematical purity is probably Lisp/Scheme, but this is irrelevant, see (1).

Until your needs include something specific that Python doesn't provide, I would suggest that you stick with that. You can explore all the programming paradigms (OOP, procedural, functional) available save runtime macros (a la Lisp), and python covers a lot of ground otherwise. For example, the JVM and .NET are available via Jython and IronPython. Runtime speed is not nearly as big a deal as it is often made out because performance hotspots can be coded in C and trivially integrated. Python code is exceptionally portable.

Regarding your other question, my primary language/implementation is Delphi, because as cool as Python is, rich client-side native Windows GUI apps are easier in Delphi. I use Python predominantly as a utility language, but recently also for the web (Django). My bedtime reading is The Little Schemer and The Seasoned Schemer, as electro-shock therapy against becoming too used to conventional industry paradigms.

The one other language that I would play with (if only I had the time) is Clojure, for no better reason than to satisfy a morbid curiosity regarding whether Lisp finally becomes practical in the presence of extensive libraries; I hope yes.

cjrh
I've read a couple of posts / blog articles by people claiming that clojure isn't going to take off. But I quite like it. Programming Clojure by Halloway is a good book to get started on.
MattyW
Thanks for the tip!
cjrh