<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Anders Hejlsberg Is Right: You Cannot Maintain Large Programs In JavaScript</title>
	<atom:link href="http://lostechies.com/derickbailey/2012/06/04/anders-hejlsberg-is-right-you-cannot-maintain-large-programs-in-javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://lostechies.com/derickbailey/2012/06/04/anders-hejlsberg-is-right-you-cannot-maintain-large-programs-in-javascript/</link>
	<description>Better Than Yesterday</description>
	<lastBuildDate>Thu, 23 May 2013 00:44:00 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4.2</generator>
	<item>
		<title>By: Eric Herbrandson</title>
		<link>http://lostechies.com/derickbailey/2012/06/04/anders-hejlsberg-is-right-you-cannot-maintain-large-programs-in-javascript/#comment-2545</link>
		<dc:creator>Eric Herbrandson</dc:creator>
		<pubDate>Sat, 09 Jun 2012 00:00:00 +0000</pubDate>
		<guid isPermaLink="false">http://lostechies.com/derickbailey/?p=946#comment-2545</guid>
		<description>@CorrieEngelbrecht:disqus Are you saying Assembly is every bit as easy to maintain as C? Every bit as easy to maintain as JavaScript (all else being equal)?</description>
		<content:encoded><![CDATA[<p>@CorrieEngelbrecht:disqus Are you saying Assembly is every bit as easy to maintain as C? Every bit as easy to maintain as JavaScript (all else being equal)?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Corrie Engelbrecht</title>
		<link>http://lostechies.com/derickbailey/2012/06/04/anders-hejlsberg-is-right-you-cannot-maintain-large-programs-in-javascript/#comment-2544</link>
		<dc:creator>Corrie Engelbrecht</dc:creator>
		<pubDate>Fri, 08 Jun 2012 23:18:00 +0000</pubDate>
		<guid isPermaLink="false">http://lostechies.com/derickbailey/?p=946#comment-2544</guid>
		<description>@herbrandson:disqus This is a straw man argument, my friend.

You&#039;ve copied the CPU view code from a debug view or something from a function you wrote.

This does not correspond at all to maintaining a system written in Assembler.

I actually have programmed large systems in Assembler, namely device drivers for network cards way back then.

When programming in assembler, you can do the following:

1. Modularize functionality into separate files
2. Organize files into a directory structure, which is a form of namespacing
3. Label your routines and call them or jump to them as the occasion demands

If you were to take just those facts, it&#039;s obvious that you can write tools and an IDE that are 100% equivalent to what is available to C# developers today.

It is definitely a lot more work to program in Assembler, because you have to basically write everything you want to use from scratch.

But coding in Assembler is not very hard. All you have to do is to program only in Assembler for about a year, and then you&#039;ve done the learning curve. From then on, coding in assembler is like coding in any other language that you know intimately: easy.

I will grant you that the type of projects where you actually code in Assembler are complicated, low-level stuff, where you have to be extremely detail oriented and fastidious, but that has nothing to do with Assembler. Because those same projects can be, and often are, written in C instead. And C is very definitely maintainable.

Coding in assembler also requires you to write programs in layers:

a) First write the very basic routines, like reading a hardware port, or something like that
b) Write layer on top of that, which makes use of the lower level layer
b) Repeat as necessary

Just coding in layers like that actually has the beneficial side-effect of enforcing a layered architecture (logically level), which is a fundamental property of any well-designed system.

Now, if you were to listen to Assembler programmers who do not structure their code like this, and who do not modularize as in a)-c), then you have discovered an incompetent programmer. You have NOT discovered anything about the maintainability of programs written in Assembler. But you might have discovered something about the maintainability of programs written by the aforementioned programmer:)

Also, if you were to just stare at a block of assembler code, it would look like gibberish, I suppose.

But I promise you that there are large systems written in Assembler, and they&#039;re shining examples of how to code a highly maintainable system in any language.

It&#039;s all about applying basic design principles.

It&#039;s NOT about what language you choose to do the final &quot;typing in&quot; of the previously designed system.

