Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 6 years ago.
Improve this question
I'm stepping onto the path of coding, for web services (full stack), after being a generalist in IT ops for many years. Ruby, Python, C# and JavaScript are interesting and Launch School looks like it has an excellent approach and curriculum for learning full stack, starting with Ruby on the back-end.
What about C# and .net Core?
However, a friend recently got me interested in C#, which is apparently a beautiful language to work with. The release of .net Core last month made this even more attractive. However, it's not a bad idea to start simple and to learn to program first and, unfortunately, C# is inseparable from .net. All the code examples appear to have .net throughout and maybe this makes it not so good for beginners to learn programming concepts.
The structure and strict typing of C# is attractive to me, but so is the 'simplicity' of Ruby and other dynamic languages. Ruby's OOP and the opinionatedness of the language is also attractive. Actually, there appear to be compelling reasons for each language.
On to JavaScript
So, continuing research shows that there is a strong case for JavaScript as a great first language, which will extend into many areas (web front and back end, DevOps, etc) and create, as Jeffrey Snover puts it, 'a virtuous cycle'.
JavaScript looks good, too. It seems to be less verbose than C#. However, it has the disadvantage of not having C#'s strict typing, nor Ruby's opinionatedness, to help the programmer write better code. It's so loose. ES6 and TypeScript go a way towards resolving this problem and initially I wanted to just learn TypeScript. But, I'm a fundamentalist and so this just doesn't feel like the right way to go.
Possible path
This leads me to a path more or less based on:
learn to code, using ES5 (lots of available resources starting
with Eloquent JavaScript, adding Speaking JavaScript, JavaScript:The Good Parts, etc);
add Smalltalk into the mix, as this sounds like a great baseline and is, by all accounts, a beautiful, simple/direct language with a pure OOP focus;
learn CSS and HTML, JSON, ReST;
learn TypeScript, ES6 once I am comfortable with ES5, including having avoided many of its pitfalls;
learn Node.js, and other JS variants, as required;
add frameworks, as required.
Anyway, JavaScript makes sense for full-stack, 'everything' web services. Great to learn a non-Microsoft stack, too.
Thanks,
nick
EDIT:
I have listened to a podcast, in which Kyle Simpson, Ashley Williams, et al, are talking about beginners using JavaScript to learn programming concepts. And, they are praising the lack of abstractions and sugar in ES5 and comparing this with the introduction of abstractions in ES6, some of which obscure aspects of the language from beginners.
In the context of ES6 making it harder for beginners they seem to point pretty strongly at Classes and that the implementation appears to be an odd fit for the language. But, they also mention how awesome Destructuring is and how this makes it easier to learn. It's an interesting discussion.
Ashley also gave a talk at jsconf2015 (link on the page linked to above) in which she looks at ES6 in the context of using it to learn programming concepts.
Javascript is a great language but it is also very confusing and there is a lot of bad articles out there. Unlike the other answer, I suggest you learn ES5 first because all the books you have mentioned are written in ES5. You don't want to confuse yourself with arrow syntax and other syntactic sugar. You will also appreciate ES6 more once you suffer a bit with ES5 but I believe that is the necessary part of learning. It would also give you a better perspective on to why these new features where added to ES6.
When it comes to learning Javascript, my opinion is to choose multiple sources, like videos, following the right people on twitter, listening to podcasts, articles etc. Here is a good place to guide you on your journey: http://jstherightway.org/
The books you have mentioned are great but I would add two more books to it. Javascript the definitive guide and you don't know JS.
I have read Eloquent JS, The Definitive Guide and Javascript the good parts but I felt that I truly started to grasp JS after I read "You don't know JS - by Kyle Simpson" https://github.com/getify/You-Dont-Know-JS
I highly suggest his video course "Advanced Javascript for serious Programmers". It really opened my eyes to the javascript paradigm.
Don't jump on frameworks because you will wasted a lot of time on configuration instead of learning actual javascript.
At the time you are proficient in JavaScript, ES6 will most likely be fully supported. I would go straight to ES6. Then, I would learn JavaScript framework, like Angular 2.
ES6 includes almost all features of ES5, they are not entirely different. There is a very good ES6 description available.
When you see :
ES5
[{lb:'Email',val:'ab#kg.co.sa'}].map(function(e){
return '<div><label>'+e.lb+'</label>'+'<input value="'+e.val+'" />'+'</div>'
})
Can be written in ES6 :
[{lb:'Email',val:'ab#kg.co.sa'}].map(({lb,val})=>`<div><label>${lb}</label> <input value="${val}" /></div>`)
You will take the decision by yourself.
==> The elegance & the productivity are with ES6.
Related
Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 6 years ago.
Improve this question
I am sorry to ask this type of question.
but i am extremely confused here,i have gone through another sites to find the answer .
but not getting any proper answer .
Please explain me.
Thank you
I do find this answer from #Elisabeth Robson on CodeRanch pretty informative..
I think this is one of those questions which doesn't have a definitive answer and you're likely to get different answers from different people depending on what they think of as "lightweight".
Here's my answer: I think JavaScript can be thought of as lightweight because (at least up to ECMAScript 5) it isn't a particularly "big" language with many many constructs. It's actually a fairly simple language for the most part. Now, each new release of the language inevitably adds more "stuff" to it, which makes it less lightweight. Personally, I don't like that inevitable march towards more "stuff". I like when languages are lightweight: that makes the language easier to learn and understand.
A related way to think about whether a language is lightweight is: is the interpreter/compiler/execution environment for that language simple and fast? Which is really only possible if the language itself is simple. JavaScript engines have become a lot more complex in the past few years, but the tradeoff is that executing JavaScript code has become a LOT faster. I really have no idea how a JavaScript engine compares in complexity to, say, a Java compiler/runtime so I don't feel qualified to really comment on that end of it.
Another way to think of this is to consider the language "ecosystem": how many libraries and frameworks are built for it? While libraries and frameworks are useful, they can make a language feel less lightweight, because if using those libraries and frameworks becomes a necessary part of working with the language (your employer requires it, or your co-workers, or "everyone is using library X"), then again, it's more "stuff" to wrap your head around. In that sense, JavaScript becomes less lightweight by the day as more and more libraries and frameworks are released.
In conclusion, I'd say that I think the core JavaScript language is still fairly lightweight, but the JavaScript ecosystem is becoming a lot heavier by the day.
There are a few things this could refer to. Could be the fact javascript is fairly high level, weakly typed, or not very complex to write. Either way, it does seem to be a slightly subjective and vague term.
The fact is is high level simply means it has quite a few abstraction layers that differ it from machine code. C++, for example, is more low level, and getting something done in C++ takes more lines of code, but executes quicker.
Javascript is also weakly typed, meaning you do not need to specify data types, return types, etc. This is good and bad. It ends up making development quicker, but can cause more bugs that are not immediately recognised by the compiler. Also, it can remove reading clarity.
Finally, Javascript is arguably easier to write, and understand, then languages such as Java, C++, etc. It is has less methodologies to go about a given task.
Javascript is considered as light weight programming language .One of the reasons, is because it does not have any variable types unlike other languages. In javascript everything is considered to be as an object.
I know I'm coming at this the wrong way. You're supposed to learn Javascript first, then start looking at Coffeescript when you get tired of braces and variable declarations. Me however, I'm a somewhat experienced Ruby and Python programmer but with zero Javascript fluency who looks to get into web scripting (mainly through Rails).
I'm convinced that Coffeescript is the way to go for me, but I'm hard pressed to find a tutorial that does not assume significant Javascript familiarity. Most of the tutorials I have seen explain Coffeescript's peculiarities in detail only to gloss over such minor topics as how to actually write web applications.
So, do you know of any Coffeescript tutorials for people who don't know JS to begin with?
You probably don't want to hear this, but I'm going to say it anyway: you should still learn JavaScript first.
JavaScript is a little unique from other languages, in that it has a monopoly over browser scripting. There is currently no other language that can be used in a browser (unless it uses a plugin, or the interpreter is in JavaScript!). As such, for any project that needs to do any amount of client-side scripting, JavaScript knowledge is a must.
You're probably thinking "Hey, I know Python and Ruby, and I never had to learn C or assembly!", which is of course true. But, those language never had a monopoly over their domain. Python can be used for the same things as C, in many cases. The platform doesn't care what language you use, as long as it supports it.
And the browser platform only support JavaScript.
CoffeScript is an abstraction of JavaScript. Although CoffeeScript is compiled into JavaScript, when you're trying to figure out that obscure JavaScript error, or debug a generated function, or are wondering why there are two levels of unnamed function nesting, you're going to want to know what's really going on.
Now, I'm not saying that you have to become a JavaScript Ninja (although I'd recommend it), but what I am saying is that you should come to grips with the actual web language first.
Learn JavaScript, learn its concepts (it's a very fascinating language, in my opinion, once you get past some of the deficiencies), and then use CoffeeScript to abstract away the technicalities.
Since you did ask for a tutorial, though, here's some: First, the Mozilla guide to JavaScript is quite nice. If you want some more advanced topics, there's also an interactive tutorial made by John Resig. And finally, here's a bunch of CoffeeScript tutorials that you probably already know about.
I suggest the free online Smooth Coffeescript book (based on Eloquent Javascript).
No previous programming knowledge is required. CoffeeScript lets you
write web oriented applications simply and elegantly. It is closely
related to JavaScript but without its quirky corners.
Smooth CoffeeScript is a book about CoffeeScript and programming.
Start with programming fundamentals, learn about functional
programming with Underscore and problem solving, study object
orientation and modularity. It covers client/server web apps with
Canvas and WebSockets.
I had a background in Python, ActionScript and Java. I started directly learning CoffeeScript with no intention of learning JavaScript. I learned a bunch of JavaScript along the way but I think it's perfectly OK to set out to learn CoffeeScript directly.
I was first attracted to Smooth CoffeeScript because it claimed to be targeted at folks trying to learn CoffeeScript directly. However, the style of writing was not to my liking. YMMV.
Besides, with my Python background, I found that I didn't need much help with the syntax. I got all of the syntax help I needed directly from he CoffeeScript web page. I mostly needed help with the platform (cake, development environments, testing, etc.) which is covered quite well on the CoffeeScript web page, and what else I needed I got from a couple of other books. My favorite teaching book is The Little Book on CoffeeScript (read in an hour) and my favorite reference is Trevor Burnham's Pragmatic Bookshelf book on CoffeeScript which taught me jQuery from the CoffeeScript perspective.
Another thing that helped me ramp up quickly was to fork/upgrade a few of my own tools in CoffeeScript. I forked the CoffeeDoc repository on github to create my own version and I eventually re-wrote it to create CoffeeDocTest which is like Python's DocTest except for CoffeeScript. My upgrades to the Coda syntax mode for CoffeeScript were accepted back into the master branch via github's pull-request mechanism... after a code review and some cleanup. Looking at someone else's code really helps you learn the idioms. Getting a code review from someone in the know helps even more.
Your question doesn't make a lot of sense to me because CoffeeScript is JavaScript. To know one is to know the other. It may sound counter-intuitive for me to suggest that the best way to learn CoffeeScript is by cracking open a JavaScript book but the languages are one and the same.
I know they look different, but the differences end at the syntactical layer[1]. Add some semicolons, curly braces and parens to CoffeeScript and you're more or less there. So go and learn JavaScript, and you'll find you're learning CoffeeScript too.
You could also learn CoffeeScript and incidentally pick up JavaScript. This may be a little bit more difficult though, since until source mapping is implemented, debugging can only be done in JavaScript (and you'll be debugging a lot, I assure you ;-)).
[1]: Apart from maybe class definitions which are slightly more complicated.
This is a quote from the O'Reilly Javascript Patterns book:
JavaScript is also an unusual language. It doesn’t have classes, and
functions are first class objects used for many tasks. Initially the
language was considered deficient by many developers, but in more
recent years these sentiments have changed. Interestingly, languages
such as Java and PHP started adding features such as closures and
anonymous functions, which JavaScript developers have been enjoying
and taking for granted for a while.
and that's it. I really don't understand how Javascript was considered "deficient" before, and now is not, because other languages like Java or PHP has added closures and anonymous functions? Aren't they just generic computing concepts? Aren't they available in other languages like Ruby? So I don't really know how Javascript is now not "deficient" because Java and PHP added closures and anonymous functions as their features? Why is that?
I think what it's referring to is that in the past many developers considered JavaScript as a 'toy' language and only used it to do quick Web UI tasks like validation etc. without bothering to understand how the language really worked.
In recent years the 'hidden' features of JavaScript such as closures, prototypal inheritance etc. have come to the fore and people are now taking JavaScript much more seriously as a 'real' language.
So JavaScript was never really "deficient" but people may have thought that it was due to their misconceptions about the language.
I personally think it's a poor editing job.
The paragraph should have read (bold addition is mine and is just a suggestion on how
to read it):
JavaScript is also an unusual language. It doesn’t have classes, and
functions are first class objects used for many tasks. Initially the
language was considered deficient by many developers, but in more
recent years these sentiments have changed due to a better and more uniform browser support, extensive work done by various ECMA editions and evolution of various JavaScript frameworks. All, or much, of that change is a direct result of ever-expanding movement of software products to the Web and growing demand for a lightweight language for mobile applications (this one can be somewhat argued).
Interestingly, languages such as Java and PHP started adding features
such as closures and anonymous functions, which JavaScript developers
have been enjoying and taking for granted for a while.
For years, JavaScript has been known to only be a browser language, for (simple) features that required more dynamic and/or flexibility than offered by HTML and CSS.
For several years now, JavaScript evolved as a language and as platform, offering powerful libraries, which also removed certain cross-browser incompatibilities. With rise of these libraries, community actually only started to learn how to use some powerful concepts of JavaScript, such as closures and prototypal inheritance.
They have not been widely used nor known even to JavaScript developers before, since JavaScript is in its basics very simple language, and most developers didn't even have to learn it as you'd learn Python, C or Java - all they had to look at were tutorials and many of them didn't include these language features.
Duo to the increase in popularity, JavaScript (officially ECMAScript) has received several 'editions', where features have been added to the language itself. Latest edition (still under development) will introduce some radical novelties (considered are classes, module system, iterators, algebraic types among others), so JS will become even better, more structured and more easily maintainable language.
JavaScript is raising in popularity on server side also (node.js), and proves to be easy, fast and enough powerful language to do (almost) any kind of work. Node widely 'abuses' probably its best feature - asynchronous nature of JavaScript. That is not new, many languages have async libraries, but as Ryan Dahl said in one of his earliest speeches on node, JS is perfect for it. And mainly because of the closures and other concepts built into it.
So final answer would be the author of the book you're quoting has poorly expressed his thoughts or is simply wrong. It was a toy language and didn't mean to be used for such variety of use cases as it is today. But it evolved, just as Java or PHP did (don't forget PHP didn't have OOP support that seems so obvious now until v5). Other languages are just picking up goodies that JavaScript proved to be more efficient for certain use cases. Overall, my thoughts are that JavaScript hasn't been used properly from the start, and that's the case it had been called 'deficient'. Now developers got chance to explore its magnificence.
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
Questions asking us to recommend or find a tool, library or favorite off-site resource are off-topic for Stack Overflow as they tend to attract opinionated answers and spam. Instead, describe the problem and what has been done so far to solve it.
Closed 9 years ago.
Improve this question
I'm struggling to find a way of writing good JavaScript code that would be efficient, widely accepted by other developers and not very ugly.
Until recently, what I used were just literal objects and bits of jQuery but after reading Douglas Crockford's "JavaScript: The Good Parts" I now fully realize that there's more to JavaScript than AJAX, DOM modifications and simple animation.
The problem is that JavaScript seems not much standarized. The amount of OOP/inheritance patterns available overwhelms me. I'm not used to every framework/library providing its own impementation of inheritance. I also don't want to make a wrong decision regarding such things because this would mean rewriting all the code in case of some problems.
So what I'm looking for are existing open source web applications that use JavaScript heavily, if possible on the client side, to see what patterns are used in real projects. I would like to see the code of web applications, not frameworks or libraries. I don't mind though if those web apps are based on some framework (and if it's Dojo or RequireJS it'll be even better because I'm using them ;)
What I always recommend to anyone who is interested in this kind of thing is: STICK TO WHAT YOUR TEAM DOES. If they use camelCase for methods, you use it. If they use snake_case for variables, you do it. If your team prefers spaces over tabs; use them.
Never go into a stablished team with standardized style changing things because it looks better unless it's causing heavy problems.
If you're not working on a team and you're interested on using a coding style; then use the style of the libraries you use the most.
If you use jQuery stick to jQuery Coding Style Guidelines
If you use Closure Library use JavaScript Google Coding Style
If you use MooTools Library use MooTools Coding Style Guideline
Organization wise, Closure is the best.. but to me somehow it feels like I'm reading JAVA instead of javascript. Go figure.
Yep. There are a few JavaScript gurus that have written alot about how to write JavaScript, about prototype based OOP with JavaScript, even about how indenting and naming variables should be done.
However, if you are looking for a large implementation of JavaScript to study as an example, I would look for HTML5 game implementations. It's practically guaranteed that you will find a large enough, well written example that is not minified.
If you are interested in JavaScript standards I would check out commonJS. They have a lot of good ideas about how JavaScript should be done.
BravoJS is a good module implementation for the browser.
As for examples jQuery's source code was mentioned in the comments. jQuery does a good job but it is I would also check out Narwhal JS for examples of how things should be done.
Here is a good free design patterns book that I found helpful Essential JavaScript And jQuery Design Patterns.
You wont find one solution to your problem and that is how JavaScript is designed. I would recommended experimenting. I find that Douglas Crockford has a lot of great ideas but that does not mean you have to follow him to the letter.
A good project is : http://impactjs.com/
A good reading is : http://addyosmani.com/blog/essentialjsdesignpatterns/
Great question. I couldn't find one example of a well written object oriented open source application. Tiny MCE was so-so, but I wouldn't consider it well written: http://www.tinymce.com/
However, I have written clean, well factored object oriented javascript at work. It's proprietary so I can't share it, but I can explain what worked for me to learn how to do that:
1) Read the mozilla javascript object oriented programming tutorial. Their explanation of javascript inheritance is exactly what google closure uses. Personally I think what Crockford calls pseudo classical is easiest to read and maintain since 4 of the 5 other programming languages I know use classes (java, c#, python, and php. perl's the oddball here with no classes either).
https://developer.mozilla.org/en/Introduction_to_Object-Oriented_JavaScript
2) Read the book 'Object Oriented Javascript' by Stoyan Stefanov.
3) Take an existing procedural javascript code base and refactor it to objects. Use the tips in 'Clean Code' by Robert C. Martin as they apply to any programming language.
4) Structure your code so it has many different files similar to how you'd use classes in a language with classes.
5) Implement dependency injection without an IOC container by creating all your objects at a top level and feeding them down into the objects that depend on them.
There's a lot more, but hopefully this is a helpful start.
Here is what I feel is the correct way to implement inheritance in javascript. this is from the google closure library:
goog.inherits = function(childCtor, parentCtor) {
/** #constructor */
function tempCtor() {};
tempCtor.prototype = parentCtor.prototype;
childCtor.superClass_ = parentCtor.prototype;
childCtor.prototype = new tempCtor();
childCtor.prototype.constructor = childCtor;
};
Coincidentally, today on SlashDot there is a review of the 6th edition of Javascript: The Definitive Guide, which the reviewer there says "retains its crown as the ultimate reference resource for JavaScript programmers." It's 1,100 pages.
Yes, this isn't the sample app you were seeking, but the book does have a lot of examples and advice about best practices.
There are several ways to learn how to write good JS code.
You can read books. The best one about organization of JS code and about common patterns including inheritance is JavaScript Patterns by Stoyan Stefanov.
Another good way to learn is just look through the excellent code of other developers and using it. The best library I've seen from the point of code organization and using of patterns is Google Closure Library. It is used internally by Google in the RIA like Gmail Google Docs.
A kind person in irc suggested this eBook and I found it verry helpful.
Learning JavaScript Design Patterns
A book by Addy Osmani
http://addyosmani.com/resources/essentialjsdesignpatterns/book/
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 11 years ago.
I am trying to do this, I'm a full time front-end dev and am aware that I am yet to achieve this.
When I am referring to OOP skills I am referring to understanding and being familiar with concepts like inheritance, polymorphism, encapsulation, abstraction.
I am aware that it may be more likely to achieve what I'm after by focusing on another language in my spare time. This is the plan, but I'd be really intrigued to hear if anybody has managed to achieve this purely through JavaScript and how you did it.
It'd be even better to hear from strong OOP developers from who use different programming languages to know if they have worked with developers who have managed to achieve this.
Feedback:
Just in case people are wondering where I went from this -
I've taken a closer look at what
prototypal inheritance means and how
to use it better.
I've decided to spend more time properly
learning ruby (could be any language
that is class based) in my spare
time.
I've decided to experiment (nonchalantly) with different
languages so that I can gain not the
intricacies/exact syntax of them, but
more of an overview of how they
approach OOP. I've started with Self, Scheme is next on my list.
Thanks a lot for the really helpful answers.
First, let me preface this by saying JavaScript is one of my favorite languages. I love using it, and I love its power.
JavaScript certainly does OOP, and once you wrap your head around it, it does OOP reasonably well. But I wouldn't recommend learning OOP via JavaScript for the following reasons:
JavaScript uses a kind of bastardization of Prototypal inheritance and Classical inheritance. In JavaScript, you don't define classes like you would in a classical language, but there are still remnants of classical inheritance - like the new keyword. This is extremely confusing for people who have wrapped their head around classical OOP.
JavaScript doesn't really have a normal concept of private and public variables like a classical language (like Java) does. Sure, you can define public and private variables, but the methods are kind of esoteric. Because JavaScript doesn't really do public and private variables 'out of the box,' the whole idea of data hiding and encapsulation doesn't naturally apply.
JavaScript can certainly do polymorphism, but it doesn't do it through regular function overloading/overriding. Instead, a function or method can take a variable number of arguments that can be added on the fly at runtime. Again, it can do polymorphism, it just doesn't do it like most of the more mainstream and popular languages.
Like I said before, I love JavaScript, and I love working with it. You can certainly do OOP in JavaScript, and you can certainly learn OOP by learning it from JavaScript. But I think that is an uphill battle.
I think you'd be better off learning OOP from Ruby first, then going to JavaScript. Ruby and JavaScript have different syntaxes, but the power and 'feel' of the languages are very similar. You can do similar things with both languages, and both languages have similar features and support similar paradigms.
There's no reason you can't develop strong object-oriented skills via Javascript - but Javascript is a prototype-based object-oriented language, which is quite different from other mainstream object-oriented languages (C++, Java, etc.), which are class-based.
You should familiarize yourself with both models as soon as you can (once you've mastered the basics of javascript), so you can learn from discussions about class-based models without too much friction.
Finally, in case you aren't already familiar with Douglas Crockford, I highly recommend visiting his site, reading his article JavaScript:
The World's Most Misunderstood Programming Language, then reading his book Javascript: the Good Parts.
I mainly develop in C# and JavaScript.
Unfortunately I haven't met somebody who has only developed in JavaScript that has strong OOP skills.
It should definitely be possible though. JavaScript has all of the OO concepts baked in. You just have to learn how to use Prototypal inheritence properly to achieve your goals (or learn through a Framework like MooTools, which kind of defeats the purpose).
Many developers argue that JavaScript has no realy OOP functionality and some say you shouldn't even use the OOP functionality that is included. I also coded a lot in JavaScript objectoriented. But I also coded a lot in PHP and Java with all the OOP techniques around.
Important things that missing in JavaScript are static or final classes as well as interfaces. You use them quite frequently in languages such as Java.
I would say that if you only want to learn what OOP means and how it works in small cases, than JavaScript is enough. To really learn OOP im complete, you need to learn a language like Java, C++, Ruby or even PHP.
If you want to learn OOP, but you want an "easy" scripting language to do it in, you would probably be better off working in ActionScript via Flex.
I'm gonna go with "No".
I've worked with several javascript devs, and I could always tell which ones of them where native to JavaScript, and which had a Java/C#/Delphi background
BTW, this is not a dis of javaScript, just an observation.
I suggest you to practice with languages that let you create high level patterns without too much pain... like, why not, Python?
As for Javascript, this post by our Joel is quick to read and goes to the point:
Can Your Programming Language Do This?
Im myself found "JAVA" as the strongest object oriented program i have encountered, i truly recommend it to develop OOP skills.
Good luck mate :)