The Schizophrenic State of Software In 2014
jfruh writes: "The current state of the world of software is going in two radically different directions. On the one hand, server-side software is maturing, with wide consensus on tools and techniques that can be used across platforms. On the other hand, client-side programming is an increasingly fragmented mess, with the need to build apps for the Web and for multiple PC and mobile platforms, all natively. But of course, the server and client sides have to work together to deliver what people actually want."
and mindlessly frontpaged by the "editors" at DiceDot. Yawn.
If only we had some standardized, ubiquitous platform for delivering information and applications to all sorts of devices. A platform that permitted linking between apps in a sort of "web" instead of having everything be isolated and separate. A platform that didn't require approval or payoff of competing third parties. Man, I must be dreaming.
captcha: mourning
Programming is always going to be a mess and there will never stop being new platforms.
This is something to accept in an industry that is by definition always going to be on the bleeding edge of change.
It is part of the fun --- go back 30 years and it was mainframe vs. personal computer and IBM PC vs. Apple vs. Commodore --- in the 1990s hardware graphics acceleration and web browser and GUIs were the agent of change.
Ask if anyone thought Objective C or Java were going to be important programming languages on phones in 2005?
Priest: "Universe from nothing, no laws of physics, sped up time"+ huge discrepancies. Creationism? No. Big Bang Theory
> "It’s a pity some people still build important apps in PHP and Spring..."
Or perhaps he means specifically the combo of PHP + Spring.
I've never had much trouble with Java + Spring, but maybe he hates that, too.
I don't see him listing any alternatives, so what are they?
isn't this what Adobe Air was supposed to solve-- write one client to rule them all?
Some drink at the fountain of knowledge. Others just gargle.
This sounds like a sales pitch for yet another compatibility layer. Just recognize you need to compile for different build targets and set aside the time.
... is not programs what software developers do? Oh, wait... this is 'I know cobol and I am not going to bother learning/using another language!!'...
Become a priest (or a nun). Their job hasn't change in more than 2000 years.
Ditch the unnecessary desktop and mobile apps, and build web applications.
Problem solved.
I do not think it means what you think it means.
Schizophrenic (comparative more schizophrenic, superlative most schizophrenic)
1) Of or pertaining to schizophrenia.
2) (of a person) Afflicted with schizophrenia; having difficulty with perception of reality.
3) (slang, DEPRECATED) Behaving as if one has more than one personality; wildly changeable.
We can hire 25 Elbonian programmers to deliver on time and under budget! ... no, um, we call those "features" here.
Feeling insecure (specially after the NSA revelations) could be the cause of that problem.
I'm writing stand alone Desktop programs.
I am Slashdot. Are you Slashdot as well?
That's why we need more people using languages like this: http://haxe.org/
I discovered it a couple of months ago. It has its quirks, but not having to worry about rewriting your entire app for another platform is a blessing. And no messy VMs needed.
Is there a consensus on a common server side platform and language? If so what is it?
Java needs no explanation. There are c++ libraries like JUCE and Qt that build high-level widgets for all platforms including iOS and android. As someone in the trenches of developing cross-platform client-side apps I'd say it's becoming less of a mess.
Programming always has been, and always will be, a mess. There is a reason that maybe two percent of the people in the world can actually do this work -- the other ninety-eight percent are sane and don't think like psychotics locked in the Red Bull factory.
"Common symptoms include delusions, such as paranoid beliefs; hallucinations; disorganized thinking; and negative symptoms, such as lack of emotion and lack of motivation."
Sounds a lot like a typical day on /.
But of course, the server and client sides have to work together to deliver what people actually want.
The server/client communication has never been simpler. There might be several ways of doing it but all of them are well documented and mature (probably because they originated from the server side as a response to the "fragmented mess" that is client applications). Therefore, why is this sentence typed with what seems to be snark?
That's why we make the big bucks.
omg, the world is complicated, the sky is falling and we're all going to diiieee!
It's called "diversity", not "mess", and one of those days you'll be fucking glad that we have it, because otherwise, as me and some other researchers have proven ten years ago, in a monoculture one zero-day in the wrong hands means game over, Internet in something like a few hours.
Be glad we have this "mess". It's going to save our collective asses one day.
Assorted stuff I do sometimes: Lemuria.org
Perhaps you can run what you like on nearly any OS but...
Do you use NoSQL? Relational?
PHP? Some kind of CMS, or roll your own with Rails?
Store content on AWS? Or some other cloud? Or just local?
Or perhaps you want to simply use the Google App Engine or other systems like it, and have everything hosted without fuss... or rent an elastic compute server and run your own custom Erlang server.
Not to mention you really can't run everything on every OS, as there are still plenty of Windows server specific technologies I didn't even mention but tons of people use.
And you think server stuff is LESS fragmented?
"There is more worth loving than we have strength to love." - Brian Jay Stanley
Excellent! More jobs for tech weenies...at the cost of turbulence.
But of course, the server and client sides have to work together to deliver what people actually want.
You mean, like Slashdot?
Like, automatically refreshing every x minutes, jumping the page even while I'm in the middle of reading it?
Or refusing to let us link to a specific comment? (Pick any comment and try to come up with a link you can send to someone.)
Or like adding new styles and layouts that, at each iteration, reduce the information a visitor sees per page? (Reading Slashdot through an ever-dwindling portal - sort of like reading a newspaper through a straw.)
I'd mention "friends, foes, freaks, and journals, but there may be a compelling need to "unfriend" someone. I wonder how many millions of Skashdot accounts there are, and the number who actually write in their journals. You can't delete your account, because theres no need to (of course!).
Useability experts exist for a reason. Software experts don't seem to realize that other experts exist and that good systems have multiple facets of "good". Instead, it's "good software is all you need, and the more features the better."
(Tooltip: "Documentation is boring! I'll just pit up a wiki and let the users fill in pages for me.")
IMHO, the ideal situation is, you define standard formats and protocols, and then you give everyone the freedom to use whatever technology they want to interoperate using those protocols.
Want to write your mail server in Java? Python? Prolog? I do not care as long as it speaks IMAP. Want to write your mail client in C#? Objective-C? Ruby? I do not care as long as it speaks IMAP.
Isn't this exactly how things should be?
Maybe you can get into a new trade like making screw drivers or something. Screw drivers rarely change.
Yes, you are dreaming. Operating system publishers leave features out of their browsers on purpose to push their proprietary native app platforms. Ever tried using WebGL, the Stream API, or with content types other than pictures and videos in Safari for iOS?
How can a developer "Just recognize you need to compile for different build targets" if one platform runs only Objective-C++, one platform runs only verifiably type-safe .NET CF bytecode, one platform runs only Java bytecode, and one platform runs only JavaScript?
I only had to read far enough to see that he says you have to compile a web application three times, once for the browser, once for Android, once for iOS. His methodology is so broken that he's unable to comprehend the idea of a cross platform website.
That doesn't help if the user is offline more often than online and the user's browser doesn't support IndexedDB. This is the case for a Mac, iPod touch, or iPad running Safari. (source: caniuse.com) Nor does it help if the user runs into error messages like "Hmm. While your browser seems to support WebGL, it is disabled or unavailable. If possible, please ensure that you are running the latest drivers for your video card." (source: get.webgl.org)
I've had to use a lot of different code/languages for my little Firefox Plugin and it's not that hard to keep up with. For the most part I can find libraries (I use Poco and QT) that do all the heavy lifting when I'm in C/C++. For my site a little jquery goes a long way.
:P
For the most part there's only minor syntax differences in modern languages anyway. It's all arrays, hashs/dictionaries iterators and if statements with a bit of gui programming.
Heck, even the gui programming follows the same basic paradigm. Again, wrote a few toy Android apps and found I was using Java to do the same stuff I do with HTML/JavaScript. e.g. Get a reference to a gui element then call methods to get/set it's state and attach a callback to it.
What I'm finding is that until you're writing math heavy programs everything is more or less the same
Hi! I make Firefox Plug-ins. Check 'em out @ https://addons.mozilla.org/en-US/firefox/addon/youtube-mp3-podcaster/
Java ME might have been popular in Europe. But in Slashdot's home country (the United States), I seem to remember that mobile phones were more likely to support BREW than Java ME, and BREW's digital signature policy blocked developers from self-publishing their applications. I'm told that trying to develop an app and get it approved for all the phones of all the carriers was at least as bad as trying to develop for a game console, and few companies tried.
The consensus at least among shared web hosts appears to be CGI using PHP, Perl, or Python, and possibly Java. The next step up from that is a Linux/x86 virtual machine into which you can install whatever language you want. Desktop and mobile devices, on the other hand, aren't really built to run a separate VM per application, and they haven't even standardized on a single machine code.
Applications not primarily intended for real-time communication have to work even when communication between the client and server is interrupted for tens of minutes to hours at a time, such as when the user of a tablet has boarded transit. This means the client has to use some sort of caching, and with Safari not supporting IndexedDB at all (source: caniuse.com), that's sort of hard to implement in a web application.
How would a custom protocol ensure that the the user sees the advertisements selected by the server? Or should server operators recover the cost of maintaining the server by charging users for the privilege to use third-party clients? I think that's part of why Slashdot hasn't implemented an NNTP gateway.
You try using a web application that relies on WebGL, IndexedDB, Stream API, or file uploads (other than images or video) in Safari for iOS and see how far you get.
For the most part there's only minor syntax differences in modern languages anyway.
For one thing, if I make a change to a program in one syntax, how do I propagate the change to corresponding programs in other syntaxes? Having to make the same change manually every time introduces violations of the DRY principle that lead to errors. For another, management of resource lifetime differs. Some languages, such as C++ and CPython, use reference counting, which allows deterministic semantics for finalizing objects and releasing their non-memory resources. Others use tracing garbage collection, which requires finally clauses that are trickier to handle when a non-memory resource outlives the method that allocated it.
1) Why distinguish client from server?
2) Server technology is advancing.
3) Client technology isn't that fragmented.
If people would only start using emacs, so much of this problem just goes away!
Thanks for the update Forrest!
With separation of concerns, MVC patterns, etc. server side code only needs to primarily spit out XML/JSON data. Because every client is different, each experience is going to be different and many times this is what the developer wants. My desktop version should be different than my iOS version.
Client side code has to be as diverse as the end users who interact with it.
Client side can be made a bit less painful with Xamarin. You can use one language (C#) for all platforms, and share a fair bit of code between platforms.
Of course you still need separate code to give a native UI on each platform, and different packaging to get the application out there.
Gone are the days of being able to target Windows to get over 90% of the client side market. There is real fragmentation, and innovation is happening quickly. There are many benefits to this, but stability in client side frameworks is not one of them.
Windows Phone 7 ran only verifiably type-safe .NET CF bytecode, and standard C++ isn't verifiably type-safe. Xbox Live Indie Games on Xbox 360 was the same way. The only language that was really usable on WP7 and XBLIG was C#; other languages required unsafe constructions (forbidden by the platform's policy) or the DLR (not present in the Compact Framework) or both. Java ME phones ran only Java ME bytecode. For a few months, iOS ran only Objective-C++ as a measure to fight the use of Adobe AIR, though Apple removed this restriction after it started to affect games' scripting. And of course, someone developing for the web platform can use any language he likes as long as it's JavaScript.
I so hate when people confuse it with multiple personality disorder. And so do I!
will work for dragon quest localization
DdJ was probably talking about the side of the mail server that stores received mail and presents it to the MUA, not the side that accepts outgoing mail from the MUA (SMTP AUTH) or forwards it to other mail servers (SMTP). Though the I in IMAP doesn't officially stand for incoming, you can think of it as if it did.
Assume there is a web application that does not run on a particular platform. Assume further that there is a demand for that application on that platform, be it in the form of a web application or a not-web application. So how should this demand be served? Translating each line of code by hand into the platform's native language violates the principle of not repeating yourself, which introduces errors in translation and doubles development effort whenever someone makes a change to the original web application.
Software patents are destroying software. I used to develop software. I'm glad I no longer do that because I don't want to deal with all the patent trolling going on. I watch friends who are still in the field, the news, etc and am so glad I'm not them. Time to kill the trolls. Patenting in general needs to be killed. It has gotten far out of hand.
So, there are only two kinds of software, eh?
You've got your server software.
And you've got your client software. And your client software is a mess.
Wish I were in "IT" and could sum things up so succinctly.
I don't get it. Why do you think that learning five, or a dozen, or fifty ways to do the same damn things is fun?
This is precisely why CS (really IT) is such a horrible field - you have to spin your wheels, faster and faster, just to do the same damn things, over and over.
Boy how I regret wasting time studying this field! Learning new things in science or math areas is fun, even history or psychology, medicine, neuroscience, the world is wide open.
CS/IT has become all about learning yet one more way to glue a database to a user interface. Yawn. Barf.
No wonder fewer people of quality, especially women, eschew CS/IT. it is a horrible, soul-deadening area to work in.
It was the other way round 10 years ago. Back in 2003 the dominant consumer OS was Windows, with more than 90% of all consumer computer interaction going through a PC running Windows. On the server side, you had Windows NT, Solaris, Linux and various other *NIX's. Nowadays the server market is much more unified, with either Windows or Linux dominating, and most server-side software is now tailored to one or the other, or both. However, the consumer market has changed considerably, with many new OSes and API's joining the party, including all the smartphone OSes from Android to iOS to webOS to Windows Phone 8 and it's associated Metro interface and API's. Software hasn't become schizophrenic, it's always been like that
If you gave me a choice between a printer and a giraffe with explosive diarrhoea, i'll get my ladder and my raincoat
If a platform is sufficiently different from the other platforms then it ought to have programs rewritten for it (because they'll be different and therefore not repeated)
How are you defining "different" in light of the principle of separation of data from its presentation? Desktop, mobile, and web platforms are all equivalent to the same linear bounded automaton and in theory should work with the same data model. In this respect, no computer "is sufficiently different". True, the view should be rewritten to take advantage of each platform's strengths. But because splitting an application such that the model runs on a server and the view on the client precludes offline operation, a copy of at least part of the model has to run on the client.
if it is not sufficiently different from other platforms than it doesn't need to exist (in fact, the platform developers themselves violated the DRY principle)
Unfortunately, in the real world, platforms become popular among users despite having violated DRY for business reasons.
Among 4"-class tablets designed to operate without a cellular subscription, I can't think of any other product with market share even close to Apple's iPod touch. Archos 43 Internet Tablet and Samsung Galaxy Player appear to have fizzled. And among phones that play Amazon Prime video, I can't think of any other product with market share even close to the iPhone. How is this "marginal market share"?
Who said "server-side software is maturing" ??? Look at the churn in Java frameworks. Let's use Struts - no, let's use Spring MVC. Let's use JDBC - no, let's use Hibernate - no, let's use JPA - no, we need to go back to JDBC. I know ant inside and out, so let's start using Maven. Let's use JSP - no, put code in JSTL tags - no, make beans and drive them with EL - throw in some templates. Let's use Apache Tomcat - no, Glassfish - no, WildFly. And put our code in CVS - no, SVN - no, git - no, GitHub. And we can script things with Jython - no, JRuby - no, Groovy.
It's non-stop churn every few months! And it never stops! Server-side code is utterly insane.
Idiot.
We prefer the term: dissociative identity disorder (DID).
Oddly enough the invisible hand of the marketplace has chosen to smack PHP-haters like you upside the head, and the highly visible cluestick is called "Wordpress". Get used to having dents in your skull, my friend. Nothing in its specific problem space is as easy to use and well supported as Wordpress is, and that's just objectively and quantitatively true regardless of the strengths and weaknesses of PHP.
Personally, I like PHP, but I'm still sympathetic to your position - because that same damn invisible hand keeps skullbashing me with a cluestick called "windows"... the good enough is the worst enemy of the best.
I do not think it means what he thinks it means. http://en.wikipedia.org/wiki/S...
Client-side is a mess. Everything needs to be built (at least) three times, once for the web, Android, and iOS. In the browser you have to content with JavaScript, browser API’s,CSS, and rendering differences.
if your application looks the same on a webpage as it does on a smartphone then YOU ARE DOING IT WRONG. Hell, if your application is on a webpage then almost assuredly, YOU ARE DOING IT WRONG.
If you are writing a desktop, tablet, mobile or server-side application, you can use Qt to do it all.
- desktop: OS integration, sound, graphics (transparently software or hardware based), multi-touchscreen support (for tablets)
- mobile: Android/iPhone ports, multi-touchscreen support, direct display buffer access and more.
- server: execute as a daemon, handling TCP/UDP directly, talking over D-Bus
On a side note: someone wrote black magic code and ported Qt to javascript. If it's run locally, it's ok but otherwise it's a huge download. Here are some demos like Tetrix
Anons need not reply. Questions end with a question mark.
In pure HTML5?
Show us.
If all users of Gmail were to switch from Gmail's web interface to Sylpheed or other native apps, how would Google make enough money to continue to offer Gmail? Google needs to find some way to keep Gmail financially afloat by either A. gently deterring users from switching to native apps full time, B. gently promoting some other Google service with a better-defined advertising mechanism, or C. charging for it.
This isn't an Abnormal Psychology website.
Take some more haldol and sit down.
I wish the term Schizophrenic wasn't used to desribe somthing, that you have no idea of what it really is. Unless you are Schizophrenic, you're only insulting people that are mentally ill. It's slander and prejudice. Choose your words wisely.
This may not be the best place bring up the topic at hand, but I owe it to Jono Bacon. He used the term in his pure voltage radio show, and was kind enough to apologize. I don't see this going away, but if a man of his callibre can try to change his choice of words in the future, so can everyone else.
A server developer can be delusional and think their particular pet technologies are the only ones in the world and that *everyone* is on board. The target users will be non the wiser. About the only aspect that he calls out that is fairly fixed is the notion that *EVERYTHING* must be http based (which I hate, the http protocol was designed around certain usage scenarios and it is atrocious for a lot of uses but it gets shoehorned into them anyway).
Meanwhile, on the client side, if you do want to hit 100% of the market and you have a moderately complex client to do, you may have to do IOS, Android, several different set top boxes (e.g. Roku), game consoles (PS3, Xbox), and Windows (to use netflix as an example).
XML is like violence. If it doesn't solve the problem, use more.
Almost every major framework now has MVC capability, JSON API capability, and package management to name a few.
But you can say the same thing about pretty much every well-used client framework. Most of them use some form of MVC now, or at least separate concerns... most all of them use JSON/HTTP to talk to servers now, most all of them have ways to extend with frameworks or modules or what have you.
I can't think of any server innovation that is not mirrored on the client side. That's why I can't see labeling both sides different, they have all advanced with modern programming constructs (and often very similar constructs).
The client-side is far from being as simple, as now there are many use cases that need to be accounted for.
I'll grant that is true, but it is NOT a programming issue. It's a domain issue. Try to build a server API for many different kinds of clients and you quickly get just as big a ball of yarn... and every server being open to API calls is currently The Future.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
Open and mature client technologies have always been a threat to MS's core business.
A good day when the SS lashes a chain around the neck of Barak Obama and drags him out of the White House and then kill him on the lawn and leaves the body to rott for all to see.
Ha ha
http://lazarus.freepascal.org/...
It just compiles to Linux, MacOSX and even Windows. And for all three you get a statically linked library. And in all three you get a native GUI with the GUI elements the user expects.
I haven't tried Android or Windows CE support, but they are claimed to work.
The article (which is shit, it's just the rambling of a web developer) says that you need to do development many times in different languages for each platform.
Yet C and even C++, real programming languages and not toy or hipster languages, will actually work everywhere and can satisfy all requirements : client-side, server-side, iOS, Android...
Even the cheapest desktop is capable of running a USENET server that could handle a full feed of every text-based newsgroup on the planet. (At its 90s zenith, USENET's text groups were a few gigabytes of transfer per day.)
Unless your satellite, cellular, or Iowa DSL ISP gives you only single-digit gigabytes of transfer per month.
When every ISP had its own NNTP server
I'm guessing there wasn't quite as much CYA mentality as it is now. The problem with edge storage of user-generated content is that ISPs don't want the liability of storing warez and CP on their servers. That or it just became unprofitable to pay an employee to run an NNTP server on behalf of users who aren't paying extra for the NNTP server. This raises the original question: So what business model should an ISP use to cover the IT and legal cost of running a server that caches user-generated content at the edge?
[Web CDNs have tended] to forget about the original lessons of USENET, and to reinvent it, poorly.
A CDN hosts only those files that a subscriber offers, and the CDN can terminate a customer's service if the CDN feels that the customer's actions have created an unacceptable liability risk.
How would you port your MP3 tagger to an operating system where all end user apps are written in JavaScript, such as Chrome OS or Firefox OS, which doesn't offer POCO or Qt because it doesn't offer C++ in the first place?
unless the platform maker let you write in C/C++ . If the platform vendor wants to lock things down that much then you're pretty much done.
If you're libraries have ports then you're in a bit better shape. The library does all the heavy lifting, and you have a skeleton of function calls, if statements and for loops to control logic. Most of the big libraries like Poco/QT see ports to everything that can take 'em. But again, if a platform vendor wants to lock it down to the point where everything's JavaScript then you're only option is wheel reinventing or ignoring the platform...
Hi! I make Firefox Plug-ins. Check 'em out @ https://addons.mozilla.org/en-US/firefox/addon/youtube-mp3-podcaster/
Xojo runs on Mac OS X, Windows, Linux, and WEB. It will soon use LLVM (be 64 Bit) and support native iOS development then Android. It is fully object-oriented and works with all the major databases.