Here&#039;s an OS written in Assembler. I&#039;ve looked at the source code, and it&#039;s extremely good, and I would find it easy to maintain that system, if I had to:
http://www.menuetos.net/64bit.htm </description>
		<content:encoded><![CDATA[<p>@herbrandson:disqus This is a straw man argument, my friend.</p>
<p>You&#8217;ve copied the CPU view code from a debug view or something from a function you wrote.</p>
<p>This does not correspond at all to maintaining a system written in Assembler.</p>
<p>I actually have programmed large systems in Assembler, namely device drivers for network cards way back then.</p>
<p>When programming in assembler, you can do the following:</p>
<p>1. Modularize functionality into separate files<br />
2. Organize files into a directory structure, which is a form of namespacing<br />
3. Label your routines and call them or jump to them as the occasion demands</p>
<p>If you were to take just those facts, it&#8217;s obvious that you can write tools and an IDE that are 100% equivalent to what is available to C# developers today.</p>
<p>It is definitely a lot more work to program in Assembler, because you have to basically write everything you want to use from scratch.</p>
<p>But coding in Assembler is not very hard. All you have to do is to program only in Assembler for about a year, and then you&#8217;ve done the learning curve. From then on, coding in assembler is like coding in any other language that you know intimately: easy.</p>
<p>I will grant you that the type of projects where you actually code in Assembler are complicated, low-level stuff, where you have to be extremely detail oriented and fastidious, but that has nothing to do with Assembler. Because those same projects can be, and often are, written in C instead. And C is very definitely maintainable.</p>
<p>Coding in assembler also requires you to write programs in layers:</p>
<p>a) First write the very basic routines, like reading a hardware port, or something like that<br />
b) Write layer on top of that, which makes use of the lower level layer<br />
b) Repeat as necessary</p>
<p>Just coding in layers like that actually has the beneficial side-effect of enforcing a layered architecture (logically level), which is a fundamental property of any well-designed system.</p>
<p>Now, if you were to listen to Assembler programmers who do not structure their code like this, and who do not modularize as in a)-c), then you have discovered an incompetent programmer. You have NOT discovered anything about the maintainability of programs written in Assembler. But you might have discovered something about the maintainability of programs written by the aforementioned programmer:)</p>
<p>Also, if you were to just stare at a block of assembler code, it would look like gibberish, I suppose.</p>
<p>But I promise you that there are large systems written in Assembler, and they&#8217;re shining examples of how to code a highly maintainable system in any language.</p>
<p>It&#8217;s all about applying basic design principles.</p>
<p>It&#8217;s NOT about what language you choose to do the final &#8220;typing in&#8221; of the previously designed system.</p>
<p>Here&#8217;s an OS written in Assembler. I&#8217;ve looked at the source code, and it&#8217;s extremely good, and I would find it easy to maintain that system, if I had to:<br />
<a href="http://www.menuetos.net/64bit.htm " rel="nofollow">http://www.menuetos.net/64bit.htm </a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Anonymous</title>
		<link>http://lostechies.com/derickbailey/2012/06/04/anders-hejlsberg-is-right-you-cannot-maintain-large-programs-in-javascript/#comment-2543</link>
		<dc:creator>Anonymous</dc:creator>
		<pubDate>Fri, 08 Jun 2012 17:19:00 +0000</pubDate>
		<guid isPermaLink="false">http://lostechies.com/derickbailey/?p=946#comment-2543</guid>
		<description>@derickbailey:disqus Sorry we&#039;ve sorta hijacked your blog post at this point :(. If it goes on much longer maybe we can take it off line.

@CorrieEngelbrecht:disqus First let me say how much I am enjoying this discussion. I&#039;ve learned some new things and have also been able to better think through and clarify some of my opinions. So, thanks!

I&#039;d like to respond to a few of your points, but in re-reading my responses I think I&#039;m trying to make too many points in too small of a format, so I&#039;m going to try to reign it in a bit here :)

I think it&#039;s important to make the distinction that I am not saying that ANY language is NOT maintainable. It&#039;s not a boolean thing. Of course you can maintain anything given enough time and patience. Rather, I&#039;m trying to make the argument that some languages, and by extension the tools that those languages support, lend themselves in varying degrees to application maintainability (same thing goes for tools. JSLint and gcc both do static analysis, but in different ways and to different degrees). 

Take the following example. I admit it&#039;s a bit contrived but I think it still works to illustrates my point. Both sets of code do the exact same thing. Would you agree that the second one will be easier to maintain?

ASSEMBLY:








push        ebp 
mov         ebp,esp 
push        edi 
push        esi 
push        ebx 
sub         esp,38h 
mov         esi,ecx 
lea         edi,[ebp-38h] 
mov         ecx,0Bh 
xor         eax,eax 
rep stos    dword ptr es:[edi] 
mov         ecx,esi 
mov         dword ptr [ebp-3Ch],ecx 
mov         dword ptr [ebp-40h],edx 
cmp         dword ptr ds:[04AE0AF4h],0 
je          0000002D 
call        73114587 
xor         edx,edx 
mov         dword ptr [ebp-44h],edx 
nop 
mov         eax,dword ptr [ebp-3Ch] 
add         eax,dword ptr [ebp-40h] 
mov         dword ptr [ebp-44h],eax 
nop 
jmp         0000003F 
mov         eax,dword ptr [ebp-44h] 
lea         esp,[ebp-0Ch] 
pop         ebx 
pop         esi 
pop         edi 
pop         ebp 
retC#:







