views:

1051

answers:

17

Preamble

To build dynamic web-sites, we to master at least four languages:

  • HTML for the structure of web pages
  • CSS for layout and design
  • JavaScript for interactivity
  • A language for business rules or dynamic driven data

In addition, there's SQL for persistent storage, Memcache for sessions and caching, APIs for the many different content management systems. We should also consider interacting with OpenID, Facebook, Twitter, OpenSocial in building a web application, for it to be interesting.

All in all, it's an utter mess!

If you take into account two objectives:

  • Teaching web development to kids
  • Staying productive as a team

Question

What high level systems exist that unify HTML + CSS + Javascript + (Insert High Level Language here, PHP preferred)?


Background

  1. I am a software engineer with 15+ years of experience as project lead and developer with technologies like Broadvision, Autonomy, Enterprise Java, and Oracle.

During recent years, I have focused on the developing community websites, using Drupal or PHP frameworks such as CakePHP. I like web development and enjoy the impedance mismatch between the technologies involved. Still the inevitable conclusion I come to is there must be a better way.

  1. I am the father of two sons (13 and 9), and while I don't want them to become programmers I would like them to comprehend computers as more than gaming machines. I like to motivate them to tinker a bit with web development to express themselves.

Whenever I show them bits and pieces, I would love for them to have a toolset that allows them to create "interesting" results in an hour or two on a Sunday afternoon.

+6  A: 

The closest I think you'll get is .NET. There are many frameworks for many languages, but none that I know of that handle absolutely everything. Beside that you must not attempt to convince children that programming is a walk in the park. It's a difficult career, that requires a lot of study and keeping-up. We work with technologies that are here today, and gone tomorrow.

If you think about it, programming isn't any different than carpentry, or aeronautics. Just about any profession you chose will require you to learn a lot of different things to be better at what you do.

Jonathan Sampson
When I added the "web development to kids" I thought about a simple toolkit similar to Shoes for Ruby (http://www.rubyinside.com/whys-shoes-grows-up-1014.html) but for the web. Really a simple thing to convince kids that computers are more that just games' machines.
Olav
+7  A: 

How is one supposed to teach web development to kids?

An army of kids in web development is what has degraded our profession since now just about anyone calls himself a programmer while it's getting harder and harder for us to get distanced from them and get decent pay.

Many languages and technologies to master? It's a good thing. Let there be some entry barrier to join the ranks of developers.

ADDED: By following comments I can see I have not made myself entirely clear. I say nothing about the age, be it 10, 30, 50 or 80. It's all about attitude. Whether a person understands and accepts the fact that there is much more to the profession than moving controls with a mouse in some designer or CMS. There is a lot of knowledge to be gained, including basics of CS, algorithms, data structures, databases, architecture, extensibility, maintenance, performance, scalability, usability, marketing and much more that belong to the workshop of a professional software developer. I a person is ignorant of those and doesn't make a move to educate themselves and strive to become more and more proficient, they do not belong to the profession. And let this opinion be biased.

Developer Art
True. I can't tell you how many times I've heard, "Oh, my cousin said he can make us a website for free."
Jonathan Sampson
So true. But unfortunately now everyone is a web-developer even my cousin's dog.
rogeriopvl
I almost never refer to myself as "web-developer" for that very reason. I tend to go with "Software Engineer" more frequently - it has a bit more authority to it.
Jonathan Sampson
I hate having a such an extreme bias on this. I'm 16 and program.
Chacha102
@Chacha102: It's not about the age, it's about attitude.
Developer Art
This "teach to kids" part was somewhat unrelated to my question, but I believe that a technology that can be explained to a child ultimately works well for professionals, too. I don't quite believe that complexity is good to keep beginners out without hurting the trade itsself.
Olav
@Chacha102: So what? Many of us started programming at the age of 10 or even less; nobody questioned the ability of young people to program - but many people experienced that begginers start calling themselves "programmers" when they can't really program; they build crappy php code that real developers need to clean up later; they provide a cheap "alternative" for customers who easily choose them over a skilled expert. Later, these customers will come the expert though.
Tamás Szelei
@Jonathan Sampson, I don't think anyone should be called a "software engineer". We're as far away from software 'engineering' as we are from reaching another galaxy. The existence of sites like 'stackoverflow' is an indication that we're doomed as professionals. Show me one electrical engineer who's sitting around asking people online about a problem he's facing while designing a circuit. I wouldn't be surprised if his employer would fire him for disclosing any details at all. Is there an architect seeking help online designing a floor plan? I doubt it and if there are, what's their worth?
Sergey
@unknown There's absolutely nothing wrong with SO. If we were all here asking how to perform conditional logic, that would be problem. Frameworks don't come out to assist carpenters do what they do. New tools are created every year that they must become familiar with. Our job is radically different in those regards. The fact that you ask questions doesn't mean you're worth less.
Jonathan Sampson
@Chacha102 Yea, I'm in that boat too. But what appalls me is when I, as a teenager, look at an adult's code and feel like throttling him for all the errors and sloppiness in it. I make an effort towards standards-conformance, and yet I'm seeing people significantly older than me (some even "professionals") making a dog's meal of their code, and making the lot of us look bad... although as I understand, coders like me are sometimes few and far between. The most frustrating thing is when people are too ignorant, lazy or stubborn to learn how to clean things up and do it properly. Enter SO!!! :D
I faved this question just for this answer.
MiffTheFox
I love it when someone proposes a high entry barrier -- but just low enough that they themselves can jump over it. Do you program using butterflies? No? Then appreciate the fact that for you, the barrier to entry was lower than it was for Turing, Knuth, etc. and recognize that continuing to lower the barrier to entry to quality programming helps the next generation of programmers, and ultimately helps everyone.
Alex Basson
+12  A: 

GWT goes someway towards being a high level toolkit, letting you write Java to produce Javascript.

Ollie G
I'm not so sure how Java is higher level than JavaScript, but who knows. I'm subjective anyway.
Ionuț G. Stan
java is not higher level than javascript but GWT is because it abstracts you from writing javascript altogether. point of higher-level languages/toolkits/libraries is to abstract you from something and GWT does that quite well.
lubos hasko
I'd say JavaScript is definitely higher-level. I'll also be semantic point out that any language will let you produce JavaScript :)
jscharf
An interesting approach might be to have Javascript on both client and server side, like Helma http://dev.helma.org/ does.
Olav
+7  A: 

