“There is a reason I use ‘old’ languages like J or Lush. It’s not a retro affectation; I save that for my suits. These languages are designed better than modern ones. There is some survivor bias here; nobody slings PL/1 or Cobol willingly, but modern language and package designers don’t seem to learn much from the masters. Modern code monkeys don’t even recognize mastery; mastery is measured in dollars or number of users, which is a poor substitute for distinguishing between what is good and what is dumb. Lady Gaga made more money than Beethoven, but, like, so what?” This isn’t just a thing among programmers. The entire industry is obsessed with user numbers, number of applications, and other crap that is meaningless when you consider programming to be art. When I post a new item about some small hobby operating system, the comments will be filled with negativity because it’s no Windows or iOS, whereas only ten years ago, we’d have lively discussions about the implementation details. And then people wonder why that scene has died out.
Every young programmer must try oldies like Lisp and Smalltalk. This is an eye opening experience.
This is also, in a way, very saddening as it shows how much nothing has really evolved, or evolved in a bad way.
A recent Smalltalk implementation, SQUEAK was for me quite a revelation a few years ago.
When Apple ‘borrowed’ the GUI at Xerox, they tucked it into static languages (C, Pascal), to cope with slow hardware. They also ingrained the idea that applications are monolithic pieces of code.
The web languages, Python or Objective-C don’t have the brilliant coherence of Smalltalk and Lisp Machines.
A truly powerful language who’s syntax is hardly understood by anyone these days.
Sigh.
On a slighty different tack…
012701
000065
012702
000001
060102
And the answer is?
Something octal?
Like a 36bits computer?
I haven’t touched a PDP-11 in 25 years but…
012701 000065 MOV #65,R1
012702 000001 MOV #1,R2
060102 ADD R1,R2
54?
Yep.
Move ‘5’ to R1
Add 1 to R1 store the result in R2
The answer is ‘6’
You typoed your octal then
5 is 000005, not 000065… 000065 would be 53. 53 + 1 is 54.
Or is there some aspect of integer encoding Im not remembering?
Edited 2013-07-29 07:03 UTC
I could have made it a bit clearer.
The ASCII code in octal for the character ‘5’ is 65.
I’m guessing you’re adding to an ASCII to save time further down the line with int->char conversions?
I’ve not done any ASM / machine code (well, not enough to boast about anyway) but this looks a pretty neat optimisation. Back in the days before regex, I used to use ASCII character codes for working with ranges of characters – but that was a common trick (pretty much programming 101)
Ohhh…. I see what you did now. Gotcha. so the result is ‘6’ in ASCII (which is dec 54).
ps. Before anyone asks… No, I do not remember enough PDP-11 assembly to recognize this from memory. But when I saw
060102
THAT I remembered. You see that ALOT in PDP-11 assembly dumps… I had to look up the rest
I think one has to write some programs (more than hello world) in these kind of languages, just to recognize what’s possible, what paradigms are out there and to get an understanding what is suited for what:
a low-level language (e.g. C, maybe write a compiler for a very simple language that compiles to assembler)
a object oriented language (C++, Java, C#)
a dynamically typed language (Python, Ruby, JavaScript)
a language with meta-classes (Python, Smalltalk; although I think Python meta-classes > Smalltalk meta-classes)
a functional language (Haskell; it’s the best choice if your goal is to understand what it truly means to write functional code)
a logic orientated language (Prolog)
Also use at least two query languages (SQL, SPARQL, XPath) and compare different kinds of “generics” (C++ Templates, Java Generics, C# Generics). And these days maybe also a language like Go or Rust. I actually haven’t written any programs in these myself. Hmm, how would you classify these languages?
Well today I watched this hilarious Scala presentation: http://www.youtube.com/watch?v=LH75sJAR0hc
And I feel that putting Java and C# in the same “directory” is so wrong. He touts on how Scala improves Java. And I agree. But compared to C# only valid point is less verboosines. Writing var, predicates for LINQ and using async – yeah I do that in C#.
But it’s cool to hate C# and suggest Java to others, because you need not to only buy a server, but buy a Windows Server OS (that comes with a GUI and eats tons of megabytes of RAM just to do nothing, OH THE HORROR) and SQL Server. And it’s from Microsoft.
Windows Server hasn’t needed a gui for the last few releases. They even suggest that Server Core, as it is called is the preferred configuration
Except that it’s a MAJOR pain in the ass to do anything with, even something simple like configuring a network interface is shit.
Uhhh, just because you think it’s a pain in the ass, does not make it so, I don’t think it’s much more annoying than your typical unix box, maybe more verbose, but it works. Anyway my point was that Windows Server doesn’t need the GUI, which still stands, regardless of your opinion on it’s usability.
And ofc Winows has the GUI built into the kernel, so even when using Server Core, you get a CMD.EXE window running atop the GUIness. Ok, not everything loads, but it’s definitely not text-based
I knew all that talk about a GUI-less Windows was bunk.
..
Edited 2013-07-28 20:39 UTC
More rose-tinted glasses and ruminations on how it was better in the old days and my programming language is better than yours and yadda yadda yadda. Yes, we can all learn something from what once was but that doesn’t mean today’s languages are crap.
Hey, it’s just like how today’s music is crap and the music I grew up with is much better and deeper … except I grew up with 70’s disco and glam rock and 80’s hair metal and bubblegum pop…
Edited 2013-07-28 14:52 UTC
Soulbender,
“More rose-tinted glasses and ruminations on how it was better in the old days and my programming language is better than yours and yadda yadda yadda.”
While you do have a valid point, the most popular language I use regularly in my job fits the article’s description very well. I bet I don’t even have to mention it by name: PHP.
While there are plenty of technically superior languages around, PHP remains top dog in open source web platforms. This language was clearly designed by amateurs who lacked depth in programming language experience. Each version fixes earlier mistakes, and so it gets better, but this in itself causes users to suffer through numerous incompatibilities over the years causing previously correct code to break. The authors lacked experience that could have made PHP so much better.
I think it’s popularity was primarily due to attracting people who wanted to defect from ASP and choosing PHP due to it’s similarities rather than it’s qualities as a language.
Edited 2013-07-28 15:51 UTC
To be honest, I don’t even consider PHP a proper programming language
On the other hand, I’m sure we can find incredibly shitty languages from days past too.
I came to functional programming language late. What a f–king miss I made : Lisp just have happens to have everything we need ! 10 more new languages every year won’t change much the face of the world. Learning and mastering Lisp would :
http://www.flownet.com/gat/jpl-lisp.html
http://norvig.com/java-lisp.html
And now for real case scenario, download QLisp and try the bundled examples :
http://mfj.chez-alice.fr/html/index.html (Télécharger / Yellow left tab)
Yeah, Lisp can even perform industrial optical recognition. Not that bad from a 50’s language, hu ? I would be interested to see OpenTLD converted to Lisp to have a comparison figure to chew on as well (line count and performance wise)
BTW, try Erlang… Ugly as hell (their IDE is notepad-like) but really, really wonderful under the hood.
Kochise
Edited 2013-07-28 21:02 UTC
Btw, you might get a kick out of this:
http://me.veekun.com/blog/2012/04/09/php-a-fractal-of-bad-design/
More like each version tries to become more like Java and so moves further away from what makes PHP actually useful: Productivity.
In the 1990s there was a massive boom of new programmers who started out on the new, modern, relatively-young languages rather than learning the stalwart programming languages of the 60s/70s/80.
Some of these programmers saw Java, and it was good. So they set about to turn every damn language into Java to make it “purer”. This software “purism” fetish that is so common nowadays (next target: JavaScript) misses the benefits of these languages: productivity. To purists, if your Sub Main doesn’t require a Factory Factory then your programming language isn’t “Pure” enough. Software purism is bullcrap.
A programming language needs to be two things: Accessible, and designed in such a way that developers do The Right Thing by default.
The 60s/70s/80s industrial programming languages had poor accessibility but were designed right — to make efficient programs as default. In the 90s programming languages were accessible (PHP / JavaScript), but incredibly stupid (security? What’s that).
The march of PHP towards Java Purism is fundamentally unintelligent. It replaces productivity with fetishism. (That’s not to say OOP is bad, not at all, but that’s a different choice/argument than accessibility/pursim)
You cannot make languages that were bad to begin with better by making them “purer”. You can only make them better by making them do The Right Thing by default.
And this, is what the PHP management does not see. They see a future of pure OOP where every developer is so enamoured by the sheer beauty of their emerald city of software purism that they will just want to code securely and efficiently. — Instead of just adding native string types for SQL & HTML text so that these cannot be concatenated or output insecurely by default; which would be a lot less work and would do a whole lot more towards the bad security image PHP has.
*sigh* But alas. Purism is best and I have to sit by and watch JavaScript get groomed and abused by these same people who want to make JavaScript a Real Programming Language and turn it into something completely inaccessible to the masses.
Edited 2013-07-28 17:53 UTC
Kroc,
That’s a lengthy post, but you don’t really define what “purism” means in the context of what you are talking about.
I assume that your are talking about OOP? If so, I agree it can sometimes be overdone, but realistically most PHP code isn’t OOP anyways so the criticism seems a little hypothetical.
“*sigh* But alas. Purism is best and I have to sit by and watch JavaScript get groomed and abused by these same people who want to make JavaScript a Real Programming Language and turn it into something completely inaccessible to the masses.”
Off the top of my head I cannot think of any negative changes and it was always OOP based. Can you give examples to clarify what you mean? Try/catch was very good to add, same with regex, and ajax support.
My wishlist for JS: I really do wish they’d add namespaces. For security it would also be extremely valuable to have code domains (sandboxes) to allow webmasters to add security barriers between scripts.
It’s pretty bad that webmasters are including 3rd party scripts (say for displaying ads, recording page hits, etc) where they implicitly share full control over the user’s browser because the language doesn’t have a construct for separating script domains.
Granted domains are not available in most languages, but I’ve used it in .net to allow 3rd party plugins to run isolated from the main code. An example might be a public game server where you want users to be able to upload plugins for their character but you still want their code to be contained in separate execution sandbox for both stability and security reasons.
Edited 2013-07-28 19:53 UTC
Apologies for waxing poetical. “Purism” in simplest terms is best described as “being more meta”. The more meta a language it is, the “purer” it is perceived — that is, more abstract and layered. Templates, Generics, Factories, Overloading, Abstract/Polymorphic classes and so on. Each is a useful feature, but a “pure” language is one that begins with very high-level concepts that must be understood before one can begin to understand the code. The code becomes opaque and incomprehensible to anybody who does not have the “knowledge” of these high-level meta concepts about how the code is organised, structured and designed. Anybody who does not understand this inside-knowledge is looked down upon and nobody is willing to explain it to you.
What a load of bollox. Everyone of those concepts you listed is well documented and has hundreds of examples online.
It not like you suddenly can’t write simple web scripts in either PHP or JavaScript. Both languages have been been given more features to allow those that need them to use them.
Edited 2013-07-28 22:52 UTC
Not so. Individually, features are documented, of course, but needlessly complex combinations of them can instantly become incomprehensible. When you move from documented examples into the cleverness of the human mind to layer meta-architecture on top of these principles then you get into the realm of the in-crowd.
Saying “it’s documented” is just another way to look down at those who don’t understand. Purism aims to turn programming languages not into art, but into a magic trick, one whose secrets are not accessible to the plebeians who aren’t willing to grind their face against the documentation for days on end.
What I want is programming to be accessible, obvious and not steeped in meta-concepts. Concepts that do need to be learned (as with anything), such as classes and inheritance should be apparent at face value, not doing magic because the person doesn’t know that something else buried somewhere else is having some effect that totally changes the behaviour with no indicator as to why (ala PHP).
Your argument is ridiculous.
It is akin to saying that mathematics should be dumbed down so everyone can understand the more complicated theories.
If you want to be able to do something well you have to put time into it. If people want to learn how to program something there is plenty of resources out there for someone to learn … one of the best (code-academy) is free.
Accessibility != stupidity
If this were not the case then we’d all be twiddling bits with a magnet on a string because that’s how Real Programmers^TM do it.
I didn’t say stupidity did I?
I dunno how much more accessible you want to make programming? There is literally pretty much every resource you need to educate yourself available for nothing.
So far all you have said that more complicated techniques are akin to magic. Which isn’t true, because most of the ones you mentioned are well documented with 1000s of examples.
It is pretty much like mathematics, if all you need to know much more than basic arithmetic that is fine … if you have a job at Boeing they expect you to know a hell of a lot more. (BTW we could talk about the fact that in Pythagoras’s time being able to multiply was considered advanced mathematics).
The same applies to programming.
Edited 2013-07-29 13:37 UTC
Who are these strange, blind, people?
It’s still an improvement over what PHP used to be.
Hey PHP is great, majority of “thedailywtf” type articles are because of PHP.
A lot of the code highlighted is VB.NET and VB6, which I think are a pure filth but I can code extremely quickly in.
Ummm, have you actually listened to some of today’s music?
http://www.youtube.com/watch?v=0q1wzwAMMPU
Makes Vanilla Ice seem like grammy material by comparison
There’s shitty music today and there was shitty music back then. You can’t judge one period by its best music and another by its worst.
Dude, this is just a track I picked off the radio at random. I doubt this is the worst that this generation has to offer. Here’s another:
http://www.youtube.com/watch?v=VoVg5dG6o_Q
The second one actually charted at #14 on the Billboard 100. I challenge you to find me ANYTHING prior to 2000 this bad, and was a radio hit. Not even JJ Fad could suck worse than this. There is NO denying that mainstream music today is worse than it has ever been. Hell, I’d rather listen to disco, and I’m a child of the 80’s.
Good music is still being made, you won’t find it on the radio though.
Depends on the radio, you can for example hear plenty of good music in https://en.wikipedia.org/wiki/Polskie_Radio_Program_III (public broadcaster, has a sort of mission to popularise good music, at the very least on evening transmissions… over the decades, quite a few musicians ~launched their careers on Trójka)
Edited 2013-08-02 22:29 UTC
De gustibus non est disputandum.
The top songs are what are played in clubs and bars or on the radio where people want background music to some other task. The Billboard Top 100 has rarely been the home to the best music. You always have to look outside of that. There is plenty of good music being produced today, and some of it actually makes it big. Indie rock has had a few breakthroughs, for example. I don’t particularly care for the more popular songs, but I have to give them credit for being more artistically competent than the more generic schlock.
Barbie Girl – Aqua
Blue – Eiffel 65
Mr. Vain – Culture Beat
Do you want me to keep going?
Oh god… I thought I’d purged that particular horror from my brain years ago…
http://www.youtube.com/watch?v=jRx5PrAlUdY ?
Even over 9000x better !
Kochise
A number of years ago we were on holiday in Spain. One day it was market just outside our apartment. Across the street was a stand selling music. The bastard played only 2 songs, all day, continuously, one was this song by O-zone.
After a while you tune background music out, but the way this song starts it kept attracting our attention. That’s why I remember that song and not the other one.
Looking back maybe I just should have bought his demo device.
The songs you mention all have one thing in common… they’re actually singing, at least to some degree. That’s more than some of the most popular ‘artists’ can even manage these days
Of course, I know there’s good music now, but you compare the popular stuff today to what was popular in any decade previous, and there’s really no comparison.
You think rap was invented last year? Or just bad rap?
You do know vanilla ice made a second album, right?
http://www.youtube.com/watch?v=Dx1LQAahVic
I’m in to rap (and other genres) and rap most certainly was MUCH better in the 80’s when it was part of a blend of rap (written by the rapper himself) and musical creativity of the DJ.
Today rappers are artists who can’t sing. There is no creativity, it doesn’t add anything to the song. It’s just commercial pop trash.
The last Vanilla Ice stuff I bought was the soundtrack to his film “Cool as Ice”. Truly truly awful.
Rap like every genre suffers from the good vs. the commercial. Mind you, I was a big fan of NWA and Dr. Dre (The Chronic). The lyrical content of that music was highly erm, questionable. Then again, Public Enemy’s Fight the Power still seems relevant today.
I always think too many kids listened to NWA (and 2 Live Crew) and when they became rappers they thought they just needed to swear a bit and pretend to be a gangster.
Obviously NWA was a few levels above that.
De La Soul, Public Enemy, Beastie Boys, A Tribe Called Quest, etc… weren’t gangsters nor did they pretend to be.
You sir, are clearly a gentleman of great learning with a highly refined taste of what is excellent in life. I raise my imaginary glass to you.
Edited 2013-07-29 12:04 UTC
Well, that’s a first. 🙂
Most people react less positive when they hear the rap I listen to.
DJ Format (turntable) and Abdominal (singer) : FTW
http://www.youtube.com/watch?v=YhZt4i92aSA
http://www.youtube.com/watch?v=YQr1u1l-rIU (one shoot)
…
Kochise
Très bien!!!
Merci beaucoup!
“can’t sing” is usually a retort against rap by people who don’t like it. So I was assuming you weren’t a fan based off of that.
I understand you’re going to be insanely stubborn and you’re pride just won’t let you admit that you’re just plain wrong. But seriously Vanilla Ice. QED.
I like hiphop, since the 80’s, but the rapping is just a part of it. It’s the combination of a number of ceative aspects: rap, music and to some extend dancing and culture. I was a street basketballer for some time and hiphop was the music that came with it and I was the one spending time to make the mix tapes.
It’s the result of a small group of artists being creative and coming up with a finished product.
What people today view as “rap music” are basically pop songs that feature a rapper.
Vanilla Ice is a nice guy, but his rapping wasn’t that good (although he was gone before he could improve it) and much worse was that his music was just pop songs produced by a commercial team. It’s hard to find anyone in the hiphop scene who doesn’t share that opinion.
But he really is a nice guy, so I wish him well. I even like Ice Ice Baby, but I wouldn’t label it hiphop nor would I ever admit this on a basketball court.
Yeah, and how high did it chart? Personally, I’d rather listen to Vanilla Ice a thousand times over than anything released by Lil Wayne or his modern-day ilk
Even if you hate rap, at least back then, they sampled music from artists that actually had talent, so it was somewhat listenable. Now? All you need is a copy of Fruity loops and a 49-key MIDI controller to make your ‘beats’ with, and you’re good to go. That’s about all these no-talent f–ks can do is make beats. Hell, my 5yo nephew could do that.
Edited 2013-07-29 22:01 UTC
2 Live Crew.
I would agree. My son, not so much.
Though pretty much the same thing was also said, by the past elders, about songs which are now considered “classics”…
Blue is about a murder, was banned in the UK.
The 90’s had some good music, but LOADS of bad music too (mostly European).
And people bought LOADS of bad music, causing more bad music and making it acceptable to make bad music and sell it too.
I never liked Madonna in the 80’s, but listing to what she made in the last 10-15 years her 80’s songs suddenly are a lot nicer.
I’m not a chart watcher, but it does seems crappy songs often have a better chance of a shot at #1 or the top 10 at least than good ones.
Rihanna has a number of #1 hits in the US, Depeche Mode have none. Go figure.
How/why do you remember them?
I’m going to be entirely honest here: I’m 34, and that’s better than a lot of the shit that was floating around in the 90’s. Like someone else said: Barbie Girl, anyone?
There is still good music made:
Zoe Keating: http://www.youtube.com/watch?v=yYrcXX4nWOA
Theophany: http://www.youtube.com/watch?v=w_8HZNCKpdU (ok, that’s a remix of something from 2000; download: http://www.terriblefate.com/)
Florence and the Machine: http://www.youtube.com/watch?v=tfBY96qxVRQ
Floex (Tomáš Dvořák): http://www.youtube.com/watch?v=OYd7PbGEOus
The Dresden Dolls: http://www.youtube.com/watch?v=SJ9Bv99wo-E
The Tallest Man on Earth: http://www.youtube.com/watch?v=8Giuw53r2BQ
Vienna Teng: http://www.youtube.com/watch?v=AUpEaqdaKqw
And even auto-tune can be used in a good way:
Ellen McLain+Jonathan Coulton: http://www.youtube.com/watch?v=25ClYY5mwbc
Ok, none of this is “Bach” or “The Beatles”, and none of it has any chance to get into the album charts. But when ever where good music in the charts? I guess you have to go back to The Beatles for that. Just don’t listen to the radio. Listen to “The Internet”.
Also there is some low-quality music on YouTube that is still enjoyable because it is high-fun (probably only works if you’re in the fandom; again auto-tune):
http://www.youtube.com/watch?v=GxA1U1DVb7I
http://www.youtube.com/watch?v=mn0Q2XlXRs0
http://www.youtube.com/watch?v=Ew8ZqhjM26g
Also todays music. Beats the heck out of Beatles imo…
Judging from the linked YouTube video: I don’t think so at all.
I absolutely love to code, it is my favorite hobby, but I am not really sure it qualifies as art. In my view it is more like math or chess, where certain solutions can be beautiful or brilliantly designed or executed. The heart of coding is more logic than creativity.
As for why small hobby project postings are filled with negativity, I think it has partly to do with developers (and users) investing greatly in whatever tools they learn, and therefore they have a huge interest in what becomes the winning horse. If a hobby project attempts something that differs from their horse, some react by attacking the project.
Another reason is probably that most basic OS stuff has matured to the level where there is now a standard solution proved by the test of time. This means that whenever someone tries something different, you will have hordes pointing out all the features missing.
I disagree. Its exactly like any other form of language.
There is writing like textbooks, documentation, instruction manuals, etc. – things meant to convey information as clearly and economically as possible. These kinds of things are extremely important and there is skill to doing them well, but few would consider the results “art”.
Then you have poetry and other forms of creative writing, where the point is not just to convey information, but to convey it in ways that elicit an emotional response in the reader. That response may be triggered by your choice and flow of words, it may be triggered by clever grammatical choices or other “tricks” of language, or it may be that you are just using arbitrarily imposed restrictions to challenge your creative skills (iambic pentameter, haiku, basic rhyming, etc.)
Programming has exactly the same form and function.
Some people approach it as a straight-forward instruction manual – write exactly what is needed to convey the proper information to make the machine do what is intended. This is more analogous to the “textbook” example above. People who approach it like this consider the machine to be the intended audience – they want it to be readable by humans, but there is no effort put towards creative use of the language.
Others like to program creatively, they are not just trying to achieve a particular result, they are trying to do it in ways that fulfill their creative drive. They are writing for the humans reading their code, and they want their code to elicit an emotional response.
The heart of coding depends on the writer’s intent…
My favorite example of this is Duff’s Device:
http://en.wikipedia.org/wiki/Duff‘s_device
This is a straightforward copy of items from an array to mmaped output register:
This is art:
Edited 2013-07-28 22:08 UTC
That’s the most useless use of Duff’s devices I’ve ever seen. It’s performing a word-by-word copy but has additional addition, a whole bunch of extra comparisons and is vastly less readable. What precisely is that supposed to gain over the “naïve” implementation, precisely?
I don’t see how, since this is the intended use of Duff’s device – those are the exact examples straight from Tom Duff’s usenet post in 1983…
My question would be where you have seen a useful use of Duff’s Device? It wasn’t really intended to be useful, more of an oddity really. It has been used in actual product code, but very rarely and on modern processors it is pretty much pointless.
Its over 50% faster on the hardware it was written for (VAX), but that isn’t what makes it art. It is the creative intermingling of a switch and a while loop, taking advantage of case fall through in the C language to allow the code to jump into the middle of the unrolled loop to handle the remainder in the last pass.
My point isn’t that this is good code, its not. But it is arguably “art” in the truest sense – it leverages the rules of the language it is written in a very unique way, leaving the reader to puzzle out what is going on. It in a sense has a hidden meaning, one that is not obvious at first pass. It seemingly does something that appears to violate the rules of the language, but in fact does not – it is perfectly legal C code.
Those are not traits of good code, in fact they are traits of bad code… But they are traits of art.
I’ve seen Duff’s device used quite sensibly for chunked copies/reads/writes, but never sensibly for a word-by-word copy like that. Eh, not that it’s relevant to your point.
I would rather call it a technique. And strictly speaking a convoluted and somewhat dangerous technique. It trades off readability for speed, assuming a certain type of CPU architecture and compiler.
The code might actually run slower on many newer architectures and compilers where the compiler might have vectorization passes which converts it into SIMD instructions. The cleverness of the code may confuse such a pass, thus using a much slower technique than what is otherwise possible. It also assumes that simply calling memcpy(to,from,count) isn’t mapped directly to a compiler intrinsic, as it is on many modern compilers.
That doesn’t mean it wasn’t clever, back when this approach would be a good idea, but you always have to trade off cleverness/optimizations against readability for other developers and compiler passes.
To me, the main difference between art and craftsmanship/engineering is that in art you might write the above purely for the beauty of the code itself, while craftsmanship there’s usually always one technique that is the better choice for a particular problem. In most cases that means that the common well understood solution is usually better (in the example to call memcpy), unless there’s something special about this spot in the program that justifies deviating from the standard practice.
Of course, part of the fun for me on a hobby basis is to try deviate and see where it gets me.
I actually agree completely. But that isn’t the point.
All quite true.
Again I agree, but it doesn’t have a wikipedia entry just because it was clever – it has a wikipedia entry because someone wrote it, and those who read it appreciated the inventiveness that went into writing it. There is something to it beyond just performing its intended function…
That is what makes it art – it isn’t terribly useful and never was (you could do almost the exact same thing with 2 loops). Art doesn’t have to be useful, it just has to elicit a response of some kind.
Exactly. I agree completely. I was just illustrating an example of the former.
The difference between a dayjob programmer and artist programmer is akin to that of a stonemason and a sculptor. I.e. it’s not the job description or tools, but quantity vs. quality, attention to detail and creativity.
Another ridiculous assertion.
As developer your job is to satisfy the requirements, that is it. Nothing more and nothing less.
Obviously during development there is times where you find out something should work differently or something wasn’t considered … but they should have been requirements also.
It kinda like making a chair. Yeah you could make a throne, but was it really specified anywhere that you should be making one when in reality it going to be sat in a school cafeteria.
The reality is that you have to choose 2 of the following good, fast or cheap.
Edited 2013-07-29 12:02 UTC
You have to think about it as real life storytelling. Everyone can read or tell a story, but not everyone can tell it in a way to make other awe. For a given coding problem you can create a lot of solutions, but sometimes you stumble upon one or two which you look at and you feel it’s “nice”. That’s when coding becomes art. Something which produces the same results but does it in a “masterful” way, like the difference between an ikea kitchen stool and a craftsman-style armchair.
But most people aren’t willing to pay more for the hand-crafted one because they simply want to park their bum while they eat breakfast.
It’s more engineering than art. Sure, there are artistic aspects to it but at the end of the day it’s engineering more than anything else.
One interesting thing is BlackBerry that uses QNX and has better battery life. QNX was designed to be lightweight and embedded (both iOS-BSD-Darwin and Linux can be reduced, but not without compromise).
Much of the tool depends on the job, but also the amount of thought. And there is an art to programming, clear, concise, easily understood programs are both aesthetically better and better from an engineering side.
Too often the OS, language, and API/Libraries become a “one size fits all”. Even paradigms (Top-down, object oriented) have their place, but that place is not every inch of the universe. You can force something to work, or you can find something that works.
[Citation Needed]
Yes, and no. It’s a real time operating system, and isn’t particularly good on battery.
I used to run qnx on a machine at home. I really liked photon.
Edited 2013-07-28 23:26 UTC
There are a number of good things in old languages, and maybe some of them are applicable to today’s problems, but he was way too condescending of the modern free approaches, software licensing costs are a real consideration. Some of the challenges of oltp were just flat out treated as if they were trivial.
While I am sure some code can be art, and some approach it as artistry, I have yet to see good code from anyone *I* know who calls themselves that. I am less disdainful of those who call it science, but lets face it most people who call themselves computer scientists aren’t actually doing science.
Programming is craft. A little artistry, a little engineering, a and a whole lot of hard work makes it a craft. My title says software engineer, but I think of myself as a craftsman. We all should really.
APL is an interesting language, every budding computer science student should learn a little of it, as they should Smalltalk and Lisp. But I have spent my 25+ year career with someone or another trying to convince everyone to switch to APL, or Lisp, or {functional language of the year}, or whatever.
Most of these languages have their place, and are very useful in their domains. However so many of them — APL, J, Lisp, Scheme, MUMPS, C++, et al — are prone to produce write only code in the hands of inexperienced coders.
Programing languages are tools, we should use them like that. Carpenters don’t get into arguments that philips head screwdrivers encourage bad carpentry and we should all switch to torx. They use the best took for the job. There is no one programming language for all tasks, and we should stop this fiction that one language is somehow magically “better” than all the rest.
The article linked to was more or less useless. The writer says that “Comparing, say, Kx systems Q/KDB … to Hive or Reddis is an exercise in high comedy”, but does nothing to explain why this is the case or — god forbid — provide any proof.
He says “APL languages were developed a long time ago, when memory was tiny compared to the modern day, and disks much slower. They use memory wisely.” But languages don’t specify memory usage, implementations do. COBOL was first written for computers with less memory than a Apple ][+, but this doesn’t mean they somehow produce tighter code or magically use less memory; and it is asinine to think it does.
I see nothing in this blog post that makes it worthy of discussion…
Couldn’t have said it better myself.
While I agree to most of your points I do not think the article is useless, but I do feel there are some misconceptions on it.
Like when he complains about ‘scanf’. ‘scanf’ was used a lot because a long time ago there were a multitude of hardware architectures, some cpu were big endian, some were the little endian and the numeric internal representation of numerical types would, and many times were, different. The only “safe” way to exchange data was to put it on ascii. Only after Intel got so dominant it became an almost non issue. “Now” (what really means, for some time) we even have libraries to facilitate data exchange. Also, if you were using PC computers on 80’s there were no easy way to handle things that could not fit on available memory, the hardware and the OS were not ready. This is a non-issue now and his comments about mapped memory is somewhat dated. We use mapped memory when we see fit, at least on C or C++, and I don’t see why it should be the default way to handle “automatically” reads and writes.
We had a long way from the “old” days to now. My old ‘C’ and ‘Fortran’ programs had only to deal with a couple of input files and dump the result on some output files. Programs now are way more complex and so we use libraries that are way more complex too. GUI’s, networks, multithread, concurrency and so on and so forth.
There is a reason why Turbo Pascal could fit on a 360 KB disk and leave ~ 320 KB free on it. It did not has to deal with the plethora of things modern compiler and libraries have to. It did not has to deal with the plethora of things we have today. Even if we don’t make use of them, they are there.
With the growing complexity, most of the limitations of the computer languages started to show up, to reveal its shortcomings, and had to be revised, new ones were created. Anyway, the hard part of programming to me never was the new syntax or the new concepts. This is something everyone can handle expending some time. The hard part is to become proficient on the “hard part” of the tools available, the libraries, their do’s and their don’t’s.
We focus a lot on concepts, on “System Architecture/Engineering” but I feel that we should not neglect so much the libraries limits like we do when training the new generation. That is one of the reasons we had so much trouble when everything got networked. Once again, things were a bit different way, way back on past, you were supposed to be very aware of the limitations and every fault (almost, sans bugs) was “your” fault. Now libraries are supposed to handle “stupid things” because the “average” programmer do not care to check the limitations they carry. And we all blame the language or the library for that.
To couple with that we created managed code. And we encapsulated the old libraries on “nice” costumes. Is this really the best option? Do we create better developers this way? Letting them ignore the limitations? I don’t know but, sure, learn how to do “Hello world!” on 10 different languages because “this should be handled automatically” or “differently” does not looks like the right answer to me.
I wish I could mod you up but alas, we are still not treated like grownups here.
Well most don’t because programming isn’t art, especially when you are doing it properly. Programming is more a craft akin to a blacksmith or a joiner and much like those crafts, while everyone has their own “touch”, there is a set of well known principles and practices you must master.
Edited 2013-07-28 22:11 UTC
Yeah, often cases the real world best solution is a crazy hack with ducktape connecting the flux capacitor to a the entrails of a slaughtered pig. It is beautiful to a degree, but also repulsive as hell to any one with OCD. The beautiful parts are lower level stuff, IMHO, the sludge is in the business rules. So, if you focus just on flux capacitors, You’ll think everything is beautiful.
Actually, and like on math, some things do carry a sense of beauty and amusement, like when a concise and intelligible proof is developed but, granted, they are massively outnumbered. What most of us do is akin to apply a “equation” or “recipe” to some problems with different levels of verbiage.
I think you are projecting your idea of what programming is on everyone else… I don’t disagree with the idea that programming can be viewed as a craft, but that doesn’t invalidate the efforts of those that approach it as art (in one form or another).
In other words, writing:
“Life is difficult and finite.”
is not the same things as writing:
“Hateful is the dark-blue sky,
Vaulted o’er the dark-blue sea.
Death is the end of life; ah, why
Should life all labor be?” [Alfred Lord Tennyson]
They both mean roughly the same thing, but they are obviously not the same…
All I’m saying is some people like to approach it as art. It isn’t necessarily practical or professional, but it can be appreciated for what it is – demonstrating creative skill in the use of a language.
That doesn’t make the discipline itself art though. Come on, everything can be approached as art but we don’t consider building houses, digging graves or driving a taxi to be art.
Im not saying that programming is an art. Im saying that there are some programmers that like to use programming as an artistic medium – and there are some people that appreciate such efforts for what they are.
Such code is not always (ever?) the best solution to the problem they solve, but many people enjoy seeing creative expression in language, any language. My only real point is that programming languages are no different than any other language in this regard.
Removed this comment because of markup problems (why doesn’t osnews acknowledge the q tag in this post?)
Edited 2013-07-29 10:44 UTC
Array languages are still alive and well in at least one place; the financial industry. For example in the form of A+, used at Morgan Stanley, and K/Q/KDB+, sold by a company called kx, used in many places. They serve as a combination of databases and numerical analysis tools. In both the mentioned cases they were designed by Arthur Whitney, who also shows up in the languages mentioned in the articles in that he wrote the initial prototype implementation of J.
Very nice languages, rather dense and seemingly daunting, but extremely effective for a lot of tasks.
The question is if they’re still in use because there is nothing better available today or if they’re still in use because the financial industry is extremely wary of change (come on, these are the guys still using Cobol) and why change something that works?
The fact that these systems are still in use does in itself prove nothing.
Soulbender,
“The fact that these systems are still in use does in itself prove nothing.”
Ain’t that the truth.
I think mainframes had developed some very advanced and efficient techniques with regards to developing standard VSAM files, queues, and batch processing that was almost entirely lost on developers growing up in the PC world (which is most of us). However now I’ve seen mainframe platforms being pushed into modern use cases such as hosting web apps and web services. They are awfully out of place in a modern web world, the companies who use mainframes today wouldn’t be likely to choose them today, they just have very old dependencies and don’t like to change.
I don’t know of a comparable transaction manager than CICS on a mainframe, DB2 performs quite well, and IMS for stuff that doesn’t need SQL.
It’s still quite useful for when server farms are not fit for whatever purpose.
kwan_e,
“It’s still quite useful for when server farms are not fit for whatever purpose.”
What would that be?
Mainframes are a fairly different paradigm, and I do think it’d be beneficial if traditional mainframe techniques were taught in classrooms to demonstrate ways of solving problems that don’t depend on so much context switching. However in principal none of the mainframe patterns are exclusive to mainframes, so I don’t see many benefits to choosing mainframes for any new projects.
My mainframe experience is rather limited in scope. I have worked with interfacing them to outside systems via exec calls with commarea data and pragmatically interacting with interactive mainframe programs through their BMS MAPS. We also wrote short programs to retrieve data from the mainframe data stores using copybooks, etc. It’s through this lens that I’ve learned about CICS.
There were legacy problems that we actually bumped into, like the 32k commarea limit that affected our mainframe webservices at the time.
http://docweb.cns.ufl.edu/news/n0443/Beyond_the_32K_COMMAREA_Limit….
Also, it’s easy to overlook, but even something like unicode support is hairy when languages don’t support them outright.
I agree mainframe programming techniques are worth learning, and I’m open to learning more, but to reiterate I feel the techniques should be applied on modern platforms rather than keeping mainframes around.
All I can say is that a lot of things are changing now that mainframes are increasing their use of 64-bit address spaces.
Even CICS now supports Java in 64-bit.
Because there is nothing better available, they are rather esoteric and no new hires knows how to use them, so attempts to move off of them are ongoing. It just so happens that there is nothing that really does what they do as well.
Very elitist article. These languages are unreadable. No one will be able to maintain code written using them.
>These languages are designed better than modern ones.
You’re talking about APL, really??
We saw APL during a class about parallelism, we even made a few programs, and if a language deserves to be named “write only” that would be APL!!
When a program didn’t behave as expected you had ~0% of chances to understand what the program was doing, it was much easier to rewrite the part of the program which was causing problem than to try to understand the code.
For those who don’t know APL, think about the worst obfuscated Perl program you’ve seen, APL is like this except probably ten times shorter and ten times more difficult to read.
Wow! I happen to like Perl but, sure as death, if it really looks like that I would not touch it with a 28 gigaparsecs pole.
I’m sure those languages are fine.
The primary issue is that that vast majority of programming today is not in the domain those languages specialize in. Most folks don’t do monster array or numeric processing.
Most folks are working on applications that are little more sophisticated than an address list, and then automating workflows there were once achieved by pink, blue and mustard copies of forms.
The primary domain of computing today is shoving stuff in to a persistent store and spitting in back out in a different order. The individual points of logic are themselves simple, it’s the sequencing and transformations that are arbitrary and inconsistent and follow rote procedure since many of these processes are mandated by human endeavors or, even worse and more arbitrary, written law.
Despite the rise of general purpose computing and the size of the populations involved in working different problems, if you are deeply involved in a particular domain where these languages happen to have savant like capabilities, then you will have encountered them, perhaps evaluated them, and then either adopted or discarded them.
The Lisp Machines died for a reason, overtaken and left behind by general purpose processors. Specialized languages suffer similar fates — excelling in shrinking domains as general purpose system become more and more capable.