public static int Add(int value1, int value2)
{     return value1 + value2;}</description>
		<content:encoded><![CDATA[<p>@derickbailey:disqus Sorry we&#8217;ve sorta hijacked your blog post at this point :(. If it goes on much longer maybe we can take it off line.</p>
<p>@CorrieEngelbrecht:disqus First let me say how much I am enjoying this discussion. I&#8217;ve learned some new things and have also been able to better think through and clarify some of my opinions. So, thanks!</p>
<p>I&#8217;d like to respond to a few of your points, but in re-reading my responses I think I&#8217;m trying to make too many points in too small of a format, so I&#8217;m going to try to reign it in a bit here :)</p>
<p>I think it&#8217;s important to make the distinction that I am not saying that ANY language is NOT maintainable. It&#8217;s not a boolean thing. Of course you can maintain anything given enough time and patience. Rather, I&#8217;m trying to make the argument that some languages, and by extension the tools that those languages support, lend themselves in varying degrees to application maintainability (same thing goes for tools. JSLint and gcc both do static analysis, but in different ways and to different degrees). </p>
<p>Take the following example. I admit it&#8217;s a bit contrived but I think it still works to illustrates my point. Both sets of code do the exact same thing. Would you agree that the second one will be easier to maintain?</p>
<p>ASSEMBLY:</p>
<p>push        ebp <br />
mov         ebp,esp <br />
push        edi <br />
push        esi <br />
push        ebx <br />
sub         esp,38h <br />
mov         esi,ecx <br />
lea         edi,[ebp-38h] <br />
mov         ecx,0Bh <br />
xor         eax,eax <br />
rep stos    dword ptr es:[edi] <br />
mov         ecx,esi <br />
mov         dword ptr [ebp-3Ch],ecx <br />
mov         dword ptr [ebp-40h],edx <br />
cmp         dword ptr ds:[04AE0AF4h],0 <br />
je          0000002D <br />
call        73114587 <br />
xor         edx,edx <br />
mov         dword ptr [ebp-44h],edx <br />
nop <br />
mov         eax,dword ptr [ebp-3Ch] <br />
add         eax,dword ptr [ebp-40h] <br />
mov         dword ptr [ebp-44h],eax <br />
nop <br />
jmp         0000003F <br />
mov         eax,dword ptr [ebp-44h] <br />
lea         esp,[ebp-0Ch] <br />
pop         ebx <br />
pop         esi <br />
pop         edi <br />
pop         ebp <br />
retC#:</p>
<p>public static int Add(int value1, int value2)<br />
{     return value1 + value2;}</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Corrie Engelbrecht</title>
		<link>http://lostechies.com/derickbailey/2012/06/04/anders-hejlsberg-is-right-you-cannot-maintain-large-programs-in-javascript/#comment-2538</link>
		<dc:creator>Corrie Engelbrecht</dc:creator>
		<pubDate>Fri, 08 Jun 2012 02:32:00 +0000</pubDate>
		<guid isPermaLink="false">http://lostechies.com/derickbailey/?p=946#comment-2538</guid>
		<description>Hi @twitter-14289895:disqus 

To clarify:
1. I explicitely wrote &quot; (you = general populace) &quot; so that you would understand that I mean you in the general sense, and not you specifically, unless stated otherwise.

2. No, this does not follow at all. Any developer can think in one or more languages. Just because a developer cannot &quot;think in JavaScript&quot; says nothing at all about a completely different developer, and what languages that developer might be able to think in.

4. A Perl (which is what you probably meant) programmer that applies loose coupling and high cohesion principles will produce a maintainable system.

A Perl programmer that does not, will produce an unmaintainable system.

It&#039;s as simple as that. And this applies to any language you care to insert there.

5. Maintainability is a completely nonsensical differentiator among languages. You cannot judge a future, not yet written, system&#039;s maintainability based on some sort of predictive crystal ball that extrapolates maintainability given the name of a programming language as input.

6. Why do you mention this? I have listed the tools for JavaScript that make the JavaScript ecosystem exactly on par with the C# ecosystem. JavaScript has JSLint for static analysts, and testing frameworks, and refactoring IDEs and mocking suites, and testing suites (non-TDD type testing and TDD type testing), and code completion.

There&#039;s no tool you can mention that exists in Visual Studio or for C# that does not also exist for JavaScript.

7. I don&#039;t think you understand dynamic typing. JavaScript does not have classes. It only has functions. Any OO concept is done on object prototyping. But this does not prevent any static analysis, or any documentation generation, or any refactoring, or any code completion from being performed on JavaScript source code.

8. So this is where I&#039;m starting to think that the &quot;you = general populace&quot; that can&#039;t think in JavaScript should become &quot;you = herbrandson&quot; cannot think in JavaScript.

And I say this without trying to be insulting, even though I&#039;m probably failing at that:)

You do not need to know what data type is expected by a function in its parameters, nor do you need to know what data type will be returned by a function. JavaScript does not work that way.

I want to mention two good sources of information, with the idea that future visitors might be able to use this information as well, so don&#039;t take this personally:

a). The book Object-Oriented JavaScript is one of the best sources of good JavaScript practices, with specific sections on writing maintainable code: http://www.packtpub.com/object-oriented-javascript-applications-libraries/book

b) The book &quot;JavaScript: The GoodParts&quot; is another standard source of excellent information: http://shop.oreilly.com/product/9780596517748.do