Web programming is an inherently multi-discipline craft.

The primary reason for this is because of seperation of concerns...the reason that HTML and CSS and JavaScript, SQL, etc, are not mashed together in one language is because they each have seperate goals, caveats, pitfalls, and strengths.

Can you imagine trying to debug a site that has SQL, CSS, JavaScript and PHP code mixed together in the same source files? You may have already had the misfortune of doing so. Sadly, there are literally thousands of sites written like this, and it is a complete nightmare trying to debug or add to such messy amalgamations of presentation, data, and structure.

All in all, an utter mess! How is one supposed to teach web development to kids?

I think the most important thing is teaching the fundamentals of programming and making them stick. Variables, logic, pointers, memory management, algorithms, data structures, etc.

When you have the fundamentals of programming, it's easy to work in multipe languages, pick up new ones, and easy to change with the times. This is an invaluable skill for something as constantly-evolving and trend-based as web programming.

In my opinion people new to programming should be started at lower level languages, like C for example. People should be tought the intrinsic, fundamental concepts of programming and should gain knowledge of what is going on behind the scenes before even being shown a higher level language like PHP or Python.

I think that this attitude towards teaching programming will have the effect of breeding better web developers as well as providing a barrier of entry that will weed out people that don't have the interest or intelligence. I think the result of this type of attitude will be better developers, better software, and ultimately more powerful languages and tools.

