Is Web Development “Real” programming?

by jon on August 7, 2008

It\'s easy to get caught up in the UI in web applications
Recently, I had a conversation with a web developer who was complaining to me that he was looking forward to "real" programming, arguing that web development wasn't real programming.

This is something that I've encountered from many professionals in my field. Often times it stems from a lack of understanding the difference between web development and web design. If anything I would argue that web development presents as many, if not more challenges to developers.

Following Best Practices

If I was a mechanical engineer, or better yet, a building architect, I could easily rattle off a list of "best practices" that are industry standard. Not following these standards would leave me jobless with no one willing to hire me. As software engineers, specifically web developers, best practices are just beginning to emerge as a business requirement.

As a freelancer, I often find myself estimating and reviewing deliverables with clients. I could imagine this being much easier if there wasn't a user interface. Traditional C++ / Java development usually involves writing servers, daemons, processes and drivers. When you're coding any of the aforementioned list, your client won't be eager to peek over your shoulder and see the color of that x86 sound card driver, or whether that enterprise service bus has the latest javascript calendar picker.

Because the resulting deliverables in a non-web application are inherantly foreign to the business, it's easier to factor in time for documentation, code reviews, versioning, testing and business analysis. The end product resembles a cake that rises rather than a bunch of really cool lego bricks that fall into place in front of your eyes.

As a web developer, factoring in the time to document, review and analyze a business model before even writing a line of code could leave the job in the hands of someone less inclined to what are considered best practices. I won't dive into Seperation of Concerns, layered development, Don't Repeat Yourself and other mantra's since they apply across the board.

Which side are you on?

Web applications, by there very nature all generate HTML, CSS and Javascript. The backend language is very different from the resulting code. Writing code for the desktop means that the compiled result is the culmination of both a client and (optionally) a server. The underlying implication is that memory and state need only be managed in one place. With the web, client-side behaviour and server-side behaviour are each treated differently, with varying levels of discoverability, security and overall weight.

How big is your pipe?

Web applications also need to deal with Caching and Bandwidth. I've had the pleasure and challenge of working with an excellent web designer who would pick one javascript framework over another if it meant he could push an extra 10kb of graphical data. Only a small subset of desktop applications even attempt to deal with bandwidth, caching, and queueing.

Sorry, I only speak english and french

Whether you're using Interface Builder, Visual Studio or some Java UI modeller, you have the luxury of being abstracted away from dealing with the visual components of an application that will sit on the desktop. This means you can stick to your desktop language of choice. A web developer needs to be comfortable dropping into a myriad of languages. Even if you're working in ASP.NET, a public website should be standards compliant (or have a good reason not to be). In order to be competitive, eventually components that are specific to a web application will need to be developed.

Visual designers for HTML and CSS don't cut it. Especially when an application is attempting to mimic a desktop experience with a lot of AJAX interactions. These can't be written without a solid understanding of HTML and CSS. Lastly, the syntactic model that a web developer starts with in a mock-up could lend to browser incompatibilities, SEO optimization issues, deficiencies for screen-reading devices, lack of portability to mobile devices or even multi-lingual requirements that could occur in the future.

Perhaps the maturity in Java / C++ development encourages more specialization, whereas a web developer needs to not only know how to code, but also needs to have a very broad skillset ranging from architecture and data modelling to design and user-interface conventions.

{ 1 trackback }

Jon Lebensold » Blog Archive » Blogging About Blogging
September 18, 2008 at 5:08 pm

{ 12 comments… read them below or add one }

ezra August 8, 2008 at 12:35 am

Great post Canada. Keep it real.

Henk August 8, 2008 at 11:39 am

It’s hard to respond to a statement like that without knowing exactly what they meant.

Many types of desktop programming are done in a lower-level environment, which puts you close to the machine. If he was talking about something graphics-intensive, like videogame programming, the time constraints often put interesting requirements on the algorithms you can put together.

