views:

1252

answers:

12

I'm a middle school student and I've taught myself to program. I've learned to think in objects and algorithms, how to use loops and ifs and functions and variables. I've also learned PHP, and to a lesser extent Rails and Django (the kinds of things I think of to build are usually database-driven web applications, and I really enjoy doing so.)

As an adult programmer I want to build web applications (not brochure/CMS sites) that facilitate communication and organization, probably for businesses. I just don't think I'm cut out to work for a start-up, trying to win the lottery; something like 37signals maybe, but companies like that (small, sustainable, make a profit) are (from what I know) pretty rare. So it seems like I'm headed for corporate life.

The problem, for me, is that the companies that want these applications usually require Java or .NET. I have tried to work with Java for web development and found it incredibly difficult and time-consuming. So much time must be spent and so many lines must be written just to do simple things that I cannot even imagine what it must be like to do something complex. I'm a Mac and open-source fan, so I'd really rather not do .NET.

That said, I probably could learn to do Java web development. My question: is it a worthwhile investment of time? Or will things be so different by the time I'm out of college (2017) that I may as well use what I like now and learn whatever the Enterprise wants closer to when I'll be working for real?

Or is there a market for PHP, Python/Djanga, or Ruby on Rails for custom web app development in non-startups?

+4  A: 

Wow, 2017. At this point, it's probably best just to write code using whatever technologies or languages or systems happen to interest you at the time. Everything will change in 9 years, and you'll have a wide amount of experience that you can apply to whatever comes up in the future. The basics of programming haven't changed for 50 years, but the technologies change all the time.

Enjoy the freedom you have today to write whatever kind of code you want. Don't beat yourself up learning some technology that might fall out of favour before you have a chance to use it for real.

Greg Hewgill
+10  A: 

For heavens sake, no!

Write something "fun", something that makes your friends laugh, or automate your Dads business. Something like that. Write a game, write a compiler, build a robot.

Mind, I LIKE JEE and all that enterprisey stuff. Large systems are interesting, etc.

But not really "fun".

In time, trust me, you WILL get your fill of this kind of thing. Right now, if it was me, I'd be doing something more interesting with a quicker turn around so I can move on to something else.

Will Hartung
+1 because I had the same answer that starts with "For heavens sake.." in my mind
bLee
A: 

Yeh...2017 it's a pretty long time.... Bear in mind that you can always use the express editions for .NET. They are for free and you could share your code under any open-source license ;)

http://www.microsoft.com/express/default.aspx

afgallo
+1  A: 

Greg is right.

What I would say you want to learn is how to learn to code :)

Focus on algorithms, code flow, data structures, etc.

I can almost guarantee you the languages of today will give way to something else.

I'd also stay away from high level frameworks like Spring, Hibernate, etc. at this point.

Don't get me wrong, I use them everyday now, but I'm glad I know the fundamentals.

CubanX
A: 

it is worth learning anything at any time

+2  A: 

I wouldn't worry much about what's popular today, if I were you. In a sense.

When I was in middle school, I used to program in Pascal and BASIC. Those two languages are now practically extinct.

I'm not suggesting Java will become extinct in 9 years, but new languages will emerge, and trends will change. You'll have more than enough time to learn what the corporate world loves in college, and believe me, you probably won't even care about it when you graduate from college. I didn't, and I still don't.

There's a huge difference between a programmer for whom programming is just a job, and a programmer for whom programming is a hobby. Seeing how you started programming in middle school, it's obvious that you are, and will hopefully be for the rest of your life, in the second group, and that's a good thing.

Use whatever language/framework/etc. you think is fun, and try as many of those as possible. After a while you'll be surprised at how fast you can learn a new language, and when you graduate, there will be many languages you're fluent in. Then the decision will be about which one(s) you want to use.

Can Berk Güder
A: 

Trying to predict what particular skillsets to have in 2017 is not reasonable. A lot can change in 9 years. Chances are, the Java and .NET platforms will be very different.

Learn and experiment with a variety of tools and languages. If you have a firm understanding of core programming concepts, you should be able to learn/adapt to "the" technology stack of the time.

It sounds like you are already doing a great job of sampling languages and technologies. Just keep it up.

Mads Hansen
+1  A: 

I would absolutely not worry about what will be marketable in programming in 2017. Even though it sounds like you've got what it takes to be a programmer, there's no way to predict with any certainty what will be "fashionable" in 2017. The industry does chase a lot of "fashions", and you'd be wise to be skeptical of such things.

A couple reasons not to learn J2EE/Spring/Hibernate in high school:

  1. Yes, these technologies are fairly heavyweight. Unless you've got a summer job lined up to use these technologies, why not have fun programming what you want, like games? BTW, the World of Warcraft plugins are written in Lua.

  2. I would point out many many legends of the software development (like James Gosling the father of Java) played around with lots of languages and platforms before they settled on what they're known for. Enjoy your youth to explore new ideas. Time really is on your side.

  3. I would definitely explore the fundamentals of computer science especially discrete math. Why? Every computer language or framework merely expresses a concept that hasn't changed all that much in the last 50 years. If you get the concepts, then all you have to notice in this business is how the furniture gets moved around as important of a detail as that is. If you can get into a college that uses the Structure and Interpretation of Computer Programs as a required course for its majors, I would go there.

  4. Notice I did not say you should not learn Java. It is worthwhile learning, because it is the current lingua franca of the software world.

  5. Most importantly your interests might change. You might not want to be a corporate programmer. You might be lucky to write programs that you want for your own startup. Or you might end up an academic. Or you might not end up being a CS major. Etc. etc. etc. I certainly ended up as a developer through a circuitous route, and I'm hardly atypical.