jscharf
I think ANSI C is the ideal first programming language - it lets you make progress relatively easily and still forces the novice programmer to understand the inner workings of the computer, and especially memory management which is fundamental.
Tamás Szelei
I agree. Even if you never have to worry about memory management once in your entire web development career, it pays to know what is actually happening behind the scenes and appreciate the high-level luxury of never having to worry about explicitly deleting every single thing you created.
jscharf
@[sztomi]: ah yes, there's nothing like spending 16 hours in the debugger trying to find a memory leak to let novices really appreciate the joys of creation and discovery that programming provides ;-)
Steven A. Lowe
@[Steven]: That should be considered a rite of passage IMO :-) I have a sneaking suspicion that a huge number of web developers have never even touched a debugger.
jscharf
I don't find it very gratifying to debug memory leaks when I want to develop interactive web pages. And I think the time has come to adopt second generation languages like _D_ for C or _Scala_ for Java for more on-the-metal development.
Olav
A **beginner** will write 300-400 line programs at most that wouldn't require 16 hours with the debugger. Besides, one needs to understand how to find a memory leak. When the beginner is forced to implement a linked list for example, later on, he will know what's going on when he uses a LinkedList class in X programming language and Y framework.
Tamás Szelei
Disagree, the reason why we have different languages is coincidental rather than intended. Separation of concern (e.g. MVC) is completely different to the mishmash of technologies. One can develop an a well structure MVC application in pure 100% portable Java - Swing. In fact, there are a lot of engineers from Sun MS who prefer this approach, but Swing ain't so cool nowdays.
Andrew from NZSG
+2  A: 

I think the problem with web development is that it was not originally designed for what it is used today. We build rich client applications inside a browser with HTML+CSS+JavaScript plus whatever serverside technology generates it. Yes, it works, but it's a pain, especially with those annoying browser incompatibilites. The existence of Flash and Silverlight proves this. They let you build your app with one single technology, still inside the browser. The downsides of needing a plugin for your content is obvious though.

Tamás Szelei
A: 

Many technologies to master is not a good thing. We need a Visual Basic for the web, no matter what the elitists say.

Alan B
If you want to make a site without engaging yourself in all the technologies of the web just use a CMS and don't tell us you are a programmer. By the way you have to learn how to use the CMS too.
backslash17
Not using Visual Basic makes one an elitist to the same extent that not drooling on one's chin makes one a prodigy.
John Lockwood
that was supposed to be a joke, right?
dusoft
My comment about VB? Not really. It's called Basic for a reason. Meantime elitists presumably think they're advanced, and if they're right, they are. So in between those extremes are a whole bunch of intermediates, and if the curve is a normal one, they should be the bulk of the programmer world. It's where I live -- the fat part of the bell curve.
John Lockwood
@Irish Al - No, that's what a CMS is for. If someone wants to patch together a working site with a few pages, they use Joomla, Drupal, etc. A CMS basically is like Visual Basic for the web: click, drag, drop, maybe a line of code or two. If they want to build a useful, full-scale site that does something unique and interesting, they'll have to learn how to do things properly - using *agh* CODE, and MORE CODE :D hehe
Okay, let's not get hung up on the BASIC aspect - what I mean is a RAD tool for the web that you might use to produce a form-based web business application. Perhaps we're getting there now with Silverlight 3 / VS2010, maybe it will take until HTML5 appears. I still don't see why a complicated toolchain is a good thing in itself - you can be a good or bad programmer in any language or toolkit.WRT the snipes about CMS etc, I know what a CMS is thank you very much for asking, my own experience is with DotNetNuke and custom C# modules for it. I've used VB6 maybe twice and not by choice.
Alan B
+3  A: 

Software industry is suffering from unqualified individuals doing nothing but creating poor quality products and at the same time distancing this profession from becoming a true engineering discipline. This isn't something to get certified on. For the love of god, don't 'teach' anyone software development. Explain to them that making great software only comes out as a result of years of experience and wealth of knowledge of past and current technologies. The worst you can do is introduce yet another half-baked developer creating work for others working with them. Tell them to get educated. I know this isn't the answer you probably wanted to hear, but I wanted this to be read.

