-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathare-web-developers-real-programmers.html
160 lines (143 loc) · 10.7 KB
/
are-web-developers-real-programmers.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
<!DOCTYPE html>
<html lang="en">
<head>
<title>Are Web Developers Real Programmers? | Undefined Value</title>
<meta charset="utf-8" />
<link href="https://undefinedvalue.com/feeds/all.atom.xml" type="application/atom+xml" rel="alternate" title="Undefined Value Full Atom Feed" />
<link href="https://undefinedvalue.com/atom.xml" type="application/atom+xml" rel="alternate" title="Undefined Value Atom Feed" />
<link href="https://undefinedvalue.com/rss.xml" type="application/rss+xml" rel="alternate" title="Undefined Value RSS Feed" />
<link href="https://undefinedvalue.com/feeds/{slug}.atom.xml" type="application/atom+xml" rel="alternate" title="Undefined Value Categories Atom Feed" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link href="//fonts.googleapis.com/css?family=Oswald%7CLato%7CInconsolata" rel="stylesheet">
<link rel="stylesheet" href="https://undefinedvalue.com/theme/css/normalize.css" />
<link rel="stylesheet" href="https://undefinedvalue.com/theme/css/skeleton.css" />
<link rel="stylesheet" href="https://undefinedvalue.com/theme/css/highlight.css" />
<link rel="stylesheet" href="https://undefinedvalue.com/theme/css/style.css" />
<link rel="icon" type="image/png" href="images/favicon.png" />
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-43697246-1', 'auto');
ga('send', 'pageview');
</script>
</head>
<body id="index" class="home">
<div class="container">
<div class="row">
<div class="logo">
<a href="https://undefinedvalue.com/">
<img src="https://undefinedvalue.com/theme/images/undefinedvalue_logo.png" alt="Logo">
</a>
</div><!-- /.logo -->
<header id="banner" class="body">
<h1><a href="https://undefinedvalue.com/">Undefined Value</a></h1>
<strong>Kris Johnson's Blog</strong>
</header><!-- /#banner -->
</div><!-- /.row -->
<div class="row">
<nav id="menu"><ul>
<li><a href="/">Front Page</a></li>
<li><a href="/tags.html">Tags</a></li>
<li><a href="/archives.html">Archives</a></li>
<li><a href="https://undefinedvalue.com/pages/about-me.html">About Me</a></li>
<li><a href="https://undefinedvalue.com/pages/kjresume.html">My Résumé</a></li>
<li><a href="https://undefinedvalue.com/search.html">Search</a></li>
</ul></nav><!-- /#menu -->
</div><!-- /.row -->
<div class="row">
<div class="nine columns">
<section id="content" class="body">
<header>
<h2 class="entry-title">
<a href="https://undefinedvalue.com/are-web-developers-real-programmers.html" rel="bookmark"
title="Permalink to Are Web Developers Real Programmers?">Are Web Developers Real Programmers?</a></h2>
</header>
<footer class="post-info">
<time class="published" datetime="2009-12-09T13:23:01-05:00">
2009-12-09
</time>
</footer><!-- /.post-info -->
<div class="entry-content">
<p>The <a href="https://undefinedvalue.com/2009/11/25/native-apps-vs-web-apps">native-vs.-webapp hubbub</a> from a couple of weeks ago got me thinking about why "web developers" are looked down upon by "real programmers."</p>
<!--break-->
<p>I'll admit that I've held that prejudice myself. I looked at client-side web development back in the mid 1990's and decided that it wasn't for me. The web browsers of the time were primitive, and every one acted differently. The situation was a big mess.</p>
<p>I learned to be a programmer back in the days when, if you read the programming language manual, the operating system manual, and the library manual, then you could actually write code and expect it to work the first time you ran it. The machine was your servant. If the code you wrote didn't work, it was probably because you had screwed up.</p>
<p>In contrast, programming for web browsers requires a lot of experimentation, guesswork, vendor-specific APIs, and hacky workarounds. The code one wrote usually didn't work the first time, no matter how smart and careful the author was. The browser held a lot of secrets, and thus was the master.</p>
<p>How could any <em>real programmer</em> get involved in technology that mostly didn't work, and had no formal specifications nor complete documentation? This led to my belief that all the people writing scripts for browsers and calling them "applications" were merely programmer-wanna-bes. They may have been able to hack things together, but they didn't have that <em>real programmer</em> mindset.</p>
<p>Obviously, things have changed a lot since then. Google Maps was the web application that made a lot of us wake up and notice that browsers weren't just HTML displayers any more. AJAX took hold as an "enterprise technology." Still, a lot of us old-timers continued to consider JavaScript to be a toy language, and the many incompatibilities between browsers meant it still could not be considered a stable platform for serious programming. And any user interface platform that doesn't have a standard graphics API is just pathetic.</p>
<p>Then again, to be completely honest, I was just too lazy to learn more about it, and I was making my living by writing native applications. It was all too easy to just dismiss it as something not worth wasting time on.</p>
<p>Now that I've spent a couple of weeks with JavaScript and related stuff, I've changed my mind. One can be a real programmer with JavaScript. It's actually a pretty cool little language, incorporating aspects of Scheme and Self. What makes JavaScript programming a mess is cross-browser incompatibility and the fact that most JavaScript is just cut-and-pasted by people who don't know what they are doing.</p>
<p>Browsers have come a long way too. It used to be that you could create a sophisticated UI only by implementing a Java applet (yuck) or using Flash (yuck). <a href="http://en.wikipedia.org/wiki/HTML5">HTML5</a> is finally making it possible for web developers to <em>draw things on the screen</em> (!!!) without resorting to such madness. Web browsers now provide a platform similar to what personal computers provided twenty years ago. It's taken a while, but there are no more excuses for dismissing the web browser as a primitive toy.</p>
<p>It's now pretty easy for someone to create a slick website by installing Drupal, Joomla, Zope, or something similar, and then customizing it for a client's needs. However, the people who do that are not <em>real programmers</em>.</p>
<p>What distinguishes a <em>real programmer</em> from all the rest of the people who can create a web site?</p>
<ul>
<li>Can you write your own HTML and CSS, or do you just use prepackaged themes?</li>
<li>Do you write your own JavaScript code, or do you just cut-and-paste snippets you find via Google?</li>
<li>Can you read and write JavaScript, or do you have to rely on some higher-level abstraction (Google Web Toolkit, Cappucino, etc.)?</li>
<li>When something doesn't work, can you debug and fix it, or do you just have to throw it away and try something else?</li>
<li>Do you refer to the official specs for HTML, CSS, and JavaScript, or do you just make a lot of guesses?</li>
<li>Do you try to write portable code and adhere to standards, or are you happy with whatever works for 80% of your users?</li>
<li>Do you design, develop, and test your code in modular fashion, or just throw the whole mess together?</li>
<li>Do you adhere to coding standards and try to write code that is readable and maintainable?</li>
<li>Do you <em>care</em> about the code you write?</li>
</ul>
<p>In short, can you create your own software components, or can you only glue together components created by others? If you're a creator, then you're a <em>real programmer</em>.</p>
</div><!-- /.entry-content -->
</section>
<ul>
<li>Previous article:
<a href="https://undefinedvalue.com/quick-and-dirty-guide-qunit.html">
Quick-and-Dirty Guide to QUnit
</a>
</li>
<li>Next article:
<a href="https://undefinedvalue.com/playing-catch.html">
Playing Catch-Up
</a>
</li>
</ul>
</div><!-- /.nine columns -->
<div class="three columns">
<section id="extras" class="body">
<div class="recent">
<h2>Recent Posts</h2>
<ul>
<li><a href="https://undefinedvalue.com/simpler-résumé-updates.html">Simpler Résumé Updates</a></li>
<li><a href="https://undefinedvalue.com/54.html">54</a></li>
<li><a href="https://undefinedvalue.com/53.html">53</a></li>
<li><a href="https://undefinedvalue.com/menubar-countdown-21.html">Menubar Countdown 2.1</a></li>
<li><a href="https://undefinedvalue.com/lunar-for-c-and-rust.html">LUNAR for C and Rust</a></li>
</ul>
</div><!-- ./recent -->
<div class="blogroll">
<h2>Other Stuff</h2>
<ul>
<li><a href="http://secretspacelab.com/tcm.html">What's Good on TCM?</a></li>
<li><a href="https://github.com/kristopherjohnson">GitHub</a></li>
<li><a href="https://bitbucket.org/KristopherJohnson/">Bitbucket</a></li>
</ul>
</div><!-- /.blogroll -->
<div class="social">
<h2>Follow</h2>
<ul>
<li><a href="https://undefinedvalue.com/feeds/all.atom.xml" type="application/atom+xml" rel="alternate">Atom Feed</a></li>
<li><a rel="me" href="https://mastodon.xyz/@oldmankris">Mastodon</a></li>
<li><a rel="me" href="http://stackoverflow.com/users/1175/kristopher-johnson">Stack Overflow</a></li>
<li><a rel="me" href="http://www.linkedin.com/in/kristopherdjohnson">LinkedIn</a></li>
<li><a rel="me" href="https://www.flickr.com/photos/kristopherjohnson/">Flickr</a></li>
<li><a rel="me" href="http://twitter.com/OldManKris">Twitter</a></li>
</ul>
</div><!-- /.social -->
</section><!-- /#extras -->
</div><!-- /.three columns -->
</div><!-- /.row -->
<div class="row">
<footer id="contentinfo" class="body">
© 2003-2023 Kristopher Johnson
</footer><!-- /#contentinfo -->
</div><!-- /.row -->
</div><!-- /.container -->
</body>
</html>