I'm 36 and I have been programming since I was 8. I'm not a genius but I have above average intelligence and I am a decent programmer. My interpretation is that Terry Sutton actually is a good programmer who has more common sense than the average programmer.

Practically speaking, it _is_ easier to do most things in WordPress, because there are plugins with nice user interfaces for a large portion of ordinary web application requirements.

This is an interesting article because Terry's journey and conclusions, for me, are actually a good indication of the direction that software development is going and what the new definition of a good "programmer" will be.

And the article hints at a very significant problem in software development today: the fact that the definition of "programmer" or "software engineer" is very much tied in with producing and consuming cryptic and complex ASCII-based source code. In fact, for many, (although not all), the ability to identify as a programmer is based on how far removed the implementation is from ordinary language, interactions, or business requirements. Or simply how difficult the implementation is to produce.

As more and more interactive graphical tools, powerful and yet easier-to-use and understand programming languages, better adoption of componentization (for example in the web space), adoption of knowledge representation as a basis of language/systems frameworks/protocols as well as projection editing, coding-by-example and coding assisted by artificial general intelligence, become popular and mainstream (for example, with the vast catalog of WordPress plugins, widgets, and themes available, it should be possible to build an AI system (user-directed incremental interactive narrow AI, not strong AI) that can handle about 70% of web application requirements for many small-to-medium sized business), people will eventually start to pick on the fact that systems that are more difficult to use are not inherently superior or more sophisticated. And they will realize that the value of a good programmer is not in his ability to produce or consume the most cryptic source code, but in his ability to solve problems using tools.

However, since I do identify myself as a programmer, which is still unfortunately tied in with the whole source code thing, and I hope that Terry will also reconsider his own self-identification as a programmer, I have some thoughts for anyone who has feelings that are similar to Terry's in regards to the types of systems he evaluated.

First, its very true, there is no endpoint. You cannot possibly master even a tiny subset of the popular systems out there, and they never stop inventing new ones with more and more layers. I think there are quite a few people out there that misunderstand this whole thing though in relation to what programmers are supposed to be capable of or do. You are not supposed to be a master anymore. You are not supposed to remember how to do everything off the top of your head. You are not supposed to spend 3 months reading a Rails book and then remember everything important about Rails.

What a good programmer does with a new technology is take an hour, or a day, or a week, or _maybe_ a few weeks mostly reading about something, and then paste some code in from an example and start experimenting with the system until he understands some basics of how it works. And then when he needs to add new features, you don't go buy and read another book. You go to Google and type "how do I do XXX with system YYY" and you get example code on Stack Overflow from three different people, pick the one with the most upvotes, adapt it to your code, and try it out.

And a good programmer is always looking for tools, programming languages, or whatever that makes his job easier. Because these days there is so much open source software, its really wasteful to not be taking advantage of these things. But with that mindset, what I said in the above paragraph is just the only practical way to go about things.

And you have to pick your battles, and you have to be willing to drop a technology after trying it out and realizing that its more difficult to use than something else, even if that technology is very popular. Because popularity is not the same as merit. Its very far from it. Often, by the time something finally becomes popular, its already quite outdated. And that is doubly the case for high technology, which evolves as quickly as people can think and type it in. And it can mean that an entire paradigm, which is extremely popular and considered a best practice, is also out of date.

As far as PHP, you're right, its usually easier to use WordPress. But you can still write an occasional plugin, or adapt an existing one, using your PHP skills. Or just configure and integrate existing WP plugins to solve a problem. I believe we need to extend our definition of what a programmer is.

As far as JavaScript, first, I have done quite a lot of programming in JavaScript. And I can say quite conclusively that JavaScript is a pain in the ass. I have also done a fair amount of programming with Backbone. And I can say conclusively that Backbone is a pain in the ass.

However, people looked at the issues with JavaScript and made it better. And now we have CoffeeScript. And then a genius in China figured out how to make callbacks in CoffeeScript go away and we got ToffeeScript.

And people looked at how to make things more convenient than traditional MVC in JavaScript and came up with AngularJS. I have done a fair amount of coding in AngularJS. It is much better both in terms of sophistication, software engineering, ease-of-use, features, etc. than Backbone.js. Now, many people are confused about that because they think that since Backbone.js is seems more complicated at first glance, it must be better. That goes back to some fundamental problems with the definition of programming.

However, one thing that is a pain in the ass with AngularJS is components. I.E., defining your own custom elements. Now we have a new thing called Web Components, using the Polymer system, which makes it much more convenient to create custom elements. So that is what I am going to use. Note that even though I used Angular in a couple of projects extensively, I never bothered to become a master. And now I am going to use Web Components instead. Because its a better paradigm.

But the thing to notice is that the technologies I am recommending are easier-to-use and understand and require less code than the technologies they are replacing. The direction we are going is to less and less code, especially less and less being written custom to an application. The direction we are going is for more and more systems to resemble WordPress.

As far as Rails goes, no you don't have to learn Rails. So what if it is popular? It is complicated, and now even more complicated than it used to be. And remember, popular != good. Sinatra is an awesome way to approach many types of applications. Speaking of Sinatra, if you want a cool technology to play with, checkout Jester, written in the new programming language Nimrod: https://github.com/dom96/jester You can write code that looks just like Ruby/Sinatra, but runs maybe 10 or 100x faster, since it is compiled to C and then to native code.

As far as that ImagesLoaded plugin, I think that is RequireJS or something. And that is one that I have avoided, because the complexity of defining components just hasn't been worthwhile. Compare that to using Browserify with require and exports. Or just using a script tag. Much simpler. And that particular example of that plugin code is a good example of why you don't necessarily want to use that. Again, just because something is popular, doesn't mean its better, and doesn't mean you have to use it. That ImagesLoaded plugin is bad code, and its mostly boilerplatey plumbing. Its not good software engineering as far as I am concerned, because making things less difficult to understand is very important. A lot of times what becomes popular is just the most complicated thing, either because people confuse complicated with good, or they add on to a simple tool and eventually make it too complicated.

So Terry, you're a good programmer. And if something seems a bit more complicated than you are willing to get in for, maybe it _is_ too complicated. And if you know how to and are willing to use tools to solve your problems without writing code, that doesn't make you a non-programmer. That just makes you a sane programmer with good common sense.