Sergey
I agree to some extent. However, you have to get there somehow. "Years of experience" - what are you supposed to do in the meantime? I say, go for it - teach them. But if you're teaching them a hobby, make it clear that coding or web-dev is a *hobby*, not a profession, unless they're willing to put in lots and lots of time, dig their teeth in and learn how to do it all properly.
I think what you describe is the fundamental cause of the entire debate. It remains a hobby for a lot of people. There is no incentive to continue and learn more because the industry, in general, does not ask for that. So you end up with programming hobbyists working side-by-side with professional developers (pers. exp.). I think it should be treated as any other profession, say engineering (even though it isn't). Let schools do the teaching. Let companies improve their products by hiring bright, knowledgeable, accredited individuals. The experience will follow once you're on the right track.
Sergey
+2  A: 

The languages are the least of your worries. It's the problem domain that they work with that is complex. Using different languages actually makes things more manageable because a) It makes the boundaries explicit and b) the languages can be optimised for the domain.

troelskn
Some web frameworks that I am aware of try to unify the separate languages: Ruby-on-Rails does generate Javascript from Ruby code. Both CakePHP and Ruby-on-Rails have server-side code for form generation. None of these touches CSS, though, although my experience with CSS files is that they become an unmanagable mess after a few iterations. I believe this is due to the language's lack of nested scopes.
Olav
+2  A: 

Programming (PHP/JS) and document format (HTML/CSS) are 2 different things. Learning to program in PHP and JS at the same time will also be difficult.

You should focus on HTML and JS on the client at start. You could then let them program javascript on the server as well. This will make it only one programming language, and focus on HTML over CSS to start with.

Once they've learned the basics of JS and HTML, you can teach them a more widely used server side programming language (like PHP, Ruby, etc) and CSS.

OIS
Cool link. Thank you.
Olav
+1  A: 

You need different languages for different purposes. In most web applications there's actually quite a bit going on, so you need the different languages and solutions.

If the goal is to unify on a single language, you can do that. You can use Javascript on the server, and then build the pages using document.createElement() and apply styles to them directly to the styles property. And on the server, store your data directly in files with Javascript.

Obviously this wouldn't work out that well. HTML is not perfect, but there is a reason it is so ubiquitous-- it does what it does simply and well. CSS is both convoluted and too simplistic, but the underlying idea of defining overrideable rules to express your design is sound. And SQL may be a pain to understand at times, but expressing database queries this way is expressive and actually works pretty well.

That being said, I'm not saying there is or should be one architecture. There shouldn't be. Each project should use an architecture in line with its requirements.

On your next project try to simplify: do you really need a database? Can you combine the view layers to simplify, either using something like GWT, Applets, Flash or .NET? Do you really need to serve up your content in a browser (which introduces CSS, HTML and Javascript complexities), or can you just write an application?

ndp
+6  A: 

How are you supposed to teach web development to kids? Wow, that's a thorny one. How does one go about teaching them surgery, or intellectual property law, or civil engineering? Or for that matter auto mechanics, or plumbing, or general contracting?

Have you thought about popping in a Sesame Street tape?

Elmo doesn't like it when you trivialize his profession.

John Lockwood
Environments like http://scratch.mit.edu/ give kids an environment in which to learn programming of sorts. But the publishable results are restricted to little rectangles on a web portal rather than complete web pages. Probably a unified commercial offering like Adobe Flash really is the answer to the "for kids" part of my question.
Olav
John makes a good point here. I think we programmers are a bit self-centred about these things. *Why* do you need to show kids how to program? *Why not* show them any other profession?
nickf
-1 This kind of sarcasm is unhelpful, condescending, unnecessarily defensive, and ultimately counter-productive. It's what helps transform programming from being open and egalitarian to being a priesthood -- which benefits no one but the priests.Olav not trivializing anything. He's not saying *professional* web development is easy, but he's also explicitly not talking about making his kids professionals, just exposing them to the basics -- which *are* easy, anyone (even me) can learn them, and that's exactly what has made the web such a democratic platform.
Alex Basson
Whether you find it helpful or not, condescending or not, unnecessarily defensive and all the rest or not, this kind of response is precisely what's called for in the context of the thesis that web development is trivial enough to be taught to children. Defending software development as a non-trivial profession for adults shouldn't need doing so in the first place, and doing so hardly creates a "priesthood", any more than saying general contracting or civil engineering can't readily be taught to children makes a "priesthood" of those pursuits.
John Lockwood
+2  A: 

Django can take you part of the way through its cleanness. It is focused around productivity. Teaching is not easier than any other language/framework, but look at it this way: when taught this tool, your students are well equipped in their knowledge of how easy it should be. They will never accept Java servelets or similar nightmares after having learnt Django.

Jonas Byström
Though you have to learn Python to learn Django... (I love Django, btw)
Gabriel Hurley
Then you know that nothing evil comes out of learning Python. :)
Jonas Byström
+1  A: 

Hi Olav,

I think your approach might need to be rethought. Take this for what it is, my opinion, but I would think this ordering might work better.