I could go into this, but basically it comes down to this: if you find yourself wanting a type system in JavaScript, then you&#039;re not writing JavaScript.

JavaScript is a functional programming language, with objects prototypes as an added structural bonus.

But of course, developers depend heavily on object prototyping because we want to use OOP.

However, this requires the JavaScript developer to understand something fundamental about JavaScript: object prototyping IS NOT the same as a class system.

Object prototyping is a paradigm all on its own, and it results in a polymorphic typing system, which is immensely powerful.

However, if you want to misuse this object prototyping mechanism and pretend it&#039;s a class modelling system like in C#/Java/C++, then you&#039;re not only missing the point, but it&#039;s like you&#039;re trying to use gasoline in a diesel engine. The two things are superficially equivalent, but they require completely different approaches.

Once again, when you mention tools that can make use of parameter types or function return types, then you&#039;re actually mentioning ... tools.

Not the language.

It is completely feasible to write large, maintainable JavaScript systems.

The key is just modularisation.</description>
		<content:encoded><![CDATA[<p>Hi @twitter-14289895:disqus </p>
<p>To clarify:<br />
1. I explicitely wrote &#8220; (you = general populace) &#8221; so that you would understand that I mean you in the general sense, and not you specifically, unless stated otherwise.</p>
<p>2. No, this does not follow at all. Any developer can think in one or more languages. Just because a developer cannot &#8220;think in JavaScript&#8221; says nothing at all about a completely different developer, and what languages that developer might be able to think in.</p>
<p>4. A Perl (which is what you probably meant) programmer that applies loose coupling and high cohesion principles will produce a maintainable system.</p>
<p>A Perl programmer that does not, will produce an unmaintainable system.</p>
<p>It&#8217;s as simple as that. And this applies to any language you care to insert there.</p>
<p>5. Maintainability is a completely nonsensical differentiator among languages. You cannot judge a future, not yet written, system&#8217;s maintainability based on some sort of predictive crystal ball that extrapolates maintainability given the name of a programming language as input.</p>
<p>6. Why do you mention this? I have listed the tools for JavaScript that make the JavaScript ecosystem exactly on par with the C# ecosystem. JavaScript has JSLint for static analysts, and testing frameworks, and refactoring IDEs and mocking suites, and testing suites (non-TDD type testing and TDD type testing), and code completion.</p>
<p>There&#8217;s no tool you can mention that exists in Visual Studio or for C# that does not also exist for JavaScript.</p>
<p>7. I don&#8217;t think you understand dynamic typing. JavaScript does not have classes. It only has functions. Any OO concept is done on object prototyping. But this does not prevent any static analysis, or any documentation generation, or any refactoring, or any code completion from being performed on JavaScript source code.</p>
<p>8. So this is where I&#8217;m starting to think that the &#8220;you = general populace&#8221; that can&#8217;t think in JavaScript should become &#8220;you = herbrandson&#8221; cannot think in JavaScript.</p>
<p>And I say this without trying to be insulting, even though I&#8217;m probably failing at that:)</p>
<p>You do not need to know what data type is expected by a function in its parameters, nor do you need to know what data type will be returned by a function. JavaScript does not work that way.</p>
<p>I want to mention two good sources of information, with the idea that future visitors might be able to use this information as well, so don&#8217;t take this personally:</p>
<p>a). The book Object-Oriented JavaScript is one of the best sources of good JavaScript practices, with specific sections on writing maintainable code: http://www.packtpub.com/object-oriented-javascript-applications-libraries/book</p>
<p>b) The book &#8220;JavaScript: The GoodParts&#8221; is another standard source of excellent information: http://shop.oreilly.com/product/9780596517748.do</p>
<p>I could go into this, but basically it comes down to this: if you find yourself wanting a type system in JavaScript, then you&#8217;re not writing JavaScript.</p>
<p>JavaScript is a functional programming language, with objects prototypes as an added structural bonus.</p>
<p>But of course, developers depend heavily on object prototyping because we want to use OOP.</p>
<p>However, this requires the JavaScript developer to understand something fundamental about JavaScript: object prototyping IS NOT the same as a class system.</p>
<p>Object prototyping is a paradigm all on its own, and it results in a polymorphic typing system, which is immensely powerful.</p>
<p>However, if you want to misuse this object prototyping mechanism and pretend it&#8217;s a class modelling system like in C#/Java/C++, then you&#8217;re not only missing the point, but it&#8217;s like you&#8217;re trying to use gasoline in a diesel engine. The two things are superficially equivalent, but they require completely different approaches.</p>
<p>Once again, when you mention tools that can make use of parameter types or function return types, then you&#8217;re actually mentioning &#8230; tools.</p>
<p>Not the language.</p>
<p>It is completely feasible to write large, maintainable JavaScript systems.</p>
<p>The key is just modularisation.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Anonymous</title>
		<link>http://lostechies.com/derickbailey/2012/06/04/anders-hejlsberg-is-right-you-cannot-maintain-large-programs-in-javascript/#comment-2536</link>
		<dc:creator>Anonymous</dc:creator>
		<pubDate>Fri, 08 Jun 2012 00:39:00 +0000</pubDate>
		<guid isPermaLink="false">http://lostechies.com/derickbailey/?p=946#comment-2536</guid>
		<description>@CorrieEngelbrecht:disqus You raise some good points...
