Hi: quick introduction, i have an electrical engineering background and have done some very basic programming in school (C++, AutoCAD and LabVIEW).
I got sucked into paul graham's site a few years back about his essay on wisdom vs intelligence and went on to read his other articles about programming without really understanding (because it was an entertaining read) but recently, i had an idea for a startup and came back here to read up on web development and programming.
Could anyone advise me where to start - when i discussed this with my brother, he said programming languages don't really matter and advised me to start with learning php and html to create a basic website first. At this point i am really confused, but am eager to start on my website ASAP.
I'm going to disagree here. I think language choice does matter.
In general I'll suggest you give consideration to the following:
Do you want to learn a language that opens doors for work? Is this a criteria? If you do it might be worth surveying the job ads in your area and find languages that are marketable.
Are you the kind of person who would rather leverage existing libraries that are ready to use or are you OK with building them from scratch if none exist? For example do your require databases connection libraries? auto-email-generation libraries? If you want to leverage libraries then I suggest you spend some time looking at your top 5 language options and see if you can find the some of the libraries you may want to use.
Read some of the language documentation and get a feel on which option provides you with meaningful information. If you intend to leverage libraries maintained by the user community then I'll suggest you take a look at the communities documentation too. And read some language oriented blogs - maybe see if you can collect as many links as you can to compare the languages relative content and then judge the usefulness of them.
See if you can find forums or chat rooms then watch them for a little while. Are they full of harsh critics that would give no solace to newbies? or do you get a sense of helpful people showing consideration for differing views or varying capability sets.
Which of your language options has a growing body of work (both in the core language and the libraries). Is the community getting bigger or smaller? Rank them. Check to see how active the community is and note that having a larger and more active community can be the difference between regularly spending several hours in frustration while not getting anything done vs. having immediate and helpful answers that empower you to succeed.
This may be a lot of work, but I think the effort is worth it. It is an investment after all. Personally, after learning Arc, I chose to go with Clojure. If you're interested you can read my intro blog here: http://blackstag.com/blog.posting?id=5
I think it doesn't matter -- because newbie programmers can't yet make such judgements.
"This may be a lot of work.."
The problem isn't that it's a lot of work. Learning programming is a lot of work. The problem is that it's a lot of make-work much of the time. It's distracting the student from getting started. It's increasing the risk that (s)he'll lose interest and give up.
Forget community, forget growth rate, forget marketing. Just pick a language where you have a mentor to help you out when you get stuck. Then pick a little problem you care about, and figure out the minimum you have to study and understand to get it to work. As you gain experience, be open to learning about the internals of your tools. Don't plan to just use libraries; plan to (eventually) jump into the rabbithole, and learn how they've been built.
None of the languages you're likely to pick will be utterly without libraries. If you pick a language without the libraries to do what you want, your mentor will set you straight pretty quickly. And perhaps your initial project isn't too important; if so just switch to a different one better suited to your language.
Focusing on languages and libraries may cause you to forget that learning is an open-ended life-long process. The difference between 'learning programming' and 'learning java/lisp/blub' is the difference between an education and literacy: if you do it right you'll learn new languages and libraries easily, like a fish taking to water. But if you don't have the fundamentals you'll always program the way I swim. No libraries will save you.
Ok, well I'll still suggest that doing some research and stepping through the evaluation process can only improve your abilities. I also think that the process of researching, evaluating and spending time trying to make an informed decision would not lead to being closed minded, as you are suggesting... I think that might be a little far out there.
And while I agree that it could distract some people, I also think that picking a language with more road blocks and frustration points can do far more damage to a newbies enthusiasm/momentum than some initial research might otherwise cause.
Besides all that, IMHO, it seems to me he's looking for more guidance than what his brother already contributed, being "languages don't matter" (obviously this didn't settle his appetite to understand the options over getting started).
"..the process of researching, evaluating and spending time trying to make an informed decision would not lead to being closed minded.."
'Close minded' implies intolerance. Did I really seem to suggest that? I meant to imply ignorance. All that needs is lack of exposure (or inefficient exposure), not any conscious unwillingness to learn.
"..picking a language with more road blocks and frustration points can do far more damage to a newbies enthusiasm/momentum than some initial research might otherwise cause."
Yeah that is true. Everybody's going to eventually hit frustration points, and some positive associations at the outset can help reinforce a trajectory of persistence. But there's a lot more to the frustrations of programming than language.
Perhaps it's worth providing a blacklist of languages to avoid. I'm curious what would go on your blacklist; no modern language seems particularly egregious to my mind.
I was writing 'closed minded' thinking only in terms of not choosing to learn rather than any intolerance or stubbornness. Poor choice of words on my part - sorry about that.
I don't have a blacklist, but as a newbie, having hit the wall so many times with Arc as my first language I can't help but think I should have done some rudimentary research before I sunk the time and effort in that i did.
I still think Arc is a great first language choice, but setting the expectations prior to the investment would have limited the frustration for me. Of course even for me this was back in the day when you could hope the Arc language community might get ahead of the curve while you were learning and produce enough libraries to fill in some of the missing features like practical and robust database access. These days that would be crazy thinking, IMHO.
Sometimes getting off the ground isn't enough. I think it's better to get off the ground and get some momentum going too. Clojure would have done that for me, but at the time I believe arc was more popular / mature than Clojure.
As a note I still think Arc first then Clojure is an awesome path. With arc you can get up and running fast with a really well written tutorial. And as a bonus, because there's only a simple set of features making up the core you do not have to deal with the extra complexities (such as immutability) right at the beginning. This lessens the burden. But, at the same time, I'm going to suggest that newbies treat arc like a learning language rather than something they can develop real world, deep applications with (Of course this is a general statement that can not account for each persons specific needs).
 simple may require a more in depth conversation here. i.e In application it may mean it's is really easy, but not actually very simple...all this is assuming you've followed Rich Hickey's 'Simple made Easy' campaign.
"..'closed minded' thinking only in terms of not choosing to learn rather than any intolerance.."
Sorry, that was all I meant as well. Intolerance in the sense of 'intolerant of the pains required to learn programming'. There's no negative connotation to that sense, I think.
At the risk of going around in circles, I was referring to all the subconscious reasons people fail to get going with programming, rather than any conscious intolerance.
I actually wasn't thinking of arc at all. You can probably find better first languages (though having the compiler open in a split window is a unique selling point). But it doesn't seem worth optimizing beyond a point. Just pick one and keep going. The test of a first language is not whether you hate it after a while, but whether you keep programming in some language.
I'm focusing on Clojure now though I will keep an eye on Arc developments. Arc is really nice to play with but I agree that Clojure has the traction, even by the yardstick pg mentioned about what it'll take for a language to dominate (community, number of books, power of the language itself, etc.). It also has the whole Java library to support it, even though it has led to some uncomfortable syntax in some cases.
Additionally, I find Rich Hickey has given deep thought to his philosophy re programming and its challenges, and has applied it quite consistently over the years. There is a clear pattern in his approach to the development of Clojure and more recently to that of Datomic, with much of it coming out of the ideas he talked about years ago on the concept of simplicity.
"I'm going to suggest that newbies treat arc like a learning language rather than something they can develop real world, deep applications with (Of course this is a general statement that can not account for each persons specific needs)."
Well, that's not entirely true... If you're talking about Arc 3.1, then of course it has a huge lack of libraries.
But Arc/Nu has access to most of Racket's libraries: for instance, "re.arc" just uses Racket's regexp support to implement regexp matching.
As another example, in an internal application I wrote in Arc, I had to parse XML. I used Racket's built-in XML parser which also has an option to use "X-Expressions" which is basically XML represented as S-expressions:
I have to say, even though I don't like Racket the language... Racket the infrastructure and libraries is top-notch. I suppose the same has been said about Java.
So, although I agree with you that Arc 3.1 is lacking, that's not necessarily true of forks like Anarki, ar, or Arc/Nu. And I think the only reason Arc 3.1 is lacking is because pg has been busy with non-Arc things.
That's one major benefit Clojure (and other languages) have over Arc: they're still being actively maintained.
I still agree with you in principle, though, that a language like Clojure, Python, or Ruby would be easier to get up and running, due to their larger community and wider availability of libraries. In particular, even though I haven't used it, Clojure looks like a very nice language, from the small bits and pieces I've seen.
I would too, even though I've come to dislike mutability. Ruby has the community, the libraries, and the features. It's also a fairly consistent and clean language overall. I'd rank it at roughly the same level as Arc, maybe a tiny bit higher.
Ruby syntax is quite consistent and clean, and its support for closures very handy. I really like it.
Clojure has a strong philosophical bias for immutability and a functional approach, but has a slightly higher overhead with its combination of Lisp and support for Java. I think it has a bright future, despite pg's view that the jvm isn't what the 100 year language will be built on. :)
"And while I agree that it could distract some people, I also think that picking a language with more road blocks and frustration points can do far more damage to a newbies enthusiasm/momentum than some initial research might otherwise cause."
That's a good point. Newbies can get turned off when things seem opaque.
"Just pick a language where you have a mentor to help you out when you get stuck."
Good point. In my experience you really need someone to open the door for you, even if only just. That's what draws you in. Once in, momentum takes care of many things, but if you don't get led in at this stage, you could give up easily. I lost a good number of years without such a mentor.
thanks for being so helpful guys. My brother set me up with a server and am currently learning PHP. FYI, I am interested in learning programming as a hobby. Right now, i am trying to understand the fundamentals of computer programming through some pretty basic tutorials.
This decision of yours triggered me to post about my own PHP woes just now, but just so you know, I totally understand the value of having someone on hand to help you out. I think you're off to a good start, and I hope programming clicks for you. ^_^
I suppose Arc would also be a decent starting point, given how Arc was built around its webserver. Unfortunately, I don't use Arc for its webserver, so I can't really help you with that. There are a few other people floating around on this forum who have more experience with that sort of thing.
Like akkartik said, feel free to ask any questions you have, whether related to Arc or not. We'll do our best to answer them.
a) Anybody can flag a story, and that somehow causes spam to be flagged in automatic fashion.
b) A few users are given moderator privileges and the ability to mark stories dead or users ignored. When a story is marked dead it is visible only to the submitter. When a user is marked ignored all his stories are automatically marked dead.