Join 109,043 Programmers for FREE! Ask your question and get quick answers from experts. There are 1,780 online right now! We've got more than 500 tutorials and 2,000 snippets. Join and find out why Dream.In.Code is the #1 programming help community on the internet! Registration is fast and FREE... Join Now!
I just recently watched a video covering Google's Android and how the basics of it are setup from the Linux kernel up the stack to applications. That was a nice talk and everything seemed fine until it went to Q&A where the developers in the audience started attacking the speaker for about 20-25 minutes with "Will Android work with this? Will it work with that? Can I develop even more applications? Can I integrate this with that and put it on android flawlessly?"
It got me wondering, is the industry a bit too fragmented in your opinion? I mean we have a ton of computer languages all which are capable of doing the same thing. We have a ton of mobile applications on a plethora of mobile devices leading to bajillions of combinations of potential device setups.
To accurately field the questions the speaker had to know or have an idea about 10-15 technologies, most of which were niche market technologies, just to successfully answer how Android will work with them. And you know what? Each questioner was probably alone in the technology they were talking about. None of them were really talking about the same ideas or working on the same problems. Some were probably even working on their own proprietary language or technology and they wanted to throw that on top of Android.
Even one developer, a female mind you, started asking if Android was not already "reinventing the wheel" and just adding another option to the pool of technologies already out there. Sure, throw another technology on the barbie and let it do what other platforms can do but with a flashy name and maybe 1 or 2 absolutely unique features.
In my opinion it might sound even better to work on merging some of these technologies and cut our 100+ programming languages for instance down to 10 really solid well used. But also cutting down the now booming mobile device OS market down to 2 or 3 just to simplify the combinations a bit and keep it under 100,000 combinations.
Interested in what you guys think of that. Do you think the industry should start focusing not only creating unique technologies but perhaps merging a few together so that we can all get on the same page?
I feel a bit bad about replying with such a short post (compared to yours), but I think that diversity is one of the reasons I find the field of computer science so interesting. Having hundreds of ways to do everything might be inefficient, but I think that in the long run it will allow some kind of "natural selection" to take place in order to pick out the best technologies.
Well I see your point but what I see already happening is that only select technologies can work with other select technologies. C++ was built with the idea that it could interact with just about anything, but now with some of these other languages you need special software just to run the special software and only after then it will have a limited audience of other applications to work with.
Hopefully you are right and we are not going to be stuck with all these different programs and most of them not being able to talk to 95% of the rest of the industry.
Well it doesn't matter how many implementations of something we have on our hands, what are really important are international standards and adhering to them.
I don't want to turn this into a Microsoft bashing thread, but they've certainly gotten themselves into the spotlight recently about the whole ISO MSOOXML fiasco. Their history isn't too bright either. Most of the teachers in my school are against students handing in digital copies of their homework (I mean like essays and projects, things that it would make sense for) simply because of the incompatabilites between different versions of Microsoft Office and the fileformats they save in.
I read an article about how they are planning to support the real ODF standard, but I bet you a barrel of monkeys that we're going to see plenty of "incompatabilities" pop up between MS ODF and the ODF that the rest of the world is using.
Edit: If you're worried about C++ incompatabilities, use GCC and write code sticking to whatever the latest standard is (I don't follow C++). That's one thing I love about C/C++, that there are actual international standards that ARE NOT dictated by one single corporation. As much as I love Java, that's one thing that worries me about it.
This post has been edited by Tom9729: 29 Jun, 2008 - 12:09 AM
Really intersting topic! I'd say what Tom suggested, that via some kind of a natural selection a selected group of technologies will prevail. Some due to the lobby/money/marketing behind them, and probably a bit less (I'm a bit pessimistic in this view, see VHS/Alpha, Blue-ray/HD-DVD, etc.) due to sheer superiority. This has happened already in the past, just think of the plethora of "personal computers" in the '80-ies, the document formats, the different database models besides the relational one, the P2P systems, whatever. Also, some niche technology fields will always need their own tools, languages, methodologies. With the excess performance on our hands sometimes this can be bridged with translators, cross compilers, emulators, or virtualization, but probably it won't be alwaysy possible. The users of these technologies will always crawl out from under their rocks, and will be desperately asking the creators of new platforms, how much ork they'll need to make their thing work on it. Sometimes these special technologies are well worth the development, but sometimes they are just a nice example of the NIH (Not Invented Here) syndrome. It is not always easy to draw the line between the too. Finally, people simply love to do things differently. There is no way around it. About the multitude of languages/operating systems: a new thing can often easily cut off legacy chunks of bloat that are clogging the whole thing for the sake of backward compatibility, or fix a design decision that was probably right at the time but became a design fault (or at least just something uncomfortable) over the time, because of the evolution of other technologies (compiler technology-two phase compilers and forward declarations in C style languages, or the initial lack of try-catch exception handling in Symbian C++). So a new language or OS can greatly increase performance and productivity due to such things, but the old ones are quite reluctant to die out due to their user base. This will cause this fragmentation what we see right now, but I'd say that the useless crap will fade soon (to let other useless crap to turn up).
Finally about the standards dictated by one company. I think Java is a good example through the JSR system, that it can work. Also, it is needed, because if it would be forked in so many ways as Linux kernels, maybe J++ would have already derailed it into oblivion, or MS could have sabotaged the whole thing with it's usual Trojan horse practices.
So I'd say that such fragmentation is a good thing. Sure it takes more knowledge of the present situation to choose the best technology, but I'm sure it ensures that if you do take the time to evaluate your possible choices, you can save a great amount of work/time/money, that is a good thing (and you might need something else for a different task later). If something is useless for you, simply don't care about it. It does make the life of beginners in this field a bit more complicated, because they'd face the question what to learn, but as it was already pointed out on this board several times, usually the difference is really negligible between most languages, so after realizing that they hit a dead end, they could easily switch to something better.
I believe the industry is a bit too fragmented, and it can only get more fragmented as the years progress. Why might this occur you ask? Because the internet is united by smart people outsmarting each other. Sun, MS, Linux, .NET, DirectX, OpenGL, VB.
Person a complains, person b attempts to do something about a's complaint, a joins up with b, c decides a and b's work is crap and c then becomes a. I see a pattern emerging.
Sloth's epic post about the internet:
QUOTE
this is like people saying computers are for spreadsheets and pivot tables and nothing else. these are diverse systems that can be used for a wide range of things. you guys don’t hate the applications, you should all know this. you hate the way the general populace uses them, you all hate people, and it get’s a little rise out of you that the normal people out there are carving out their own little piece of this wild wild west.
we’ve all been out here on horse back, camping under the stars and dealing with the savages. but now the train tracks are getting laid down faster and faster and those townies in their big top hats and monocles, are headed our way. some of em are even carrying pocket watches, and they all get to do it so much easier than we had it.
the internets not just for nerds anymore guys. straps yourselves in, this ride is gonna be so fucking bumpy. manifest destiny is a bitch. don’t trade blankets with anyone.
Excellent topic Marty (as usual)! I think it may be a tad bit fragmented, but hopefully it isn't past the point of no return. I am going to feature this as I think it will generate some really good conversation
Also, some niche technology fields will always need their own tools, languages, methodologies.
You certainly have awesome points but what I think might be happening is that people are using the diverse specialized tools to create even more niche markets for themselves. I think it is also going to cause problems in the job market. Ever see a job posting where the employer is asking for experience in a ton of specialized tools that pretty much no one has ever heard about let alone actually had experience with?
Take it one step further these companies want applicants with experience so they can hit the ground running and not have to spend much time training. This puts pressure on applicants to say they have qualifications they don't, leading to inexperienced people in projects that they eventually get in over their head, screw it up, then it leading to the problem we have mentioned before about experts needing to fight through skepticism and have to do cleanup of someone else's mistakes.
As long as it never gets to the point where you have to talk to 5 different software vendors to get your database data to your web page we still have a chance.
I see your concerns, but I think this problem stands on many legs. As you pointed out there are already job advertisements, that would mention tons of technologies and even if they are part of the usual suspects it is not that likely that a developer is experienced right in that configuration. The better case is when these companies know what they are looking for, and they can guess the real knowledge of the applicant, and are able to train them where they are lacking. I've met a couple of places that could do this, and they were doing quite well. If those responsible for hiring the developers can't estimate their expertise well enough, then that is a management problem. I can imagine, that some people will try to sneak into positions with a well-crafted resume riding the waves of this fragmentation, and taking advantage of impatient companies lured by big salaries, but I think this would happen if there is only one technology on the market. If the skills are not part of the "usually looked after ones", then I'd make two distinctions: it is something the company has developed for itself due to NIH syndrome (less fortunate), or for keeping their employees around so they can't use their knowledge at the competition (even less fortunate), or maybe it is the niche where it actually makes sense. Anyway, in all cases training is usually provided by the company, because they are the only one that actually know anything about it. In the other case it is something that is not specific to the company, but not really wide-spread. If it is just picking up momentum, then only those will know about it who are interested in the field, so it is actually a good filter (also, fake experts are quite easy to spot). If it is something lingering around or dying out, then probably there are some leftover developers who are hiding in the shadows, and when the skill is really needed that much that the compensation becomes good enough to touch that thing again, they'll appear. Finally, I know that there are tons of libraries even for one language, but I'd say that the situation is not that bad as it looks for the first sight. There are common configurations, that are quite easy to spot, like the LAMP stack, or Oracle + J2EE, etc. If you are interested in an industry, you'll notice these trends. I don't doubt that this needs some planning and awarness, but how else would it work? I'd admit that sometimes it is worrying that this creates walled gardens: as your expertise grows in one such "configuration", the less likely you become to switch to another one, because you'd have to fall back to some lower level. I'd even attribute some of the big flames regarding which technology is better to the fear of some people that their decision was wrong and their skills won't be looked after soon, this even blinds them so much that they'll be reluctant to realize that they both have their respective advantages for different niches.
So I'd say, I am optimistic about this fragmentation. We have seen this in the past, and when it became too excessive, the problem was solved. A good example is graphics programming: there was a time, when all the VGA chipsets had to be programmed individually, there were some games that supported 5 or 6 of them, so there came Univbe to the rescue (and now we have DX and OpenGL). This fragmentation encourages competition and we are those who'll profit from it in the long run, even if it might look disturbing right now.
Finally, I think those with less or without formal education might be more vulnerable to this fragmentation. The curriculum of a good university would have some language,compiler, etc theory, that makes learning and evaluating other technologies easier (knowing why something was needed, what problems did it solve, how does it deal differently with some things, what field can use it better than the existing ones). Somebody who just landed in the middle of programming getting familiar with just one language, might be much more terrified by the emerging of new ones (and maybe less likely to make a good bet what to learn next) - I did not mean it as a general rule, just as some factors.
The topic is just on time. I think that such "fragmentation" really creates some hard-to-solve issues, like compatibility and unique standards, but this enables the actual user/developer to chose something he/she really likes. Why does someone chose a platform instead of another? The causes may vary (support level, working environment, usability or just the GUI), but the user choses something, that is closer to his/her general understanding of a product type.
As long as the "standards" have open specifications, I see no problem (other than causing slightly more work for a programmer).
It's the closed proprietary "standards" that change at the whim of a company that cause trouble.
Generally, it doesn't matter if the standard is open or proprietary. If it is well-planned and implemented in a good way - the users can apply it without any issues (even a proprietary one).