1. It is important to make a distinction between the tools used to develop in a language and the language it&#039;s self. Poor tools does not equal a poor language (and vice versa).

2. Trying to use dynamic languages in the same way you would use a static language is missing the point. Dynamic languages strengths are completely lost if you don&#039;t approach them in a different way.

3. &quot;Programming languages are different from each other&quot;. Each has its own strengths and weaknesses. There is no &quot;one language to rule them all&quot;.

4. I completely agree that my opinion is only one data point and far from scientific. I don&#039;t pretend to speak the authoritative truth on this subject and readily acknowledge that I have much to learn.

Also, thanks for the list of IDEs and libraries you listed. I&#039;ve used many, but not all of them. I&#039;ll check the rest out. I do love new toys :)

There are also a few points I&#039;d like to clarify...

1. I get the impression from your comments that you believe me to be a c# only developer (forgive me if I&#039;m mistaken). On the contrary, I pointed out in my original comment that I consistently work in multiple languages. I therefor don&#039;t believe that I am unable to &quot;think in JavaScript&quot;.

2. If c# developers were unable to think in JavaScript, it would seem to follow that JavaScript developers would also not be able to think in c#. If that were true then we&#039;d be wasting our time with this discussion. Neither of us would be capable of understanding the others side. I don&#039;t believe that to be the case at all.

3. I enjoy developing in JavaScript. There&#039;s much about it that&#039;s fantastic. JQuery is one of the best libraries I have used in any language. However, my personal experience has been that JavaScript is less maintainable then other languages. Again, just one data point. But not an uninformed or unqualified opinion.

4. Not all languages are equally maintainable. To take an extreme case, try modifying (or even reading) someone else&#039;s assembly code. Pearl is also commonly referred to as a &quot;write only&quot; language.

5. Maintainability is not the only reason to select a language. I find c# to be more maintainable then JavaScript, but c# is a very poor choice if you want to write code that will run in the browser. JavaScript is fun and lends itself to rapid development, but it&#039;s not really an option if you want to write a native iPhone app (yes, i know you code use an embedded browser, but that&#039;s really not a native app IMHO). C++ is fast and pretty portable, but  in general it&#039;s too slow to develop with for your typical web app.

6. Good tools go a long way toward making a project maintainable. They are not the only factor by a long shot, but they can make a significant impact. I have personally found static code analysis tools to make a significant impact on my ability to modify code without introducing bugs. 

7. Many good tools are the result of good metadata about the code, and a good Type system is the best source of code metadata I&#039;ve seen. Most of the points I listed in my original comment are only possible with good metadata.

8. It&#039;s very possible that I&#039;m ignorant on this point, but I have not yet seen a tool that does a great job with the points I listed in my original comment (especially points 2 and 3). In fact, it&#039;s the very strengths of JavaScript (it&#039;s dynamic nature) that would seem to make these impossible.

Once again, I&#039;m not saying that JavaScript is a bad language. But, I do believe there is a case to be made that it is less maintainable over the long run then other languages. Especially as the scale of an application grows (even with best practices such as modular design, unit tests, etc.).