Alan
A: 

My experiences were similar to that of Can Berk Guilder's. When I was around your age, I learnt BASIC first, then Pascal, then Forth (on a Mac IIcx running System 6, lol). None of those are really used that much - but the more stuff you try out the more you can skip around the popularity contests and actually code something ! For that reason, I suggest either Python or java - but if you learn java, don't spike your coffee with a ton of extra crap ! No Spring, Hibernate, etc. just java.

C# is also a bit useful... since you are young and have time, try your hand at Forth or assembler - even if you don't get it at first, you will learn so much more about exactly how the computer works by learning a low-level language. Nowadays, there is so much information out there...

If you like web development, focusing on java + ajax - or even Flex - might not be a bad idea. There is a cool book put out by Apress call "Learn How to Program Using any Web Browser" which will walk you through many traditional computer science concepts using javascript. Plus, if you have a computer with a web browser and a text editor, you can experiment nearly painlessly, and see changes you make happen very fast.

Since you already have a (modern ?) Mac, why not try learning objective-c/iPhone development ? A great deal of activity is taking place there. Plus, it would be wicked cool to be able to literally take your portfolio of apps with you and show people what you can do without needing a computer to do it... if you decide to go indie, know that the Mac developers historically have had much better conversion rates (i.e., more people who download demos actually buy) than Windows developers.

Also, you may want to take the time to learn troubleshooting - a very useful skill that not many people do well, unfortunately. Try Troubleshooting.com and look into that...

Finally, don't forget to check out your local library ! Not every little thing that will help you is on Google, and the more you learn about how to find information and research, the more valuable/employable you will be - even if you wind up in a totally different field ! (For the record, I was in finance until recently...)

Hopefully I have not bored you to tears, and others have made some helpful suggestions - have fun and enjoy the ride !

EDIT : Also, check out this article : http://stackoverflow.com/questions/194812/list-of-freely-available-programming-books

Damien
A: 

You've got sooooo much time ahead of you. If you maintain the pace you seem to be going at now, you're going to find yourself in college with a serious advantage over your peers. A lot of people enter college with little to no programming experience, so if you have any at all you can get ahead very quickly. Basically, no matter what you do, you'll have the upper hand by starting as early as you have.

That's not to say you should check out and screw around. The fact that you know about and are an active member of this website is a good sign. Stay casually up-to-date on current trends and dabble in whatever languages and frameworks you find interesting or useful.

I can't stress the importance of your early start enough. You've started yourself down a path with infinite potential. Provided you enjoy it, stick with it and reap the benefits in 8 years or so.

Evan Meagher
A: 

Learning technology is great. But if you really want to get a leg-up in life when you're older, you're better off polishing your people skills. No amount of technical expertise will save your job, contract work, or reputation when you're faced with hard times, but knowing people that are willing to help you will.

Sure, there are brilliant programmers out there, and they will never be for want of work, but let's do the statistics. Out of millions, what are the odds that you'll turn out to be "the one"? I'm not saying you're not talented in your own right, or that you lack any ambition - far from it! - but rather, it's a very, very tight market that has matured in 5 decades, and the demands placed on you personally will be very high. Many "get out" as they get older and this is something that alot of people are not willing to talk about. Do you have an exit plan? Or do you see yourself doing this until you're 80?

Yes, what I'm talking about is a career. And that's what everyone else's answers around me will be rooting for you to do. Go for it! Grab that brass ring, and make the most of it! Pursue your skills, keep learning, sharpen them to a razor's edge - but don't go lacking for skills with other people.

Avery Payne
A: 

I am a programming teacher in a NJ high school. I used to be a programmer working with small machine language programs for embedded microprocessors in credit card readers and bar code readers. I try to teach my students what the term "machine" means. I believe it adds much to their understanding of computing in general. While you are so young, I think you should try to get as close to the machine as possible. Learn a little machine code. Make it work. Learn about microprocessors, memory interfacing and other basic hardware concepts. On a PC, the debug program allows you to enter and execute little programs. Maybe build a small computer just to do it. Get a catalog from Electronics Express in Avenel NJ1-800-972-2225. They have small development kits that permit you to play around with small microprocessors. I order stuff for my classes from their catalog. Gates, inverters, flip-flops and decoders are all cool things to play with while learning really important concepts. Digital electronics is endlessly fascinating. I think you would find it interesting as well as valuable to your long term goals. There is a fair amount a support materials on the web. I have a lot more I could say here, but I won't for fear of boring you. If you are interested try emailing me at [email protected] Don