Different people have differing ideas what “real” programming is, and will want to go with the aspects they enjoy.

Geoffrey August 8, 2008 at 4:30 pm

i believe in you.

jon August 9, 2008 at 11:52 pm

@Henk:

I’m not arguing that lower-level development isn’t real programming, however I’m stating that the problems found at the machine level (threading, concurrency, optimization, persistence) manifest themselves at a much higher level.

In web development, these problems usually exist outside of a single machine and so they also offer a host of new development complexities that make it “Real” programming. Video game development is an interesting niche since you’re dealing with relatively few integration points, however the same design and usability concerns manifest themselves.

Colnector August 10, 2008 at 3:30 pm

As a very well-versed developer that has worked with many different languages / environments I confess that I used to consider web development a lesser skill.

My opinion has completely changed as I was creating and maintaining my own website. I now believe web design and development require many more skills than standard development but many times these skills don’t have to be at the highest level.

Entry level seems to be lower for web application since an inexperienced programmer can always easily copy+paste some code and check it on his browser. However, as things get more complicated, I don’t think there are less challenges in web dev.

At the end of the day, who cares what’s considered better? If I’m making a product I’ll be using all the tools at hand. The real strength of a true developer is in his creativity and ability to provide solutions, not in knowing some environment down to all of its annoying nuances.

jon August 10, 2008 at 5:11 pm

@Colnector: Totally agreed with you. It’s a lot easier to get up and going and to put something half workable into practice on the web.

Daniel September 8, 2008 at 8:15 pm

Sorry to burst you bubble, but web development is actually called scripting, not programming!
Programming is things like Java, C, C++, Assembly.
Scripting is JavaScript, CSS, HTML, XHTML, DHTML, ASP,
PHP, JScript, VBScipt ……. ETC.

Web development is babies stuff compared to the job of real programming, say developing the systems for voyager space craft, of DNA crunching programs, or games (not crappy web/flash games), or maybe controlling you house from a button.

WebDev, just let’s people tell a ‘program’ what to do,
ultimately that program, decides if it will accept this code or not, an in fact, how it will even implement the whole thing.

Problem is today there are far too many yuppie stooges around claiming they do this they do that.
You see, your solutions are already complete (if u think about it), browsers of scripting machines just wait for you to do some work and give it the green tick.

Real programming means, a computer doesn’t do something, so you make it happen.

Web dev means, you know some built in scripts, so let’s whip up some trivial data.

As a real programmer, I am like… Hitler, and you webdev’s are my plebs.

Daniel September 8, 2008 at 8:19 pm

I do respect the work that is on the web and thanks to web development, but there is other ways to do this if we (humans) wanted.
With programming (C++, Fortran) no web scripts could ever come close to providing another alternative.

jon September 9, 2008 at 1:33 am

Hey Daniel,

It’s funny that you describe web development as “babies stuff”, since ultimately the web is just an interface for performing tasks that can be relegated to lower level systems.

If you ask any enterprise architect who’s development a banking system, a registration system, a medical tracking system or anything that involves more than a select few individual users of a system (like astronauts), you realize that developing good software is much more about creating competent, usable systems and providing effective solutions than optimizing that algorithm to fit into 32 bit registers. A good web developer knows this and gets the job done. The only difference is he needs to work with the business guys and the graphics guys to get something out there.

Not only are you dealing with data normalization, interface-to-database mismatches, synchronization and security, but you have to do it in a way that’s standards compliant and can degrade gracefully if not fully supported! Someone writing a DNA crunching program has the luxury of working on a very specific system, under controlled conditions with limited external variables to account for. The only reason you don’t write these systems in an interpretted language is that the abstractions aren’t necessary and don’t add any benefit since a language like PHP aims to facilitate Web development. It’s this same reasoning that has lead to the growth of SuperCollider for sound engineering and OWL for building ontologies!

