

[Solved] What programming languages should I learn? - myusuf3
http://www.mahdiyusuf.com/post/3279728032/solved-what-programming-languages-should-i-learn
I get asked this all the time.
======
Zak
_Also if they are starting out I would recommend a language that enforces
better OO (Object Orientated) practices than python, like Java (don’t hate me
but it’s true)._

I can't say I agree here. I suspect you knew this would trigger some debate.

First of all, the definition of OO is not well established. What defines OO?
Is it encapsulation? Inheritance? Message passing? Jonathan Rees discusses the
issue in more depth here: <http://paulgraham.com/reesoo.html> . Whether OO, by
any accepted definition is a Good Thing is also debatable, and beyond the
scope of this comment.

More importantly, I think imposing that "good OO practice" on a brand new
programmer is a distraction from learning the basics of programming. None of
the boilerplate Java requires for a "hello world" program actually has
anything to do with printing "hello world" to stdout. The beginner has a great
deal of information to absorb, and the meaning of "public static void main()"
is an extraneous distraction from what's fundamentally required to make a
program work, and arguably not helpful for making programs that are well-
structured and easy to understand. If "hello world" requires much more than
"print('hello world')", it's not a good language for learning the basics.

~~~
myusuf3
If you must know the reason behind that statement, was due to the fact at
where I work we use jython, java and python extensively. When I first got
there I was rapid prototyping applications for the end user, based on some
data that had been structured in Java. While this was available through API I
had no inner understanding the objects that I was passing around in python,
which you can get away with in python very easy. Which is why I think its bad
to get into the habit for beginners. Understood that clutter is a bit
extraneous but at the same time necessary, or least until we all move towards
simpler languages like python. :)

~~~
l0nwlf
At my workplace I need to code in Java. After programming in Python for 2
years I am simply hating the experience. Nothing to do with OO, but the
language is a lot more verbose and I personally find it a bit irksome.

------
tel
So ignore his arguments and opinions and take a look at that graph. That's one
of the more informative pieces of "what language should I learn" dialogue I've
ever seen.

Take a look at the github and stackoverflow communities. If you think they're
doing cool stuff, then you can probably feel safe tackling any language in the
upper right corner of that graph. It's a safe bet.

And look what's up there!

    
    
        javascript, python, php, ruby, c/c++, perl
        scala, actionscript, haskell
    

The angle above the regression line suggests whether the language is more talk
(so) or walk (github), the clusters are sensible based on my domain knowledge
of the languages: useful workhorses, weird and developed.

I love the informative display of quantitative information. This is especially
true when everything rhetorically boils down to opinions.

~~~
myusuf3
I not sure whether to thank you or write another post just talking about the
graph I made.

~~~
Tichy
Definitely write another blog post.

------
SamReidHughes
I'd recommend taking the scrolling "who I am" box and making it be fixed
relative to the page or fixed relative to the screen. Its movement makes
reading really annoying and it isn't convenient or anything.

~~~
arethuza
I had a very satisfying few moments destroying that annoying box with "Kick
Ass":

<http://erkie.github.com/>

I was so pleased with myself I didn't even bother reading the article...

~~~
saturdayplace
I can't remember where I first saw Kick Ass, but I immediately implemented it
as a Konami Code easter egg on my company's website.

------
krmmalik
While i didnt drop out of software engineering class, i found it to be a real
chore to learn how to program. That was in 1998-2000.

Since then, i've had a little dabble with html and css and thats about it. On
one or two occassion, i had a colleague try to shove Delphi down my throat,
and i didnt take to it too well.

Up until a month ago, i never wanted to touch or look at code, but i had to
get involved with a little bit of VBA for an important project at work, and
then i also had a little dabble with javascript. I actually enjoyed working
with them both, and im finally able to start reading code, and oddly am
getting very interested in coding now.

I turned 30 about 6 months ago, so its strange to be learning at an age where
most are usually seasoned veterans, but still i'm having fun.

But as an entrant into this area, i've been most intrigued by Javascript, both
for client-side AND server-side (Node.js), and that graph makes me feel much
better for opting for javascript as my language of choice for the short-to-
medium term.

Sorry for the mini auto-biography, but i felt i had to share.

~~~
myusuf3
I am glad that helped! Looks like that graph I made on a whim, is turning out
to be the show stopper.

------
kogir
I'm not really sure that looking only at github is fair. You'll find many more
.Net projects on codeplex, and more of everything (though not necessarily in
the same distribution) at bitbucket and sourceforge.

~~~
hasenj
But in terms of "what should I learn", I'd say github is a better place to
look.

~~~
kogir
Why?

I view all active, open-source projects as equal when it comes to language
popularity. Github is great, but it's hardly the only place to host a repo.

~~~
hammerdr
GitHub has the largest number of repositories (yes, more than SourceForge) and
arguably represents the more 'up and coming' open source projects.

You're particular complaint about .NET projects is more than compensated for
by the Stack Overflow cross-listing.

~~~
tzs
Counting repositories inflates results for Github. Consider a project that
consists of a server, a client, and a library. In Subversion, that would quite
likely be one repository, containing server, client, and lib subdirectories.
People just interested in the client can checkout the client directory from
Subversion as if it were its own repository. (That's the one thing I really
miss from Subversion since I switched my department at work to Git).

In Git, there's a good chance it would be three repositories. One for the
server, one for the client, and one for the library.

------
ashconnor
>Dying Technology - PHP

Wow, that's a bold statement.

~~~
myusuf3
I really do think so. If people aren't loving it anymore its dying. I didn't
say it was dead, they can still make a turn around.

------
spitfire
Cobol, PL/1, spss, modula-2 and fortran.

