The Technologies Changing What It Means To Be a Programmer
snydeq writes Modern programming bears little resemblance to the days of assembly code and toggles. Worse, or perhaps better, it markedly differs from what it meant to be a programmer just five years ago. While the technologies and tools underlying this transformation can make development work more powerful and efficient, they also make developers increasingly responsible for facets of computing beyond their traditional domain, thereby concentrating a wider range of roles and responsibilities into leaner, more overworked staff.
I don't see many changes. Vendors, managers, and salespeople change the buzz words every few years and talk of great paradigm shifts. Programmers continue to write code and produce actual results. In a perfect world the programmers get to choose their own tools. In the real world we have to use whatever buzz word compliant tools are thrown in the mix each year. They never actually live up to the hype and you have to dig in and find the code buried within and build stuff that works. I remember when the salespeople were touting dBase II and how programming would be completely changed. Right.
As a former COBOL programmer way back when during the mainframe era, and as somebody who has had to develop and maintain JavaScript code over the past several years, I can say without a doubt that I much preferred using COBOL.
Although COBOL is a verbose language and not always the easiest to use, at least it isn't shit-for-brains stupid like JavaScript so often is. When I use JavaScript, I often sit there wondering, "What the fuck was Eich thinking when he came up with this stupidity?" and then I wonder, "Why the fuck hasn't the JavaScript community fixed these fucking stupid misfeatures?"
So many things about JavaScript are just so stupidly broken, and there's absolutely no reason why they should be like that. They're so idiotically wrong that it's totally worth breaking compatiblity with existing code if it means fixing these problems. COBOL, while not the best language, was never anywhere near as fucking moronic as JavaScript usually is.
I don't see a single point in the article that would represent any profound change in how programmers work. In fact, points like 1 or 4 are laughable simply because even though these are true, they also happened decades ago. Point 9 is exactly like programming in Lisp (do everything in a single generic language), the only difference being using Javascript instead of Lisp. Others are of interest as deployment techniques, not as a programming workflow change. Etc.
Just because you can doesn't mean you should. 30 years ago, applications were built with long life-spans in mind, so dropping into very low-level code could make financial sense. Today, programs are generally designed for adaptability and compatibility. The target is constantly moving for the vast majority of applications out there. Dropping into assembly rarely makes sense anymore, because the mantra is "good enough" rather than "best" because even the "best" won't stay that way for long.
Of course, different industries will have different mileage. If you do most of your work for embedded devices or industry-niche things like robotics or satellites, then by all means dive into the 1's and 0's.
Here we go again with another silver bullet?. It seems that every generation of noobs comes to this same conclusion and are just as wrong as we where when we said the same thing. It's almost a rite of passage, just like the rebellious teenager or terrible twos kids go though.
Yes, programming has changed some since I started doing it. However, in the long run, nothing has really changed. Programming is Programming, the same skills I used to need when doing assembly, are useful when I dabble in Java. What HAS changed is the programming model and the languages we use. Yea, we can automatically generate a boat load of code and come up with stuff that would have taking years to do in assembly in a few hours, but nothing is really new. When we went from Assembly to C, we could do things in C so much faster than in assembly, but programs only got bigger and slower. C to C++ bumped that up again, but not that much. Java bumped that up, adding mufti-platform capacity, slowing the programs down and making them take more memory. That's how this goes, new tools, bigger programs that run slower, but still requires a programmer to make useful things using those tools.
Truly there is nothing really new for programmers, the job still requires the same kinds of skills and still requires that you know the programming model. Yea, we can pull ready built stuff off the shelf more easily, but like before, new advances really only make programs bigger and slower and still require programmers who know how to design and implement. We keep trying, but this will not change.
So, nice try there syndeq, I think you are wrong. My generation of programmers thought we had achieved the same things you are claiming when we where noobs. We where wrong too. There may be new tools, but you still need a skilled craftsman to use those tools or you get garbage for a program.
I strongly recommend you go get and read "The Mythical Man Month" by Frederick P. Brooks, Jr.. In my day his experience and insights where eye opening for us, and it will be for you too. You don"t have to make the same mistakes we did. I've met some of you guys/gals you can do better, just take my advice.
"File to fit, pound to insert, paint to match" - Aircraft Maintenance 101
Because it is InfoWorld. Seriously.
Here's item # 3.
Do you remember the first time you used a library? But they're new because programmers 5 years ago did not have libraries.
It gets better:
Yeah. That's a radical new concept there.
Fuck it.
Tonight we're gonna party like it's 1995.
And, finally:
No it is not. Not they would not. Windows XP was released in 2001 and there are still people using it. That's 13 years ago.
InfoWorld sucks.
I've been doing this full-time since 1985, and the most distressing part is how little real change there has been in all that time!
Quite frankly, I just finished a larger project for a customer and what I did strongly resembles what I would have done 30 years ago: Define what the solution must do, do an architecture, a design, define interfaces, and then code the thing. The only thing that is different is that the C code was a web-server module and that the in-memory database may go up to 10G instead of the 100k or so it would have 30 years ago.
Really, nothing has changed much, unless you are at the very-low skill end of things, where you can now produce bad code in ways you could never before.
Most ACs are not even worth the keystrokes to insult them. Be generically insulted by this and ignored otherwise.
This is quite possibly the stupidest article ever posted to Slashdot.
Ok, this month.
There is a very tiny overlap between software developers and journalists. And yet the number of software development journalists greatly exceeds the size of that overlap. The only explanation is that there are people who don't know what they're talking about who write these articles.
Yes,much like with Regex, you now have 2 problems.
Yeah, it only runs the front end of EVERY WEBSITE IN EXISTENCE (which includes tons of "serious" SaS applications, and more and more "thick client" sites where the bulk of the code is in JS and the server is just used for database work). But yeah, other than that nothing mission critical at all.
It's pretty obvious this is written through the lens of a javascript-focused web programmer. Seriously, libraries are a hot new trend? That's hilarious stuff. Read each item in this list as "From the viewpoint of a Javascript/web developer...", and it seems to make a bit more sense.
It's pretty clear he only has a vague notion of game development either (my profession), and gets some basic facts wrong. He calls Unity a library (it's a game engine, better categorized as a framework). In a different article, he claims that game frameworks are in, while native development is out. The first part is true, but the second part certainly is not. C++ is still used almost exclusively for large-scale AAA game development. Unless by "native development" he meant "roll your own game engine", in which case he's using the wrong terminology.
Irony: Agile development has too much intertia to be abandoned now.
Just because you can doesn't mean you should. 30 years ago, applications were built with long life-spans in mind, so dropping into very low-level code could make financial sense.
No, it was utter necessity. For 30 years ago I hadn't even gotten my C64 with all of 65536 bytes of RAM yet, 38911 of which would be left available once BASIC was loaded. Store one uncompressed screenshot of the 320x240x4 bit (16 color) screen and 38400 of those was gone. If you tried storing the Lord of the Rings trilogy in memory - compressed to ~12 bits/word, you'd get about halfway into the Fellowship of the Ring. True, today we waste space but back then we lacked essential space. Every corner was cut, every optimization taken to avoid using any of our precious bytes. See the Y2K problem.
For a more modern but similar issue, I used to have the same attitude to my bandwidth. It used to be slow, costly (pay per minute) and it was important to use it as a precious resource. Today I might end up downloading a whole season of a show after watching the first episode, go bored after three and delete the other twenty. It's there to be used, not to sit idle. I've got 16GB of RAM, there's no point to waste but there's nothing to be gained by hiding in a 1GB corner. If it makes life easier for developers to pull in a 10MB library than write a 100kB function, do it. If you can get it working, working well and working fast then maybe we'll get around to the resource usage.. someday. It's not a big deal.
Live today, because you never know what tomorrow brings
There's another factor, too; the industry really wants young programmers. The costs are less for remuneration, insurance, and vacation; the families are smaller or non-existent, and these people will work much longer hours based on nothing more than back patting and (often empty) promises. One of the consequences here is that some of the deeper skill sets are being lost because they simply aren't around the workplace any longer.
I think there is no question that all of this has changed the face of coding. An interesting exercise is to ask yourself: When was the last time you saw a huge project hit the market. Now ask yourself how many little does-a-couple-of-things projects you've seen hit the market in the same time frame. My contention is that there are very few of the larger projects being undertaken at this point, or at least, being finished.
Just one (retired) guy's opinion. :)
I've fallen off your lawn, and I can't get up.
How about we make a list of the technologies that have actually impacted us in a real way over... hmm, let's say the past ten or fifteen years? I assume that everyone will have slightly different items, because we all work in different areas. I'm a game developer and use C++, so my perspective will reflect that. Listed in no particular order of importance:
1) C++ 11/14 - It's transformed the language in a fairly dramatic way, making it much safer and convenient to use, while leaving legacy code completely compatible. Modern C++ code feels a lot more like C# at times, just a whole lot uglier.
2) Mobile Platforms - Mobile platforms (smartphones and tablets) as a rising contender has caused a fundamental shift in the balance of power among platforms.
3) Online Gaming and Integration - MMOs and other games are taking advantage of the ubiquitous connectivity to the internet most of us now enjoy.
4) Distributed Version Control Systems - Modern source control systems such as Git and Mercurial (my favorite) are a boon not only to large distributed projects, but even for smaller developers. Traditional development house, for the most part, still use Perforce, though, which works much better for asset management.
5) Online distribution - The ability to quickly and easily download and update games from vendors like Steam, Gog, and Origin are opening up the market to indie and traditional developers alike, and will eventually kill physical distribution channels.
6) Online resources - Better search pioneered by Google teams up with incredibly knowledge-rich sites like StackExchange.com. The result is that damn near any question you have is likely to have already been asked and answered. If not, ask away, and you have a good chance of getting some real help.
7) GPU programming - More and more visual programming is being off-loaded to the GPU, and those have developed into full-blown programming languages of their own.
8) Parallel programming - With the advent of ubiquitous multi-core / multi-threaded processors in the past decade, game developers had to start getting serious about multi-threaded programming, making an already demanding job even tougher.
That's about all I can think of offhand that's really changed over the last fifteen years. Libraries, frameworks, and APIs are not some new phenomenon. They've been around since I started professionally programming, so it's ridiculous to include those. You might as well add "source code", "compilers/linkers", and "editors" to the list if you're going there.
What about in other professions?
Irony: Agile development has too much intertia to be abandoned now.
My experience reaches back to the toggle-and-punch cards days and I don't want want to bore anyone with stories about that.
But one thing I have noticed in all those years a I cannot recall a single year where it wasn't proclaimed by someone that software engineering would be dead as a career path within a few years.
I go back that far, as well.
And the proliferation of languages, each with advocates claiming it to be the be-all and end-all, was well established by the early '60s.
(I recall the cover of the January 1961 Communications of the ACM, which had artwork showing the Tower of Babel, with various bricks labeled with a different programming language name. There were well over seventy of them.)
Bantam Dominique roosters crow a four-note song. Once you've heard it as "Happy BIRTHday" you can't NOT hear it that way
If you're not writing x86 assembly by hand, you have no right to complain. Then an even older guy goes, "if you're not punching cards, you have no right to complain". Then an even older guy goes, "If you're not flipping switches and soldering wires you have no right to complain". Finally, the oldest man in the room stands up and says: "Before there were machines called computers, there were people who did calculations by hand. They were called computers. Most of them were women. If you didn't marry her, you have no right to complain".
For all intensive purposes, "whom" is no longer a word. That begs the question, "who cares"?
And that mentality is precisely why so many web applications suck farts off dead chickens for performance and scalability.
The first step to designing a scalable application is designing a scalable and flexible database model. The database is not an "afterthought", it is the heart of an application.
The code which accesses the database can be tweaked and fiddled, but once you've created your database, it becomes very expensive to change it in the future because of the costs of changing not just the code, but creating and testing database migration scripts to move the data to a new model.
But you go pat yourself on the head that you're a 'leet programmer because you know a scripting language.
And then hang your head in shame when you realize that JS runs in the browser and is only a presentation layer, not the application itself. Only a fool puts the business logic in the client if they have any understanding or concern for transaction consistency and application reliability. You have to assume the presentation client is going to break half way through processing something and leave the database in an inconsistent state if you put the business logic in the front end.
I do not fail; I succeed at finding out what does not work.