Tuesday, 09 December 2008
This post is to answer several of the comments posted to my blog, Hacker News, Programming Reddit, and unClog - in no particular order. I tried to answer most if not all questions, but if I missed yours, it was not on purpose.
At the end of this post, are my own answers to the productivity lost questions I have posed.
PJ says, “A bad craftsman blames the tool.” So PJ, if the tool is broken or is in need of serious repair, would a good craftsman ignore it?
Arun says, “…I believe you need to think outside the .Net world. …What's new is not always complex. The productivity in modern languages have actually improved dramatically. People release new features all the time. But then, you need to stop using the old tools.” Arun, I make my living as a .NET programmer and I would not call Visual Studio 2010, .NET 4.0 and C# 4.0 “old tools”, in fact they are so new they have not been released yet, except if you attended PDC.
Alecks says, “At age 17 I sit in programming class trying to find my path through the maze of the .NET framework, thinking to myself 'okay, so I can do it . . . but how does it work?” Alecks, hang in there buddy, one step at a time. Pick a few .NET classes (like the collection or array classes for example) and play with them to see how they work. Look at the MSDN examples or search online. Step through the examples in the debugger and inspect the variables, program flow, etc. Once you see how one or two of these classes work, then you can expand to others. One step at a time and you will be fine. Keep at it!
Sridhar says, “…try Zoho Creator creator.zoho.com which tries to provide on the web the ease of use you get in a VB6 environment.” Thanks Sridhar, I will give it a try, looks interesting.
Jeff says, “…I think it should be as easy to build apps for the web as it is for the desktop…” Bingo! Jeff was able to summarize my two posts in basically one sentence. Good job Jeff! Unfortunately, the reality is that we maybe years away from making this happen.
Andrew says, “We know that code re-use is a wonderful thing, and its just a real surprise to hear someone argue otherwise. … Lastly, I'm not sure quite why you've got some of the highly passionate responses above, for sure its an opinion that differs from most people I've met, but you're not too far of death threat territory in some cases :P” Andrew, what makes you think that I am against code reuse? Where did I say that? Quite the contrary, almost 80% of my open source project is predicated on code reuse, I would have never been able to complete it otherwise. With respect to the passionate responses. Well, I don’t think I would call them passionate…
Roger says, “As a developer you have to keep getting better tools, and get better at using those tools. …When I job interview developers, one of my questions is … if the candidate cares about their own productivity and actively seeks out new tools and techniques.” Say Roger, I think you missed the part where I am using the latest tools and editors, including a pre-release of Visual Studio 2010. I think your brain may have froze when you saw VB6 in my post – don’t worry, I think most of us have the same problem with VB6.
Daniel Lyons says, “It's not just you. I don't know what's going on with these other guys but I feel what you're saying just as strongly as you do and I'm only 27. We're reaching levels of complexity where what we've been doing just doesn't work anymore. Especially with the web.” Daniel, nice quote, “where what we’ve been doing just doesn’t work anymore.” I say amen to that. And as I have said before, it is getting worse, not better, in my opinion.
Roe says, “You raise some good points, but the conclusion is weird: "to me, productivity is everything. Productivity. It is as simple as that." To me, delivering something of value to users is everything.” Hey Roe, I think you missed my point. It is already a given that what is delivered is going to have value to the “users”, and if not, you have bigger problems then productivity. If you can’t deliver to your customers in any timely manner, no matter how much value it has, is of no value when the project is canceled cause it is way overtime and budget.
Mark says, “You should try ruby. Or python.” Yup, I have and in my article I state that I have tried so many languages over the last 17+ years, that I can’t keep track of them. I have been using IronPython and IronRuby, well, because I am a .NET guy. And in fact, the open source project I developed embeds IronRuby and IronPython as the scripting engine to program remote computers in real-time, but that’s another discussion.
Sixbit says, “…I think I've rediscovered your VB 6 experience of 1991. When I got into iPhone programming this year, and got the hang of using Interface Builder to rapidly prototype things, I really got a feeling that, this is how simple things should be in other frameworks, and have rediscovered my love of programming again.” Wow, sixbit, that sounds cool. I will have a look at that. I wonder how that extends, if at all, to general purpose web development, probably not…
Phillip Zedalis says, “I did not comment on your last post because I was still contemplating it - but yes I heard your point loud and clear. I also over time have felt a great discomfort with the growing 'complexity' of the libraries surrounding Visual Studio.” Philip, wait till you get a load of Visual Studio 2010 and .NET 4.0 – more and more and more. I am not sure how it is any better. I used to be an early adopter of the Visual Studio environment, right back to Visual Studio InterDev in 97, anyone remember that environment? Now, I just cringe at the extracurricular effort required to figure out all of the new things have been added to the IDE and framework. I can’t even face going to anymore PDC’s which as a passionate programmer, were my favorite conferences, it is just too much. By the way, fantastic site Phillip!
Ald says, “I am not an expert, but I think you could halve the list by refusing to use MS technology, and XML. Are you sure you couldn't do everything in javascript, with may be a few simple scripts on the server serving the asynchronous calls?” Ald, download my open source project and show me how I could halve the list by using different technologies, seriously I would be interested. You will also see why it cannot be all JavaScript with a few simple scripts.
Joseph Gutierrez says, “It makes you feel less a craftsman. More like a father at Christmas with the bicycle instructions, trying to put the damn thing together. I've started learning Lisp for this simple reason. Less imperative and more declarative programming. Stay with it. An increase in velocity is what you're looking for. Take a look at altdotnet news groups on yahoogroups. VB6 with OCX and ActiveX damn good things, but it seems to have dropped out of the mainstream.” Joseph, thanks for your comments, absolutely true on the “bicycle instructions”, problem is that each part is from a different manufacturer and some sizes are in metric and others in imperial. I hear you on Lisp – have been there, and may even try IronScheme, but still cannot see how I could build a web app using this technology. Btw, I love your snowflakes on your blog!
Buford Twain says, “The next big breakthrough in software development will come when someone makes things radically simpler for us poor programmers.” Buford, I agree, I just hope I get to see that in my lifetime...
Itay Maman says, “When you need two or more frameworks in the same application you have a problem: each one is imposing its own structure, and the two structures are usually in a conflict with each other.” Itay, you are too right, in my own application I have several frameworks and components and the fight is to structurally fit them together even though each one on its own has the functionality I want.
Mark Jones says, “Very interesting. As a hobbyist assembly-language programmer whom has taken courses in the latest Java, C, and VB disciplines, I could not agree with you more Mitch.” Bless your heart Mark! Assembly language was the last thing I thought I would see on my blog about web applications, but I totally get where you are coming from. I sure am tired of “syntax code”, particularly now that Microsoft has fully embraced XAML, it just keeps getting more and more verbose and making me less and less productive.
Evrim Ulu says, "We've faced similar problems in past, and the only solution we've found is to rewrite everything from scratch." Wow Evrim, this is pretty cool. I will indeed look at this in more detail. I also happen to agree with your approach by the way. It sure appears the only solution is to indeed rewrite it all from scratch. I totally get that, thanks!
mycall says,
“1. Why does GSB exist?
2. What is wrong with the normal way of using hosting services (e.g. FTP pre-tested application from localhost development to QA to production)?
3. How does this compare to the new Amazon EC2 or Windows Azura?
4. Does GSB actually have the minimum number of components to (a) minimize maintenance and issues?
5. Hows does Silverlight 2.0 with IronPython running in the browser change GSB? And
Forgot to mention, here is an idea for you..
Wow, great questions mycall, let me try and answer them. GSB exists because I wanted to program in real-time, using dynamic languages, many remote computers from a web browser. I may have 30 or 40 web apps that need maintenance around the world. This tool allows me to geocode the locations in the map program so that I have some physical frame of reference, and keeps all of the IP addresses, notes, etc. contained in one location. I can then remote desktop in and launch the “service component” of GSB which contains the DLR and IronPython and IronRuby interpreters that I access through my web browser via WCF web services in both a REPL console window and a code editor. This allows me to make simple changes to code, scripts, etc. much easier than a) trying to hook up Visual Studio remotely to +30 web sites does not make you productive and b) to answer your question 2) trying to do the “traditional” way of maintaining 40 sites in localhost and promoting those via ftp, etc., again not too productive. And it is highly experimental as mentioned here.
With respect to Amazon EC2 and Windows Azure, this is something completely different. My IDE is “in the cloud” whereas the applications for Azure and EC2 are “in the cloud”.
Yes, I do have the minimum number of components, (don’t need Agent SDK, just used as Robby the Robot demo and almost all of the components are open source that I have reused in my application. My code is the glue code and programming for the overall functionality, along with eh ability to “reflect” assemblies on the remote computers so I can look at the custom classes types and members I have at my disposal.
With respect to Silverlight and IronPython in the browser, the IronPython execution is actually local and not on the remote computer. I won’t get into the other productivity issues of trying to develop and debug a Silverlight application as that is another whole can of worms.
Finally, to answer about Michael Foord’s Silverlight in the browser, have a look at this web-based IDE round up.
Pfedor says on Hacker News, “The article is interesting, but I can't help but think that large part of the guy's problem is that he's not using Unix.” I am wondering how that would make my application any simpler or me more productive, please do tell.
On Hacker News in general about VB6 – I think the point is being missed. I was very productive in developing desktop applications in VB6 but there is no equivalent for web applications.
Thomasmallen on Hacker News says, “
His core argument is wrong. Frameworks don't exist to make programmers' lives easier. Our job difficulty is essentially fixed: we will push ourselves as hard as we can. What frameworks do is increase the scope of what we can accomplish within that level of effort.” I disagree and I think you missed the point. There is so much language and framework being used that it is a humungous job to stitch anything together easily. At least in my .NET web application world. That’s the point.
Gregk on Programming Reddit says, “We can't re-invent the wheel all the time. There is a tendency for over-engineering a little these days. But that is avoidable. In general, I can say we have better tools than 10 years ago but we are also more demanding and tackling more complex tasks.” Again, I think my point may have been missed. I am not trying to reinvent the wheel at all or over engineer anything, I am trying to solve a business problem in the most productive way possible. Like I said before, VB6 allowed me to solve a business problem simply and was a better desktop tool almost 10 years ago then the web development tools we have today to solve the same problem, except on the web.
Vhold on Programming Reddit says, “Every now and then this sort of thing is said, and there is always a very significant missing piece. The software people are writing now does a lot more, and a lot more reliably (on average) than in the past.” Hmm does a lot more, says who? I think we are solving the same problems over and over again, but getting harder to do as our tools and frameworks are not making it any easier as these are increasing in size and complexity, yet our business problems are the same. An ecommerce application 10 years ago is “basically” the same as it is today. Sure lots of extra stuff, but the bottom line is to add stuff to the cart and get it transacted, or at least that what my ecommerce customers really care about, and they care about it doing it faster and cheaper than 10 years ago. That’s the issue.
Recursive on Programming Reddit says, “No one's stopping you from doing pure programming.
Write your own web server in a procedural language, and then write your own procedural web app on top of it. The big scary complicated frameworks will be waiting when you're done banging your head on the desk and crying.” Dude, who said anything about me wanting to do pure programming? Show me in my post where it says I want to do that.
Ken on unClog says, "I see several markup (HTML, CSS) and programming languages (C#, Javascript, Python, Ruby?), operating systems (Windows and Mac OS X?), system introspection and end-user programmability, and a third-party 3D plugin. It wasn’t too many years ago this would have been impressive in a desktop app. I’m not sure where the “simple” is. If you’re looking for a program to tie all these things together, it’s going to have a lot of inherent complexity. The solution to “too many languages” is never “another language”. I’m curious why one would think that such a complex web app would be easy out-of-the-box with a particular language or framework. Frameworks make common things easier. Uncommon things will always take more work."
If I had a prize to give out, Ken would get it! My one page web application is not simple. It was a trick question. My one page web app was “designed” to be “simple” to use, it was not simple to design and build. I had to use a lot of languages, frameworks and components that were never really designed to work together and that was the effort involved to reach my goal.
There is real wisdom in the statement, “The solution to “too many languages” is never “another language”.” Maybe that is what I was looking for, a web based language that can tie HTML, JavaScript, CSS, etc., into one language – a web language. The analog of using the VB example was to indicate that I could indeed use one language and even with 3rd party plug-ins, I could develop a fairly sophisticated desktop application. Actually that could be said for many languages if developing a desktop application. But in the web world, there seems to be no choice around having multiple languages or scripting languages or mark-up this or that, each with its own strength and weaknesses, which result in productivity lost. Or at least for me.
That is why I liked Evrim's response, “We've faced similar problems in past, and the only solution we've found is to rewrite everything from scratch.” He even has an example web site written in their own technology. I have not had a chance to look into detail, but from an innovation perspective, this looks promising to me and breaks out of the HTML, JavaScript, CSS, et al paradigm. I hope his works continues.
My point in all of this, being that this is a blog about software industrialization, is that we, the software development industry, have not caught up to developing web applications like we can desktop applications. I would say that had I developed my open source web app as a desktop app it would have taken me 10x less time, meaning I would have been 10x more productive (probably like 100x) and that is my point. I hope the future is not too far away where we can develop sophisticated web apps in the same time and ease as we can develop desktop apps today regardless of choice of languages or frameworks.
Friday, 05 December 2008
Wow! Was I surprised to see the number of page loads reported in StatCounter for my little blog article from the night before. My PII 600Mhz 384 meg RAM web server circa 2001 was barely able to keep its CPU from melting down.
Double wow on some of the comments. It seems a split between those who got the article and others, well, maybe giving the benefit of the doubt that I was not as clear as I could have been with what I was trying to communicate.
However, having looked at some of the Hacker News comments and Programming Reddit comments, it is clear that some people did not seem to get the point I was trying to make.
Let me try again using a concrete example this time. Let’s use my open source web application I wrote as the example because you are free to download the source code and examine it to your heart’s content to make up your own minds as to what my beef is, if you so desire.
My web app is really simple, in fact, the application consists of exactly one page! Mind you there is a lot going on as your will see, but still, it is one page. For now, who cares what it does, let’s look at the list of technologies, frameworks, languages, components, etc., used (and reused) in this “one page” web application:
-
ASP.NET 2.0 framework classes
-
ASP.NET
AJAX (.NET 3.5 FCL)
-
ASP.NET AJAX Control Toolkit (Tab and Hover controls)
-
.NET 3.5 Windows Communication Foundation (WCF) framework classes
-
Visual Studio 2008 IDE
-
C#
-
JavaScript
-
VBScript
-
CSS
-
HTML
-
XML
-
MDbg CLR Managed Debugger (mdbg) Sample application and API framework
-
.NET 2.0 Winforms framework classes
-
Microsoft Agent SDK (API framework)
-
Microsoft Remote Desktop Web Connection Active X component
-
Google Earth application
-
Google Earth Airlines ActiveX web plug-in for Google Earth with JavaScript API
-
Prototype.js open source AJAX framework
-
IronPython 2.0B2 and Dynamic Language Runtime (DLR) with IronRuby support
-
IronPythonTextbox – open source IronPython rich client text box and interpreter
-
Edit Area – open source JavaScript source code editor with syntax highlighting
-
Color List Box – open source WinForms modified List Control
-
Joshua – open source interactive JavaScript HTML console window
-
RealWorldGrid – open source ASP.NET modified GridView control
For those that did read the first post in this series, do you now see what I mean? No? Let me further illuminate with the following ten points:
-
Did I say I hated frameworks? No
-
Did I say I wanted to reinvent the wheel? No.
-
Did I say I wanted to do pure programming? No.
-
Did I say I wanted to code from scratch and roll my own framework? No.
-
Did I say I did not want to use frameworks or reuse code? No.
-
Did I say that I wanted to return to my beloved VB 6 as my “ideal development model?” No, in fact, I have not used VB6 since 2000 when I converted to C# .NET (I was an early adopter).
-
Did I say I was sick of programming? No, first sentence in previous post – I love to write code!
-
Yes, I have tried several programming languages, O/S’s, IDE’s, etc., over the last 17 years that I have been programming professionally – this is not about programming languages, other than that they are a part of a much larger issue.
-
Am I a hobbyist programmer? No, and not to sound defensive, I am a professionally trained software engineer, with a 2 year post grad in Software Engineering Management and 17 years professional experience. I have worked for Motorola (CMM Level 5), Kodak (CMM Level 3) and several other shops of various sizes and industries, plus ran my own successful custom software development company for four years with a staff of 25 people. Currently I work for one of the best custom software development companies that produce enterprise ecommerce solutions to some of the largest retailers and supply chains in the world – the odds are that you have already used our ecommerce software and don’t even know it.
-
You want to interview me? (for those that asked) First, pass my test by downloading my open source code and explain to my why my software design is good or bad and the reasons why for either. Then we will talk.
Enough Tom Foolery. What I said was that web application frameworks, components and tools are like 10 years behind the tools we are used to using to develop desktop applications. In fact, I stated that it is getting worse, not better. I used VB6 in a simple two tier application scenario as the example. Now lets compare to my web app.
Look at how much “stuff” has to be used to make my “one page” web application work. Imagine developing this as a desktop application. You could easily cut out 50% of the stuff used in the web application and still have the same functionality in a desktop application, the least of which would be a working WYSIWYG design editor.
This is what my one page web app looks like rendered in IE 7.
This is what my one page web app looks like rendered in Visual Studio 2008 design time mode.
And no, this is not just a Visual Studio problem, I have run into this with a variety of other web development tools.
My point is illustrated by the number of items listed to make a one page web application and the design time view of the web application. Way too much stuff and I can’t even see what I am doing! How is this helping me being more productive? It isn’t and that is my point. Our frameworks and tools for developing web applications are getting worse, not better. Vendors keep adding more and more stuff, yet we can’t even get an editor that shows a proper design time view of what we are trying to build.
How would an engineer design an automobile (or house or electronics or cell phone or game console or name your item) in AutoCAD with a design time view the same as the one for my web application above? It would not only be totally unacceptable, it would be ludicrous! So why do we, the software development industry, accept it? And worse yet, have people defend it in some of the comments I have read? That is what makes no sense to me at all. Am I the only one with the sunglasses from They Live? I hope not, cause if I remember the movie correctly, it ends badly
Updated: A Programmers Dillema - Productivity Lost - Answers
Thursday, 04 December 2008
I love to write code. I am 49 years old and have been programming off and on from 1977 – 1990 and as a fulltime professional since 1991. I hesitate to even guess how many programming languages I have used over that time frame. Since I love to program, not only was I using several different programming languages at various jobs, I was also experimenting with several others after work.
I don’t do as much “on the job” programming as my role has been a “Software Architect” for several years now, but I still do a fair share and even more so in my spare time. For example, I released an open source project that I have been working for the last two years called Global System Builder. It was supposed to be fun, but that is the crux of the issue I am having – it was mostly a lot of really hard work. Not that it was technically difficult, but seemingly something very simple turned out extremely hard to do.
Let me digress a moment to illustrate a point. As the domain name of this blog indicates, I was progressing in programming languages as the level of abstraction was being raised over time. Meaning in modern day times, not worrying about memory management, ala garbage collection in languages like C#, enjoying the REPL feel of dynamic programming languages (e.g. IronPython and IronRuby) and marvelling at the power of functional languages (e.g. F#) and then...
I came to the realization that as time marches on, rather than programming becoming easier (read: simpler) it was actually becoming more complex, to the point where today even to write anything simple seems to take a monumental effort, and seemingly more configuration effort than programming, and with so many moving parts, fraught with errors that are not compile time related. I felt this not only in my professional software development world that I live in, but even on the open source project I was working on in my spare time for fun. And it was supposed to be fun, but instead it was a design exercise at every turn figuring out which of the programming languages, frameworks, components, and widgets I could use that were the lesser evil since none of them did what I wanted them to do. As you will see, this is the irony.
Sure we use all sorts of frameworks today that supposedly make our programming lives easier. The one I am most familiar with is the .NET framework. At +11,000 types and +100,000 members, I am overwhelmed by the sheer size and complexity of the framework. I can barely wrap my head around 7 +- 2 items let alone several orders of magnitude larger in size and complexity. I spend more time looking at MSDN documentation trying to figure out how some Type works and the members I can use rather than actually writing code.
The argument is that we become more productive cause “it is taken care of in the framework” My experience and others would tend to disagree from a practical perspective and let alone the simple math truth. Our brain is not designed to juggle thousands of Types and so we spend a great deal of time, searching, looking up docs, figuring out what to use from a design perspective, looking at the samples from an implementation perspective, looking at how others have used it – only to find that while it is close to what I want, it does not really meet my requirements. Fine, close enough and with a few overrides, no problem. But when you get into low level design and implementation, you run into hard stop limitations and then you a) try and find ways around the limitations or b) go back to the drawing board or c) think about not programming anymore.
And so ends the digression. The point being, as told by Charles’s Petzold, “Does Visual Studio Rot the Mind” under the subtitle, “The Pure Pleasures of Pure Coding”, where he states, “...but there’s no APIs, there’s no classes, there’s no properties, there’s no forms, there’s no controls, there’s no event handlers, and there’s definitely no Visual Studio. It’s just me and the code, and for awhile, I feel like a real programmer again.”
At last we arrive at why I am possibly deciding not to code anymore. There is so much in the way and there is so much “of it”, that doing anything simple has become an incredibly complex task and doing anything complex takes teams of software folks to deliver due to the sheer size and complexity of our own programming environments, let alone trying to solve the problem domain we have been given.
Here comes the “I remember at time when...” Love it or hate it, Visual Basic 6 (or the Delphi equivalent at the time) was the most productive programming language and toolset I have ever worked with (Digitalk Smalltalk takes 2nd place) for building business applications in the last 17 years I have been doing software development. Why?
I used to do storyboards right in the VB6 IDE asking the business guys what they wanted, “so you need a form, with a list box and what should be in the list box, and when you clicked ok, now what... “And on it went. In a couple of days to a week, we basically had the front end of the application prototyped. Since it was back in the “two tier” days all we had to do was hook it up to the database. And if we got really “fancy”, (or had the luxury), we added a third tier of business logic written out as VB6 classes, not in the stored procs, and after a bunch of testing, report writing, etc., boom! off it goes into production.
There were a lot of happy people back then. The business users were happy because they got to sit in and basically design the user interface with me while trying to figure out the app. And then weeks later it was delivered and did exactly what they wanted it to do. I was happy, along with my team as we got a buzz on from being so productive and delivering what the users wanted. And the tools, language and database was simple enough back then to not to get in anyone’s way. Everyone happy! So what happened?
One part of it is web applications happened. Even in 2008, Visual Studio ASP.NET cannot give you a WYSIWYG view of your web application. Yet, VB1 was able to give us WISYWYG back in 1991! What the heck? Not to just pick on Microsoft, I would say the majority of vendors’ web development tools are like a decade or so behind their “traditional” development tools for building desktop applications. Further the vendors push more and more features, more and more “layers”, which mean more moving parts, which means more complexity, which means making it harder and harder for the programmer to use. It reminds me of the infamous air-conditioning “duct” scene in the movie Brazil.
Our tools and applications have become so large, many and complex, it is literally making us less productive. And to me, productivity is everything. Productivity. It is as simple as that.
Updated: A Programmers Dilemma - Productivity Lost - Part II
Friday, 28 November 2008
In our software development business, we are always asked for estimates on:
- How long is the project going to take?
- How much will it cost?
There is a simple to use online estimation tool at: http://www.cms4site.ru/utility.php?utility=cocomoii
It takes the lines of code and hourly rate as input:
Clicking the go button immediately gives you an effort and cost estimate:
You can fiddle with team skills and project complexity and see the result.
I know some people and organizations are adverse to counting lines of code, but after 17 years in this business and having tried several different estimation methods and models, I have to admit, using COCOMO II as an estimation model has proven in practice, at least for me, the most accurate way of estimating how long a project is going to take and how much it is going to cost.
You can read the extensive COCOMO II estimation model manual at:
http://csse.usc.edu/csse/research/COCOMOII/cocomo2000.0/CII_modelman2000.0.pdf
Wednesday, 29 October 2008
I have been coding web applications In Visual Studio since Visual InterDev was introduced in 1997. Over that time, I have seen a wild array of error messages, but yesterday, while debugging an ecommerce web application using Commerce Server, I got this interesting message that I have never seen before:
Object is in a zombie state? I wonder what that really means?
Clicking Yes, produced this dialog box:
Huh? How can an object be a “zombie” and how can debugging be stopped, but not yet complete? I know it is Halloween, but... oooooo pretty scary, huh kids!
Sunday, 19 October 2008
Get Off My Cloud
Dare Obasanjo wrote about Cloud Computing and Vendor Lock In where Dare commented on Tim Bray’s Get In the Cloud which Tim described a couple of issues. One of them, called a tech issue was, “The small problem is that we haven’t quite figured out the architectural sweet spot for cloud platforms.” I would say we have not figured out the architectural sweetspot for “any” platform, cloud or otherwise.
It seems that every API we program to, whether cloud based or not, is still a custom, one off API. It appears to be that way since the dawn of software programming and still continues that way, even when we are in the clouds.
What I am talking about? I know people cringe about analogies to software development, but this one contains the single point I am making. Do you know what an 8 pin DIP is? DIP stands for dual inline package and an 8 pin DIP is one “standard” package (or interface) for integrated circuits (IC’s). The keyword being “standard”. There are millions of different types of 8 pin DIP IC’s out in our world today used in virtually anything electronic. Much like our accompanying software, however, there is one crucial distinguishing difference between the two. Can you guess what it is?
Those millions of IC types can fit into “one" package, or put another way, exposed through “one” interface and that is what the 8 PIN DIP is, an interface. Through that one interface type or package, I can access millions of features and functions. Further, through using multiples of those packages/interfaces, I can make almost anything I want, from a motherboard, to a robot servo controller to circuitry that makes my Blackberry a Crackberry (oops that’s just me, the carbon unit) to circuitry that guides a rocket to the moon.
How come we have (still) not figured this our in our software world where we continue to hand craft one off interfaces that seemingly are tied to the implementation, even though we don’t think that (i.e. the vendor lock-in described by Tim’s article). Brad Cox seemed to have that figured out in his concept of a Software IC years ago and further in his book on Superdistribution. A man before his time, I would say.
What’s my point? My point is that there is going to be an inevitable conclusion at some point in time where “how” you interface with any given piece of software functionality is going to be more important than the functionality itself. Know what I mean?
Imagine you woke up this morning and you could access all software libraries through an operations based API like, Query, Create, Update, Delete, Copy and Move. That was it. That was your “complete” API and all software libraries, components, features and functions exposed that API where the general pattern is create a request comprising one or more operations on specified items. Submit the request to the API service for processing. Interpret the result returned by the service. That’s it.
Remember I am just talking about the interface exposed by the software library and not its internal representation. In other words, a standard API used by everyone. How would that change the way we would consume libraries (or components or services or features or functions) to develop software today?
Don’t get me wrong, I am not saying we are not heading in this direction, we are. There are several examples of this today, but it is not ubiquitous or universal or all encompassing as it could be. As a .NET developer and using the .NET framework class library of some 30,000 types, I can tell you it is not that way today. In fact, it does not matter what framework class library I use to be clear I am not picking on Microsoft. I am sure that at the PDC with some 38 sessions on cloud services and the announcement of .NET 4.0, we will see some interesting developments there, I am just hoping it is towards the direction of a standardized interface for cloud services.
Maybe it is just wishing thinking that I will see in my lifetime a standard interface or package like the 8 PIN DIP for software libraries where through one "standard" interface I can access thousands of library functions. Then again, software industrialization is occurring at a dizzying pace and I can’t help feel that it is just around the corner. History in the making is the phrase I believe and I hope to be a part of it.
Sunday, 21 September 2008
Global System Builder Promo
- don't forget to click on on bottom right of player
Sunday, 03 August 2008
Recently, I have been focusing on updating my web-based DLR IDE which is one of five components that make up a larger project called Global System Builder.
In a previous post, I mentioned that I would like to develop a DLR IDE in Silverlight, but I am still having a time figuring out Silverlight, especially trying to debug web-based Silverlight applications.
In the meantime, I continue to extend this JavaScript code editor called “EditArea” by Christophe Dolivet. What an excellent job he has done! Features include:
· Live syntax highlighting for several languages and the ones that I am interested with the DLR which is Python, Ruby and Managed JScript.
· Multiple-document support with tabs
·
AJAX load and save functions
· Line numerations
· Search and replace (with regexp)
· unlimited undo and redo
· Auto-indenting – great Python support!
· Font resizing
· Internationalization
· Toolbar customization – add your own commands via plug-ins
· Full screen capability
· Create new syntax or language files
· Multi-browser support
· Multiple instances on the web page (if required)
Really quite amazing and it has been working excellent for me. Great job Christophe!
I can load and save files to the disk in a project hierarchy. I can create new files and then save to disk. If you open a file and start editing it, you will notice that an asterisk is added to the filename tab to tell you that the file has changed.
It looks like there are two items left for me to implement, each one with their own set of difficulties:
- Intellisense
- Debugging
I prefer to GUE (Go Ugly Early) to try and mitigate risks, so it is going to be Adventures in Debugging. But before I do, Intellisense will be tricky as well since Intellisense has quite an array of features. My goal is to only implement “List Members” and “Parameter Info.”
Back to debugging and without getting too philosophical, I can’t image any “real” IDE that does not have debugging support, especially if you are working on any size of code base. I view it as the same as driving at night with no headlights – you are bound to hit something hard sooner than later. So what choices do I have for debugging with the DLR and my custom IDE? As far as I can tell, there appears to be one choice and that is MDbg.
You can download MDbg and compile it. You will need to add this trick (see answer at bottom) to get the help to work on the command line.
Mike Stall is the MDbg guru and he has a great MDbg link fest to get you started. I also really liked Jan Stranik’s Introduction to the Managed CLR Debugger as it shows how you can easily write an extension using the debugger API. You can also download the videos.
So, how to start? I started off by running MDbg and then issue the command line “load gui” to load a Windows GUI extension to make it easier to use then the command line. This extension provides an excellent example on showing how you can get a debug window to step through code, show locals, etc. Here is the code that I want to debug in my editor:
Dead simple, but a place to start. On the web server, I have a C# Windows Forms application that hosts an IronPython 1.1.1 engine in it. I also have IP 2 with the DLR prototyped, but just trying it out on IP 1 for now. The application hosting the IP engine is called GSBService1.exe, compiled with debug symbols. I can run MDbg and launch the app in the debugger:
The debugger attaches to the running process and breaks into the code at the main entry point:
You can type help to get a list of commands available that allows you to do all sorts of things such as setting/clearing breakpoints, stepping in and out of code, etc. In addition, from the tools menu, you can open other windows such as viewing the Callstack, Locals, Modules, Threads and QuickWatch.
One of the commands is “x” which lists the loaded modules. You can see which modules are loaded in my application. You can also specify a particular module and display specific functions by pattern matching. Here is the help usage:
Note that I am looking for the function in the module gsbservice1 that executes my .py file – I know the function contains “ParseInteractive”, so I use the x command again to find it using the pattern matching. Then I can specify a break point by the command b ~1. I then issue the go command (g) and now I am running and all set to debug at my breakpoint.
I go back to my web-based code editor and hit the command Start Debugging and immediately drop into the debugger at my specified breakpoint:
Here I am stopped at my breakpoint and I am starting to step over (command o) the code. In fact, I stepped over the code until the Python code was compiled by the IronPython engine. So how come I could not step into the IronPython code?
If you look closely, you will see that I used the x command again to see what modules are loaded and lo and behold a module called, “debuggableSnippets2.dll” What’s in there? Using x command on the module, you can see my compiled .py code with the class name and methods that correspond to the source that I entered in the code editor. Searching on debuggableSnippets points to this source:
// IronPython has two units of compilation:
// 1. Snippets - These are small pieces of code compiled for these cases:
// a. Interactive console expressions and statements
// b. exec statement, eval() built-in function
// c. Types generated by NewTypeMaker for instances of Python types
// d. others ...
// All snippets are created in the snippetAssembly. These are created using GenerateSnippet.
// 2. Modules - Modules are compiled in one shot when they are imported.
// Every Python module is generated into its own assembly. These are created using GenerateModule.
//
// OutputGenerator manages both units of compilation.
Makes sense. It’s nice that I can step through my C# code that hosts the IP engine, but what I am really interested in is stepping through the Python code.
I see that others have been able to do it and others here as well. But not sure exactly “how” they are doing it. Maybe someone will enlighten me.
Note in the forum that Mike Stall indicates that there may be some issues with MDbg and that perhaps an updated version is forthcoming. That was over 6 months ago. I really hope the MSFT DLR/IronPython teams keep tool support in mind and provide an updated version of MDgb. Maybe Michael Foord, Douglas Blank, Ben Hall, and Stefan Dobrev can help lobby Harry Pierson to keep MDbg current and able to work with the DLR.
We are all building DLR IDE’s of various sorts (IDE Developer and DLR IDE on Codeplex) and MDbg seems the most likely candidate as a debugger – for those that want debugger support. Also, I suspect that this is a precursor for people wanting to create their own languages on top of the DLR, so you would think debugging tool support would be important.
In the meantime, if I can only figure our how to get MDgb to debug IronPython code… And I may have to wait for Beta 4 to try it out on IronPython 2.0.
Wednesday, 30 July 2008
Dell’s Fashionable PC’s– Yours Is Not Here
I have poked marketing fun at Microsoft’s Dinosaur Ads and Oracles “hot pluggable” EAI platform, but Dell just beat them with, “Get the mobile, fashion-forward student laptop.”
“This personalized laptop reflects your sense of style and keep you connected to fun, friends and assignments, no matter where the school day takes you.”
Wow, check it out man, FREE COLOUR!
I know after being in this industry for 17 years, I have a little bit of cynic in me, of the Dilbert kind, but honestly, Dell is not only marketing to an ever younger audience, (reminds of Camel cigarette ads for kids), but it is to the point of trying to make computers be as hip as skateboards (psst hey Dell, never going to happen!). Note the ‘Street” version above. I wonder if I got one of those that I would develop a bad boy, street attitude. Oh wait a minute, most of my co-works already think that about me...
"More You. Inside and Out. Personalize your Dell STUDIO with ‘Designed for Dell” accessories – the brands you trust customized to match the colour, fit and style of your system.”
Never would I believe such branding could be applied to a... computer? Now for one moment, I will admit that I was always attracted to Alienware computers as being a closet gamer, plus they are cool – and the marketing and branding is slick. But I will always associate Dell with business computers – that’s their brand to me. Why would they jeopardise their business brand to go after the skateboard market? Share value? Pfffttt!
“A cool campus accessory that is ready to move.” Honestly Dell, just what is this marketing message supposed to convey? That a computer is a cool campus accessory for woman? That it is the new purse? And what about that locker... Show me one student that has a pink fur lined shelf for her books. Even my five year daughter feels pink fur is on the outs. What is that picture of? Of her and her Mom when she was little or her and her daughter or ?? This is so wrong. My wife says, “Who are they kidding? Computers are supposed to be tools to help people and now it has become a fashion statement – an image conscience thing. F*&! - there is no stopping these marketing people.” OK, that was a quote from my lovely wife when I showed her this. She said a lot more, but none that I can repeat here It is embarrassing to me being in the computer industry to be associated with this. Good thing I don’t have any Dell computers.
“Make Your Dorm Room The Centre Of Fun”
‘Whether they’re an aspiring botanist or a fan of film noir, this PC will bring inspiration and entertainment to their dorm room for a fantastic price.”
Oh man, I can tell you that when I was taking computer courses in college, my dorm room was the center of fun and inspiration, but there were no computers in it
“Handles Whatever Your World Throws At It.”
Dell, what happened to your brand? I picked up a Globe and Mail on Monday and you had this flyer in it. It has changed my view of Dell forever – lost all credibility to me. How can I ask my business customers to take your brand seriously when you are all trying to be all hip and designer like to a younger generation? Worse yet, the ads are seemingly designed by someone in marketing that seems to have no clue about that demographic. That’s aside from being pretty money grubbing going after an ever younger audience – pretty soon we will see Dell ads for grade school kids in summer camp...
Someone else from the fashion industry wonders about the same thing, but in reverse, "Why Would Dell Hold a Fashion Show.” I can only hope that this new low in computer marketing is just a total oversight on Dell’s behalf and they will say it is an experiment gone awry and turn back to what they do best – build practical home and business computers for the masses. But somehow I doubt it. With all of this advertising comes the sunk cost of designs and tooling to produce all of these free color laptops. .
Tuesday, 22 July 2008
I was reading an interesting post at Ted Leung’s blog called, “IDE’s and Dynamic Languages”. It is interesting to me for a number of reasons. One is how a Text Editor can be considered an IDE, even though Ted does say that automatic syntax verification and code completion is certainly beyond a Text Editor.
One thing that did surprise me was no discussion on debuggers as part of an IDE. How can people code using a text editor without a debugger? I guess I have been (totally) spoiled back in the VB6 days (yes, I will admit it) that I could step though code and when I bumped into an error, I could back up the debugger a few statesments, make my correction and keep on stepping through. I have never been as productive since! Know what I mean? Yes, I know this says nothing about design, but an IDE is a tool for using a programming language, yes? So how come we (as in developers) have so few tools or is that choice of tools?
According to a recent analyst report, 97% of developers on the .NET framework use Visual Studio and over 70% use Eclipse or Eclipse based IDE’s for Java. As much as I love Visual Studio, and being a .NET developer, I have no control as to what I want in an IDE. Worse yet, with the emerging new dynamic languages, IronRuby, IronPython and Managed Jscript, have almost no tool support at all in Visual Studio. While there have been some announcements, and articles and some tooling, its like bolt-ons to Visual Studio and still yet to come.
As a .NET developer, specifically a .NET web developer, I would like to use something other than Visual Studio to develop web applications using a dynamic language. My wish list is for something lightweight and web-based so that I can explore using, an interactive interpreter and a simple code editor just using a web browser. Maybe something like this:
And this:
This was my first version of a web-based “very” lightweight IDE that used a JavaScript based interactive console and a JavaScript based code editor. You can download the code from Codeplex
Several months have passed since I released this and I have been working on a new version that targets the IronPython 2 and the DLR. In that time, other folks have started to develop similar web-based interactive consoles and code editors. One example is Jim Hugunin’s DLR (interactive) Console which you can download from the Silverlight Dynamic Languages SDK. I should point out that this is a modified version. Also note that it uses Silverlight:
As an old ASP.NET/AJAX/JavaScript/HTML/CSS developer, I am quite excited about Silverlight for a number of reasons. I am hoping the adoption rate and the tooling for this technology also increases over time. Silverlight development also suffers from not being fully integrated in Visual Studio, but I should be fair as it is also Beta. But trying to run a Silverlight “web” application on a web server and interacting with other lanaguages is tough at best. But the rich UI experience is really quite nice compared to old school ASP.NET forms apps. So even after 6 months of releasing my lightweight dynamic languages development environment, I am still torn between “tried and trued” JavaScript and the new Silvelight.
I thought about how I would implement intellisense in a JavaScript console and cringed at the thought of actually how to implement this. I could see using a few of the controls from the AJAX Control Toolkit to implement this, but it would be quite the effort. Not only does the DLR console support intellisense, but so does Daniel Eloff's interactive console called :
Wow, I am impressed!
Here is another web based shell (that you cannot download) from Oleg Tkachenko:
Also Michael Foord has a Silverlight based Python in the Browser:
Jimmy Schementi has an IronRuby console:
Of course there are other implementations, but they are not web-based. Nonetheless, Joe Sox’s IronTextBox works very well:
And Stefan Dobrev's DLR Pad:
And Ben Hall has just released his IronEditor:
So what’s my point? I think all of these projects are great and kudos to the people that built them. It takes a lot of time and effort above and beyond just regular work hours. I have been there myself, my hats off to you folks! But, there are 8 versions of the interactive console and a few versions of a basic code editor. I know it may be a dream, but it would be great to collaborate with these people and write out a simple set of requirements for what a great DLR console and code editor would be. And then as a virtual team, implement it.
After all, to a large degree, it will be how well supported the language is from a tools perspective that will really determine the rate of adoption. And right now, the tools (or IDE) experience for Dynamic Languages on .NET is severely lacking to the point of having several people independently developing their own tooling. In this post I only pointed out a handful of these tools and I know there are others, but I was really targeting web-based IDE’s. Maybe that is an opportunity? Or is it a pipe dream?
I am also wondering how, in a code editor, one could hook up a debugger to actually step through the code, regardless what Dynamic Language (or Static or JavaScript or Silverlight) is being used? Hopefully I won’t have to wait until PDC 2008 to see what the next step is from MSFT. Who knows maybe there is enough interest to develop a Web-based IDE for Dynamic Languages on .NET.
© Copyright 2010 Mitch Barnett - Software Industrialization is the computerization of software design and function.
newtelligence dasBlog 2.2.8279.16125 Theme design by Bryan Bell
| Page rendered at Friday, 21 May 2010 00:00:12 (Pacific Daylight Time, UTC-07:00)
|
On this page....
Search
Categories
Software Engineering Links
Sign In
|