Thoughts?</description>
		<content:encoded><![CDATA[<p>@CorrieEngelbrecht:disqus You raise some good points&#8230;<br />
1. It is important to make a distinction between the tools used to develop in a language and the language it&#8217;s self. Poor tools does not equal a poor language (and vice versa).</p>
<p>2. Trying to use dynamic languages in the same way you would use a static language is missing the point. Dynamic languages strengths are completely lost if you don&#8217;t approach them in a different way.</p>
<p>3. &#8220;Programming languages are different from each other&#8221;. Each has its own strengths and weaknesses. There is no &#8221;one language to rule them all&#8221;.</p>
<p>4. I completely agree that my opinion is only one data point and far from scientific. I don&#8217;t pretend to speak the authoritative truth on this subject and readily acknowledge that I have much to learn.</p>
<p>Also, thanks for the list of IDEs and libraries you listed. I&#8217;ve used many, but not all of them. I&#8217;ll check the rest out. I do love new toys :)</p>
<p>There are also a few points I&#8217;d like to clarify&#8230;</p>
<p>1. I get the impression from your comments that you believe me to be a c# only developer (forgive me if I&#8217;m mistaken). On the contrary, I pointed out in my original comment that I consistently work in multiple languages. I therefor don&#8217;t believe that I am unable to &#8220;think in JavaScript&#8221;.</p>
<p>2. If c# developers were unable to think in JavaScript, it would seem to follow that JavaScript developers would also not be able to think in c#. If that were true then we&#8217;d be wasting our time with this discussion. Neither of us would be capable of understanding the others side. I don&#8217;t believe that to be the case at all.</p>
<p>3. I enjoy developing in JavaScript. There&#8217;s much about it that&#8217;s fantastic. JQuery is one of the best libraries I have used in any language. However, my personal experience has been that JavaScript is less maintainable then other languages. Again, just one data point. But not an uninformed or unqualified opinion.</p>
<p>4. Not all languages are equally maintainable. To take an extreme case, try modifying (or even reading) someone else&#8217;s assembly code. Pearl is also commonly referred to as a &#8220;write only&#8221; language.</p>
<p>5. Maintainability is not the only reason to select a language. I find c# to be more maintainable then JavaScript, but c# is a very poor choice if you want to write code that will run in the browser. JavaScript is fun and lends itself to rapid development, but it&#8217;s not really an option if you want to write a native iPhone app (yes, i know you code use an embedded browser, but that&#8217;s really not a native app IMHO). C++ is fast and pretty portable, but  in general it&#8217;s too slow to develop with for your typical web app.</p>
<p>6. Good tools go a long way toward making a project maintainable. They are not the only factor by a long shot, but they can make a significant impact. I have personally found static code analysis tools to make a significant impact on my ability to modify code without introducing bugs. </p>
<p>7. Many good tools are the result of good metadata about the code, and a good Type system is the best source of code metadata I&#8217;ve seen. Most of the points I listed in my original comment are only possible with good metadata.</p>
<p>8. It&#8217;s very possible that I&#8217;m ignorant on this point, but I have not yet seen a tool that does a great job with the points I listed in my original comment (especially points 2 and 3). In fact, it&#8217;s the very strengths of JavaScript (it&#8217;s dynamic nature) that would seem to make these impossible.</p>
<p>Once again, I&#8217;m not saying that JavaScript is a bad language. But, I do believe there is a case to be made that it is less maintainable over the long run then other languages. Especially as the scale of an application grows (even with best practices such as modular design, unit tests, etc.).</p>
<p>Thoughts?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Corrie Engelbrecht</title>
		<link>http://lostechies.com/derickbailey/2012/06/04/anders-hejlsberg-is-right-you-cannot-maintain-large-programs-in-javascript/#comment-2535</link>
		<dc:creator>Corrie Engelbrecht</dc:creator>
		<pubDate>Wed, 06 Jun 2012 22:22:00 +0000</pubDate>
		<guid isPermaLink="false">http://lostechies.com/derickbailey/?p=946#comment-2535</guid>
		<description>Well, nothing you&#039;ve said actually supports your conclusion that the language itself is related to maintainability.

Rather, your points appear to rely on tool availability and capability.

Here are some JavaScript IDEs that support code completion and refactoring to the same degree or better than Visual Studio does for C#:
1. Aptana Studio (or Eclipse, which is basically the same thing)
2. BBEdit
3. Komodo
4.  NetBeans
5. WebStorm
6. JetBrains

And with all due respect, coding in JavaScript requires a completely different mindset than coding in C#.

Dynamic typing and functional programming are FEATURES of JavaScript, and requires the correct &quot;thinking in JavaScript&quot; approach to utilize. If you  (you = general populace) want static typing in JavaScript, then you&#039;ve immediately missed a vital, foundational precept of JavaScript, and you will just not succeed in writing maintainable code in the language. But this is NOT the fault of the language, but rather of the programmer. 

And I think most of the rest of what you&#039;re saying is just arguing from ignorance.

BDD in JavaScript: Jasmine (http://pivotal.github.com/jasmine/)
TDD in JavaScript:  QUnit, JSMock
Source Documentation: JsDoc
Runtime loading: RequireJS
Libraries: JQuery, JQueryUI, etc.

I could go on.

Furthermore, I don&#039;t know your very talented developer, just as I don&#039;t know you.

But if the same developer wrote C# code that is highly maintainable, and JavaScript code that is not maintainable, according to a 2nd developer, namely you, then your conclusions are mere supposition.

It could be that you yourself cannot &quot;think in JavaScript&quot;, and that is the source of your problems.

It could be that the original developer was not good at JavaScript.

I&#039;m sorry, but I&#039;ve had quite enough of all the C# developers who think they can comment on JavaScript just because they think they can program.

Programming languages are different from each other. JavaScript is a FUNCTIONAL programming language. To try and use it as a structured OO language is like trying to use a rapier to mow the lawn. You might think you&#039;re doing well, but actually you&#039;re completely misunderstanding what a rapier is and is used for, and how to do it.</description>
		<content:encoded><![CDATA[<p>Well, nothing you&#8217;ve said actually supports your conclusion that the language itself is related to maintainability.</p>
<p>Rather, your points appear to rely on tool availability and capability.</p>
<p>Here are some JavaScript IDEs that support code completion and refactoring to the same degree or better than Visual Studio does for C#:<br />
1. Aptana Studio (or Eclipse, which is basically the same thing)<br />
2. BBEdit<br />
3. Komodo<br />
4.  NetBeans<br />
5. WebStorm<br />
6. JetBrains</p>
<p>And with all due respect, coding in JavaScript requires a completely different mindset than coding in C#.</p>
<p>Dynamic typing and functional programming are FEATURES of JavaScript, and requires the correct &#8220;thinking in JavaScript&#8221; approach to utilize. If you  (you = general populace) want static typing in JavaScript, then you&#8217;ve immediately missed a vital, foundational precept of JavaScript, and you will just not succeed in writing maintainable code in the language. But this is NOT the fault of the language, but rather of the programmer. </p>
<p>And I think most of the rest of what you&#8217;re saying is just arguing from ignorance.</p>
<p>BDD in JavaScript: Jasmine (<a href="http://pivotal.github.com/jasmine/" rel="nofollow">http://pivotal.github.com/jasmine/</a>)<br />
TDD in JavaScript:  QUnit, JSMock<br />
Source Documentation: JsDoc<br />
Runtime loading: RequireJS<br />
Libraries: JQuery, JQueryUI, etc.</p>
<p>I could go on.</p>
<p>Furthermore, I don&#8217;t know your very talented developer, just as I don&#8217;t know you.</p>
<p>But if the same developer wrote C# code that is highly maintainable, and JavaScript code that is not maintainable, according to a 2nd developer, namely you, then your conclusions are mere supposition.</p>
<p>It could be that you yourself cannot &#8220;think in JavaScript&#8221;, and that is the source of your problems.</p>
<p>It could be that the original developer was not good at JavaScript.</p>
<p>I&#8217;m sorry, but I&#8217;ve had quite enough of all the C# developers who think they can comment on JavaScript just because they think they can program.</p>
<p>Programming languages are different from each other. JavaScript is a FUNCTIONAL programming language. To try and use it as a structured OO language is like trying to use a rapier to mow the lawn. You might think you&#8217;re doing well, but actually you&#8217;re completely misunderstanding what a rapier is and is used for, and how to do it.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: jmh</title>
		<link>http://lostechies.com/derickbailey/2012/06/04/anders-hejlsberg-is-right-you-cannot-maintain-large-programs-in-javascript/#comment-2532</link>
		<dc:creator>jmh</dc:creator>
		<pubDate>Wed, 06 Jun 2012 17:16:00 +0000</pubDate>
		<guid isPermaLink="false">http://lostechies.com/derickbailey/?p=946#comment-2532</guid>
		<description>&quot;So, Ander’s quote should read...&quot;Really?  You can just edit someone&#039;s quote?
Cool!
So,  Derick&#039;s blog entry should read: ...</description>
		<content:encoded><![CDATA[<p>&#8220;So, Ander’s quote should read&#8230;&#8221;Really?  You can just edit someone&#8217;s quote?<br />
Cool!<br />
So,  Derick&#8217;s blog entry should read: &#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: herbrandson</title>
		<link>http://lostechies.com/derickbailey/2012/06/04/anders-hejlsberg-is-right-you-cannot-maintain-large-programs-in-javascript/#comment-2531</link>
		<dc:creator>herbrandson</dc:creator>
		<pubDate>Wed, 06 Jun 2012 16:52:00 +0000</pubDate>
		<guid isPermaLink="false">http://lostechies.com/derickbailey/?p=946#comment-2531</guid>
		<description>&quot;Language has probably little to nothing to do with the maintainability of a system.&quot;

I have found that to not be true. For example, I worked on a project recently where I had to add some features to an existing codebase that I didn&#039;t write. The features required work on both the server side code (c#) and client side (javascript). Both the existing c# and javascript were written by the same (very talented) developer. I found the c# to be 10x easier to extend than the javascript. I would attribute this to the better tooling available on the c# side due to being a statically typed language. Just a few examples...

1. being able to quickly see what functions are part of a class
2. knowing what data type each parameter of a function expected
3. knowing what data type would be returned by each function
4. being able to change the api (i.e. adding new parameters to a function) and having the compiler quickly tell me what other parts of the system needed to be updated.

On the javascript side, most of these things required a lot of manual poking around through hundreds of lines of code and a lot of manual testing.

I realize I am only one data point here, but I have worked on large scale projects in the last few years using c, c++, c#, objective-c, javascript, java, php, and a few others. Each language has been fun to work with and each has it&#039;s own strengths and weaknesses. But, I have to say that the statically typed languages were significantly easier when it came to extending/maintaining an existing codebase.</description>
		<content:encoded><![CDATA[<p>&#8220;Language has probably little to nothing to do with the maintainability of a system.&#8221;</p>
<p>I have found that to not be true. For example, I worked on a project recently where I had to add some features to an existing codebase that I didn&#8217;t write. The features required work on both the server side code (c#) and client side (javascript). Both the existing c# and javascript were written by the same (very talented) developer. I found the c# to be 10x easier to extend than the javascript. I would attribute this to the better tooling available on the c# side due to being a statically typed language. Just a few examples&#8230;</p>
<p>1. being able to quickly see what functions are part of a class<br />
2. knowing what data type each parameter of a function expected<br />
3. knowing what data type would be returned by each function<br />
4. being able to change the api (i.e. adding new parameters to a function) and having the compiler quickly tell me what other parts of the system needed to be updated.</p>
<p>On the javascript side, most of these things required a lot of manual poking around through hundreds of lines of code and a lot of manual testing.</p>
<p>I realize I am only one data point here, but I have worked on large scale projects in the last few years using c, c++, c#, objective-c, javascript, java, php, and a few others. Each language has been fun to work with and each has it&#8217;s own strengths and weaknesses. But, I have to say that the statically typed languages were significantly easier when it came to extending/maintaining an existing codebase.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: martin</title>
		<link>http://lostechies.com/derickbailey/2012/06/04/anders-hejlsberg-is-right-you-cannot-maintain-large-programs-in-javascript/#comment-2530</link>
		<dc:creator>martin</dc:creator>
		<pubDate>Wed, 06 Jun 2012 15:17:00 +0000</pubDate>
		<guid isPermaLink="false">http://lostechies.com/derickbailey/?p=946#comment-2530</guid>
		<description>Well sure, if you want to write a large system you need to break it up into smaller pieces. That&#039;s standard software development practice, so what&#039;s new here?</description>
		<content:encoded><![CDATA[<p>Well sure, if you want to write a large system you need to break it up into smaller pieces. That&#8217;s standard software development practice, so what&#8217;s new here?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Neil Haughton</title>
		<link>http://lostechies.com/derickbailey/2012/06/04/anders-hejlsberg-is-right-you-cannot-maintain-large-programs-in-javascript/#comment-2529</link>
		<dc:creator>Neil Haughton</dc:creator>
		<pubDate>Wed, 06 Jun 2012 15:13:00 +0000</pubDate>
		<guid isPermaLink="false">http://lostechies.com/derickbailey/?p=946#comment-2529</guid>
		<description>As does &quot;it&#039;s&quot; meaning &quot;belonging to it&quot; when it should be &quot;its&quot;. </description>
		<content:encoded><![CDATA[<p>As does &#8220;it&#8217;s&#8221; meaning &#8220;belonging to it&#8221; when it should be &#8220;its&#8221;. </p>
]]></content:encoded>
	</item>
</channel>
</rss>