What about optimistic concurrency? What about persistence? What about data synchronization? All of these concepts present themselves in web development on a larger scale involving distributed systems and irregular interfaces (different browsers). If anything, these problems become more complicated since the platform is not fixed (like in traditionally compiled applications). Lastly, the technology moves more quickly and web developers are expected to future-proof their applications.

With regards to developing for a spacecraft, you’re dealing with a very select group of people (astronauts) AND they will be heavily trained before they operate it. Software development, and even space travel WILL become a commodity, and when it does, the interface will begin to matter and competition will arise. This happened with embedded systems, it happened on the desktop, it will also happen in space.

A lot of my posts on this blog attempt to tackle the age old mistake that programmers assume about user interfaces: that they’re “babies stuff”.

The end result is that you get a code monkey who builds a monolithic application with functionality superseding form. I’m approaching web development not as programming of bits and bytes, but dealing with the negotiation of multiple tiers with various user roles communicating with each other.

I’m assuming that your third paragraph refers to the way a scripting language is interpreted.

Even your precious games are written based off of standard libraries in C / C++ that have been cultivated inside organizations. Do you honestly think that people writing Quake don’t use libraries to abstract themselves from the pain of moving data from registers?

Also, your division between Java and PHP is a misplaced. Java is static, strongly typed language. PHP is far from that, however it’s ubiquity has arisen out of it’s c/perl-like syntax. The outcome is a huge collection of libraries (abstractions) that facilitate rapid development. This has given a large mass of people the same opportunities normally only found in major software outfits (like game design studios). Writing a PHP library involves the same practices that are found when writing a C / C++ library. While you’re not abstracting yourself away from dealing with pointers and registers, you’re likely abstracting yourself away from SQL queries, string parsing, SQL injection attacks and other forms of malformed data. Either way, the library needs to be documented with a clean API. The same rules of programming apply.

Real programmers solve problems quickly and effectively. Scripting languages are fast and enable you to build up abstractions that meet the needs of a business without compilation. Aside from that, there’s no difference from a business perspective.

I’m assuming you’ve never looked at the Zend Framework, or anything about web services, SOA, REST or SOAP. All these technologies are based on HTTP and have implementations in Java / C# – look at Websphere and Windows Communication Foundation. I’ll agree with you that I wouldn’t write a web server in PHP, however even a scripting language can run a web server (look at Aspen, written in Python).

If you want to make a distinction between C++ and PHP, it’s obvious that this can be made, but that’s like comparing a tug boat to an aircraft carrier: they both serve their purpose and are not mutually exclusive. We’d be stuck with cgi-bin rigid postbacks if it weren’t for these scripting languages.

At the very least, their complexities involved in web development are at par with the abstractions that we’ve been given thanks to these “baby” languages.

jon September 9, 2008 at 1:34 am

With regards to the plebs comment: I eat better than plebs, you can check my cooking posts for proof of that.

Henk September 9, 2008 at 1:42 am

@Daniel: You’re confusing development and design. You don’t make yourself look informed by calling HTML and CSS “programming languages”; you may as well call a plain text file a program because it tells notepad what to display.

More importantly, you seem to think there is some thick black line between “scripting” and “programming”. As a “real” developer (my last two jobs were 100% C++ development), I know they are the same thing, just done at different levels of abstraction. It’s not black and white, there is a continuous slope between low level programming and higher level programming. Is Scheme a scripting language or a programming language? It’s dynamic, like JavaScript, but it can be compiled to bytecode and run through a JIT just like Java is! Even JavaScript is compiled to machine code in Google’s new runtime.

As a software engineer, you use the highest-level language available which still provides the necessary control and efficiency. To do anything else is irresponsible to those who are paying for your time.

If you want to babysit the stack and individual machine instructions, feel free to waste your time; I’m going to use the right tool for the job and get my work done.

Mel September 9, 2008 at 10:25 am

Thank you for brightening my day.

Leave a Comment

Previous post:

Next post: