Devlico.Us
CodeBetter.Com
RSS 2.0 via Feedburner
           Do you Twitter? Follow us @devlicious

The Perpetual n00b

There's always something more to learn


Mmmmm...statically typed goodness (updated)

I'm somewhat of a n00b when it comes to object-oriented development and C#, but that is what I've been doing for the past couple of years now. My background is in more procedural type programming languages, like PL/SQL (I did a lot of Oracle development early in my software development career). I've been doing some more web development lately, and one of the things I'm being painfully reminded of is how much I really dislike JavaScript. Why? Because JavaScript is not a strongly statically typed language (its dynamically typed (see "Static vs dynamic typing" here)). The fact that I can declare a variable (or not...you don't really even *have* to declare your variables in JS), but NOT give it a type, can be extremely painful if you're not careful. With a nice, strongly statically typed language like C#, when I declare a variable/object, I have to declare what type of an object it will be...and it will ALWAYS be that kind of object. Always. Until it is destroyed, that is the kind of object it will be. What's so great about that? The fact that I always know what I can and can't do with that object. That's the very thing that makes working with JavaScript so painful. When I declare a variable, I might initialize it as a number. But then, I might set its value later by calling another function. Who knows what kind of data is returned by that function. (Granted, maybe I should by understanding what that function is doing, but if I didn't write the function, it's not always intuitive) I might now be working with a string, or a date. So now, when writing my code, I might try to access a property of that variable, or perform some method/function on it, whatever. In code, it seems just fine. But it's not until I actually run my application (this indicates that its a dynamically typed language) and it pukes all over my JavaScript code giving me an "object does not support this property or method" error that I realize that something is now wrong. But what? What do I need to do to fix it? What can I do or what can I NOT do with this variable now? Its hard to tell.

Yes, I'm sure I've become spoiled by the beauty of the Visual Studio development environment and the wonder that is Intellisense. Yes, I probably also have a LOT to learn about writing good JavaScript code. But despite all of that, I still find JavaScript to be one of the most painful programming/scripting languages I've ever had to work with. Can I get an amen? Anyone have any suggestions for growth in this area?

UPDATE:
I need to correct myself here. It was brought to my attention that I used incorrect terminology here. I should have used the term statically typed, when referring to C#, as opposed to strongly typed; and I should have used the term dynamically typed as opposed to weakly typed in reference to JavaScript. I've made corrections above, including the title. Thanks for the correction Foo (sorry, I'd use a more appropriate reference, but that's all you left me).

Cross-posted from my personal weblog at Bob.Yexley.Net.


Comments

Billy McCafferty said:

I never had a a strong appreciation of JavaScript until I found http://www.gravlabs.com years ago.  It's parent site is http://www.ozones.com which has an incredible ensamble of other JavaScript wonders.  But I have to admit my JavaScript has fallen behind since finding telerik UI controls.  In my current application of about 25,000 LOC, I've probably written less than 50 lines of JavaScript...I actually kind of miss it.  (Kind of.)  Now if I could only get a handle on RegEx...someday...someday.

# September 22, 2006 11:34 AM

Jayson Knight said:

Javascript also has some very strange variable scoping issues that can bite you if you're not careful. Orcas is slated to have full intellisense for javascript btw, so that should be a huge boon.

# September 22, 2006 1:15 PM

Scott said:

One project you might want to check out is Script#: http://www.nikhilk.net/Entry.aspx?id=132 It allows you to write C# (strongly typed) which is then converted to JavaScript, and provides a nice developer experience.
# September 22, 2006 3:01 PM

Foo said:

What you described is not "strongly typed", it is "statically typed".. these are 2 totally different things. i tend to MUCH prefer dynamically typed languages to statically typed languages, for a whole slew of reasons.
# September 22, 2006 3:49 PM

Bob Yexley said:

@ Scott:

W O W.  Thanks for the tip about Script# Scott. That looks VERY impressive. I've only had a chance to breeze through the overview of the project, but so far I REALLY like what I see. What I can't seem to figure out is why I've not heard anything about this before now. Seems to be somewhat overlooked.

# September 27, 2006 3:29 PM

Sam said:

I think much of your concern can be traced back to the development environment though. It's a shame to hate on JavaScript when there's really nothing making a JS String object any hard to debug than a .NET System.String. It's the environment. Firefox is a must for JS development. IE just doesn't come close (as far as I've found). It's also good to understand the basics of the language though. JS isn't your average dynamically typed language like Ruby or Python. In fact, I'm tempted to say that it's a weakly _classed_ language (for lack of a better term). JS is a Prototype based language. So where in Ruby you're likely to be dealing with an actual URI object when dealing with a URI, in JS you're dealing with a Decorated Object at best, and probably more generally a plain old String. Don't get me wrong, a Type is what it is, and that doesn't change, but fundamentally that Type is almost always Object in JS. The point is, don't like seeing "[[Object object]]" in IE? Decorate it with your own toString() method. Want Form elements to have a serialize() method? Give it to 'em. Due to browser differences static decoration is sometimes ineffective however (IE doesn't Type DOM Elements, so it doesn't work there). Is JS a great language? I dunno about that. It's a very flexible language though that you can do some really complex things with very easily that would have you writing lots of nastyness in c#. But the potential is often frustrated by browser limitations unfortunately. Plus most implementations are tremendously slow.
# October 12, 2006 6:03 PM

Leave a Comment

(required)  
(optional)
(required)  

Enter the numbers above:
Add
Check out Devlicio.us!

Our Sponsors

Proudly Partnered With