Top Priorities: (no particular order)

  • Develop problem solving skills
  • Be productive as a team

Next:

  • Basic Programming skills (PHP, Python, etc)

After they know how to solve problems as individuals and as a team they can move onto specifics such as:

  • Client/Server model
  • Markup (HTML, XHTML, XML, etc)
  • Styling (CSS)
  • Client-side scripting (JavaScript / jQuery)
  • Server-side scripting (PHP, Ruby, etc)

Build up their knowledge of what's involved piece by piece rather than jumping into the deep end off the bat - they'll be quickly overwhelmed.

At this point you can start to introduce things like file I/O and databases.

This will give them a fairly comprehensive skill-set. From here they can really start learning.

In addition, one may have to deal with SQL for persistent storage, Memcache for sessions and caching, APIs of content management systems, OpenID, Facebook, Twitter, OpenSocial etc. to build anything interesting.

These are whole topics unto themselves, you can't bite them off all in one chunk. Especially if you're taking these people from 0. Before you can build something interesting you have to learn to build something mundane.

HTML5 will probably be more in the vein of what you're looking rather than Flash or Silverlight but it's not quite here yet...Though support is building.

Baby steps, Olav - if this were The Matrix you could download all that info in one shot but we're not there...yet ;-)

For the moment, and near future, web development is the synergy of many different technologies working together to deliver an interesting user experience.

Well, that's my 2 cents

Crazy Joe Malloy
Thanks for your thoughts.
Olav
From reading your updated question I fear I've meandered WAY off target - apologies, sometimes I start ranting and well...this happens :-)
Crazy Joe Malloy
+6  A: 

"Links is a new programming language designed to make web programming easier. . . Links eases the impedance mismatch problem by providing a single language for all three tiers. The system generates code for each tier; for instance, translating some code into Javascript for the browser, some into a bytecode for the server, and some into SQL for the database."

At first I wasn't going to post this, since it's a research project, not a production system; but all these answers saying "that's how it is, deal with it" begged for a counterexample.

Darius Bacon
And it even comes from Edinburgh ;-) Thank you Darius, this was exactly the thing I was after.
Olav
You're welcome!
Darius Bacon
Wild - I honestly had no idea this existed.
Crazy Joe Malloy
+1 Thanks for the mention
Andreas Grech
+1  A: 

The multi disciplinary nature of web development is one of the things that makes it a joy to work in, especially in a team environment.

To work well as a team, you naturally come together with a group of people with a range of expertise, from UI/graphics people down to DBAs and sys admins. Even within a single layer of the group (for example back end programmers) each person generally specialises in a different set, for example some people may have more experience up towards UI, others down towards data.

I would take this variety any day, compared to working in a room of 10 java programmers all working on some middleware application.

That's a good point. The other say to think of it (for small projects at least) is that the joy of it is from trying to master bits of it yourself. So it's fun either socially, or if you do it the way I do, because it allows you to be a Jackass of all Trades. :)
John Lockwood
A: 

If you simply want to teach them to write dynamic websites, set them going through the HTML tutorial on w3schools.com and once they're done, find yourself a decent looking stylesheet that they can include and set them going with PHP. That'll get them up and running as a hobby, and if they want to do more, they can start piecing together extra knowledge, like CSS and JavaScript.

A: 

Ruby on Rails goes quite a way towards unifying all of those, but for CSS it leaves you out in the cold (though there are probably a few frameworks for RoR that make CSS obsolete, but then you have another markup language, I think), and you still need Javascript (though it does write a lot of Javascript for you, and all DB code).

On the other hand, about your kids: programming is for programmers. On a Sunday afternoon to put something together in a few hours, you would need to know a framework, and buy some plugins, and get everything up and moving without much work. Something like Drupal or Joomla, where they sell templates (for Joomla you can buy packs of hundreds) and plugins to do all kinds of things. And when that fails, your kids should probably know how to go on ODesk and drop $100 to get something done on your framework. Learning to programming is good if you want to be a programmer. Otherwise, it's best to learn what you need to hire good programmers or buy good predone components, and have the cash to do it.

Last point about the kids: let them play video games. That is the best training that they can get for whatever the future holds in store on the computer side. Video games let you investigate, play, and relax with the computer. Once you have that, learning HTML, CSS, Javascript, and some application stack is cake.

Yar