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.
"The compiler should write my codes for me," the coder whined. "I don't want to deal with all this technical crap! I have business logic to implement and my roadmap to synergy is on a deadline. I know! I'll use clang. The pretty colors will tell me what to do."
now it's all done in JavaScript. The browser, of course, still speaks JavaScript, but so do the server layer (Node.js) and the database layer (MongoDB and CouchDB). Even the HTML is often specified with JavaScript code for a framework like Ext JS or jQueryMobile that generates the HTML at the client.
Really? It's ALL done in JS? As a J2EE/SQL developer, I'd tend to disagree, and so would many, many F500 companies. Yes, JS is awesome, but it is not the tool for every problem.
Modern programming bears little resemblance to the days of assembly code
What's not modern about using assembler where it's appropriate to do so?
Sometimes I do it just because I like it...
systemd is Roko's Basilisk.
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.
I'm struggling to understand the point of this article. May as well have titled it "You won't believe these 15 new tricks for programmers. The shocking truth the devops guys don't want you to know"
Some quotes:
* "Back to work, slave, the continuous build machine has new tasks for you."
* "You're not a craftsman -- you're a framework-tweaker."
* "It's so much easier, but these IaaS administration Web pages won't buy you a drink after work."
Speak before you think
I think it's the exactly opposite.
The modern programming environment is trying hard to lock the programmer into a box where he can't do much harm...
No one has more control over the computer than an Assembler language programmer.
And there's still lots of Assembly programming going on today.
Modern programming languages are a fusion of older programming languages, with chunks taken out. Often, it's the useful chunks.
There is no table, that I know of, that lists all the features ("significant" depends on the problem and who cares about solved problems?) versus all the paradigms versus all the languages. (Almost nothing is pure in terms of paradigm, so you need a 3D spreadsheet.)
Without that, you cannot know to what extent the programming language has affected things, although it will have done.
Nor is there anything similar for programming methodology, core skills, operating systems or computer hardware.
Without these tables, all conclusions are idle guesses. There's no data to work with, nothing substantial to base a conclusion on, nothing to derive a hypothesis or experiments from.
However, I can give you my worthless judgement on this matter:
1) Modern methodologies, with the exception of tandem/test first, are crap.
2) Weakly-typed languages are crap.
3) Programmers who can't do maths or basic research (or, indeed, program) are crap.
4) Managers who fire the rest of the staff then hire their girlfriends are... ethically subnormal.
5) Managers who fire hardware engineers for engineering hardware are crap.
6) Managers who sabotage projects that might expose incompetence are normal but still crap.
7) If you can't write it in assembly, you don't understand the problem.
8) An ounce of comprehension has greater value than a tonne of program listing.
9) Never trust an engineer who violates contracts they don't like.
It's a small world and it smells funny; I'd buy another if it wasn't for the money; Take back what I paid (SoM)
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.
Hmmm, I have been in the industry for 30 years and nothing has really changed from where I sit. Yes technology and languages have move and changed, some have gone out of favor and others have come in but the end of the day I am still processing the flow of data and through rules applying transformations over it.
This is all programming is and if you step back and realise that you will have a happier life at the code face lol
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
And yet, you weren't first.
You code today the legacy code of tomorrow... Remember that before you type any more code! Think of the children!
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!
Crap like this sure explains a lot about why it's near impossible to hire halfway decent programmers anymore.
... same as the first, a little bit louder and a whole lot worse.
That's because you are now holding the position of a senior engineer with 15 years of experience.
Look at what someone who is just starting needs to know. How much different is it than what you needed to know when you started 15 years ago?
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.
none of these things were new a decade ago.
When will the /. editors wise up and realize that snydeq is just trying to drive traffic to InfoWorld? Or does InfoWorld helps fund /., so they need to keep posting this drivel? Either way the problem will eventually fix itself: Either the editors grow the balls needed to ignore this twerp, or enough /. readers will leave that this site dies. Let's see which happens first...
I agree, Brooks is as relevant today as it was when it was written. People are still making the same stupid mistakes and still believe that technology can fix their inadequacies. It cannot.
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.
I use assembly often for optimizing hotspots in code and to support new hardware platforms. And why do people say "why reinvent the wheel" as an argument against redeveloping parts of a system? It's not like wheels weren't redeveloped for modern automobiles--I'm not seeing too many cars sporting the classic wooden wagon wheel these days.
The only differences I've seen the last 20 years are:
1. VMs
2. Average developer skill getting worse
Web Development != Software Development, even if both fall under the "programmer" umbrella.
There's nothing really new for programmers because, if you're doing it right, everything is really new for programmers all the time. Once anything becomes routine, we turn around and automate it, so the work is always this set of tasks we haven't figured out how to automate set.
Socialism: a lie told by totalitarians and believed by fools.
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.
Academia and Industry is actually pretty good at coming up with new and better ways to program. Hundreds if not thousands of new languages, frameworks and tools have appeared over the years and an amazing number of them were designed with the idea that "you don't need a programmer anymore." They're still doing it.
If you have been around long enough, you realize it will never happen.
For custom biz app programming, dBASE and clones did live up to most of the hype in my opinion. I was able to crank out small-to-medium CRUD apps pretty damned quick compared to using Pascal or MS-BASIC or C (of the day), and users were quite happy.
True, you were limited on UI conventions, and if you didn't follow certain code conventions, dBASE's loosy-goosy scoping rules would byte you in the ass. But the tight integration between the language and the data simplified a lot of CRUD idioms. And its command-line prototyping was magical.
dBASE got a bad reputation when people started trying to scale its source code size, UI, and market (packaged/box apps) beyond its original niche. If you use a Toyota Corella to haul big trailers, it will indeed fail. Use the right tool for the job and know its limits rather than force things.
I was programming circles around everybody else with dBASE for smaller apps, even against MS-Access (and more reliable). It did well what it did well. Good Times; I miss it.
Table-ized A.I.
There's nothing really new for programmers because, if you're doing it right, everything is really new for programmers all the time. Once anything becomes routine, we turn around and automate it, so the work is always this set of tasks we haven't figured out how to automate set.
If you look at the effects of automation tools, you discover that they really don't didn't fix anything, they just change the specifics of the problem. You are still going to need a programmer to learn the new tool and make your desired program work. That is the point of Chapter 16 and 17 in "The Mythical Man Month" I told you to read....
"File to fit, pound to insert, paint to match" - Aircraft Maintenance 101
That's just what I was saying. The programmer's task is always "automate what was new 3 years ago, and routine 1 year ago, using what got automated last time to help." It's a never-ending cycle, as automating X just allows you to do Y, which eventually becomes straightforward enough to automate.
Socialism: a lie told by totalitarians and believed by fools.
What page says when they fire the programmer? Oh right, they never fire the programmer? Except... How many in-house programmers do you have today? Not so many? Where did they go? Not even in your country? But still companies expect governments to pay for foodstamps when their workers earn too little?
There's much more going on than technology. What's sad is that the programmers who are left think they and what they believe is significant..
Basically, the really smart people built the nuclear holocaust the idiots someday will let afire. All for paper.
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.
They're certainly showing their ignorance with that list. Most of those things were around and heavily used 5 years ago and a lot of them were around 10 years ago.
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"?
In the embedded world I often use Assembly and C, even on the desktop it's not rare for me to C in order to avoid pointless overhead with weighty languages like C# or Java. A real programmer interfaces at the hardware level and tells a computer how to do it's job without having to use bulky objects, interfaces and abstraction. "Modern" programming bears little resemblance to programming because modern programming isn't real programming, it's falling back on managed, bulky overhead that does all the work for you. I wouldn't call a developer who uses C#, Java and basically sticks in object land a programmer because they don't program, they don't interface to the hardware to make a computer actually work. As a good rule of thumb, the more you get abstracted from memory, the less of a programmer you become.
Yes, dammit, it is. 90% of Javascript use is Javascript abuse, and 90% of legitimate Javascript use doesn't need a fscking bloated framework. Stop it already, anyone with a clue is running some sort of script blocker and your page just isn't important enough to make them choose to open holes in it for you.
Now get off my lawn.
Tom Swiss | the infamous tms | my blog
You cannot wash away blood with blood
Probably not a problem for most slashdotters, and really this is at the border of what I would call application development... but a BIG concern for me at my organization is the erosion of basic knowledge as things become abstracted further. We have higher ups who know nothing about application development going all in on code generation frameworks (PRPC). A major consequence of this is that mid to senior level developers working on projects with this framework do not know and are not learning the basics about how things like HTTP work. I'm talking about people making 60k-80k who cannot explain how an HTTP session is maintained.
And while this framework promised the world in terms of quicker development times, it hasn't really delivered. Now we are stuck with a massive team of 'not really programmers' who are truly hopeless when it comes time to actually troubleshoot a problem outside the purview of the Pega Rules Process Commander. The number of times a day I have to tell people "trace it with fiddler" is mind boggling. To them, if an entry doesn't show in the PRPC log, the request did not occur. Mention the possibly that it failed at the web proxy and you've just invited yourself to a two hour meeting to discuss this mythical "iplanet" creature.
Even worse is that these types of frameworks flaunt a big "fk you" at typical design patterns like separation of concerns. Imaging an entire UI layer which is essentially a runtime generated servlet persisted as a set of un-complied java classes stored in a DB, while the actual persistence layer of the application is an XML blob stored in a DB. If we wanted to change the underlying framework of this application, it is literally pull the plug and start from scratch. An insane level of vendor lock in.
All the while, my team, still fighting what I consider the good fight, writing simple java apps based on established design patterns. But I have to ask myself daily if I am just becoming one of those old (31) gumpy devs who complains about the good ole days.
Not everyone programs for the Web. My job hasn't changed a lot in the last 20 years compilers are the same the IDs are a little better. ICE system where replace by debuggers.
This article reviews techniques that became common ten years ago, at least for programmers worthy of the name. Misses a lot too but oh well.
When all you have is a hammer, every problem starts to look like a thumb.
COBOL was better than JavaScript.
Yeah, right. ...
Dude, give me a break, you're being silly.
Sure, JS it's a tad more ambiguous than PLs from back when we used punchcards, but, come on!
So, yeah, JS has lose typing. Newsflash: That is a *feature*. You have to know how to handle it though (hint: COBOL style isn't going to get you anywhere here).
So it would be tricking writing ERP, because JS has more rope with which you can hang yourself - so, yes, you do actually have to watch out what you are doing in different way nowadays. And yes, there are a lot of non-programmers out there today writing code - I'm trying to write an extension for Typo3, so tell me about it.
So JS uses Protoyping instead of Classes - that's a feature too - get with the programm.
I don't like the syntax of JS either, it's ancient by todays standards and I'd prefer Python. But I can test my JS on the nearest computer, because the runtime is everywhere.
Truth is, JS runs everywhere nowadays, and allthough you should expect callback hell when writing larger serverside apps, that's actually an encouragement to do things unix-style for non-trivial projects. That's why so many people use it. Even those that can't programm. ... Yeah, that's anoying, but repairing their shite earns us the bucks, so go figure.
I suggest you sit your ass down, take a deep breath and get yourself aquainted with some non-amature JS code. There's a nice Oreilly called "JavaScript - The Good Parts" to get you started nice and easy.
But don't forget to chase the kids of your law before.
My 2 cents.
We suffer more in our imagination than in reality. - Seneca
I quote from page 2 of the article: "Does anyone even remember there's a built-in function called GetElementByID? Nah, libraries like jQuery now rule every level of the stack." Nop - it is called getElementById()... Obiously the author has fallen into the trap of jQuery ;)
The most useful programming skills I learnt were in 1982 on the Sinclair ZX Spectrum. Nothing I learnt then has become irrelevant, just the languages changed. I give programming courses and am amazed how 21st century programmers are missing the basics and cannot write algorithms.
More than any technology or methodology, it is the internet forum filter bubble than has changed programming more than anything. Programmers have become convinced that they don't have to get along with anyone in the real world, because they're smarter than everyone in the real world, and that doing things the hard way demonstrates their brilliance. The internet tells them so.
The biggest problem is either too vague requirements by business or wrong requirements - thus wasting your time on things that are never used.
Or stupid requirements, product X does Y by magic.
Liberty freedom are no1, not dicks in suits.
I found this article highly amusing, reading about JQuery, social networks, etc. I write in VHDL and C. I just finished designing a custom DMA engine in hardware. I am lucky that my current project has a whopping 60 KB of memory! However, my processor has no hardware multiply unit, and I am using a stripped-down version of the C standard library that is missing the more expensive functions, like printf(). JQuery? I wouldn't even want to try to shoehorn a JavaScript interpreter onto this processor. Social networks? Please - I don't have anything like a network connection. Or a user interface. Or a human-compatible input or output device.
No, I am not working on old, obsolete hardware. I am working on very current, but deeply embedded hardware for things like automotive and industrial applications. Despite all the progress made on desktops and high-end severs, we always seem to find new uses for small (and increasingly smaller!) embedded systems with a few KB of RAM.
Since Delphi allows "inline" assembly via the asm directive for FASTER LOOPS, by far (proof's http://slashdot.org/comments.p... there via research that I pointed out to a user named "perpenso" here, who did some AMAZING THINGS he pointed out vs. a compiler, unrolling loops & all, vs. assembly... I was, to put it lightly, IMPRESSED to no end!).
Delphi's almost always allowed it, & it works, for FAR better performance (except Delphi XE/XE2 afaik, but now XE3 onwards has it again like Delphi 2.0 - 7.1 did in 32-bit, albeit also multiplatform + 64-bit too!).
Lastly, iirc? MANY C++ compilers offer this option too of an inline assembly directive!
(However, I feel C++ is a bit more difficult & less readable than Delphi is, & Delphi can do *almost* everything C++ can, to a 99.999% level - multiple inheritance only afaik (yes, even drivers via addon toolkits), but lacks a multiple inheritance oop model, & instead, goes for the MORE PRACTICALLY APPLICABLE (imo @ least) SINGLE INHERITANCE model instead!).
APK
P.S.=> I'm no "assembly language wizard" either - I just KNOW a few "key areas" where it helps performance (like loops, which most programs do some of if they're not "hello world" trivial) & Delphi "KNOCKED THE CHOCOLATE" out of MS stuff in VB5 (watered-down C++ compiler) & even MSVC++ as far back as 1997 in of all places a competing trade journal "Visual Basic Programmer's Journal" Sept./Oct. 1997 issue "Inside the VB5 compiler engine" in 4/6 tests:
http://it.slashdot.org/comment...
(Especially in MATH & STRINGS work, which face it - EVERY PROGRAM does work in)
... apk
My team is hiring developers like crazy, and I see the same at all the big shops. Sorry if you can't find work - maybe move to the West Coast where the jobs are?
Socialism: a lie told by totalitarians and believed by fools.
The biggest assets for coding used to be:
1. Intelligence.
2. Imagination.
3. Neatness.
The biggest assets for coding now is:
1. Memory.
2. Speed.
3. Having no pride in your work.
Things have changed indeed, not sure its for the better.
BTW. "Ceterum censeo Systemd esse delendam"
Ages ago I diddled with toggles on a PDP 8; first program was to update the program address counter by 1 every instruction. Now I do Data Warehousing which requires that I know the business at least as well as the business itself. So yes things have changed.
I used to think that, until package database corruption caused by repository changes forces me to completely re-install, then Linux becomes a problem. It becomes a problem with you ask a Linux novice to manually partition his drive so the can protect his files in a separate /home. something not done by default with he installs Linux so that when the package manager breaks after 18 months he has to re-install. This is too much work unless you have had UNIX system admin experience and to expect novices to tackle what should have been an option in the distro install is a big problem for Linux.