Thoughts On the State of Web Development
rmoskal recommends his blog post up at Most Media on finding the right level of abstraction, Grails, and SOFEA. "[Three years ago] I was very excited about Apache Wicket as the way to develop line of business applications with a domain model, CRUD [create-read-update-delete] screens for maintaining the model, and in the most interesting cases, doing something else useful besides. I still like Wicket. It has, as its website says, a small conceptual surface area.' It reminds me of Python in that 'You try something it usually just works.' In many respects, though, Wicket seems to be at the wrong level of abstraction for the for the sorts of line-of-business applications described above. If your team is spending any time at all writing code to produce listing, filtering, and sorting behavior, not to mention creating CRUD screens and the back-end logic for these operations, they are probably working at the wrong level of abstraction. ... Recently I did a small project using Grails and was quite pleased. Grails uses groovy, a dynamic language compatible with Java, and is based on the proven technologies that I know and love well: Spring, Hibernate, SiteMesh, Maven, etc. ... I get all the power of the Java ecosystem without the fustiness and lack of expressivity of the core language (no more getters and setters, ever!)."
First, getters/setters are generated by your IDE of-course, so you never have to write them by hand, however, more to the point, I have avoided many various parts of the 'Java ecosystem', while still using that language to do all sorts of development and really, you don't have to use getters/setters. I use many Java classes as simple data structures, just like C-Gods intended, no getters or setters there, just public or protected fields.
You can't handle the truth.
This isn't really about web development in general but Java web development and writing getters / setters is the IDE's job.
Using Java for web development is like using a wrecking ball to hammer in a nail. Use something that fits the job better, like Zend Framework, Django or Ruby on Rails. In web development, time to market is everything. Build your application and hopefully you get a large user base. Then when performance is an issue, you should already be working on a rewrite that can incorporate something like Java on the backend.
As I've said before on slashdot, the open-source movement should look at creating a new GUI browser that does desktop-like and CRUD GUI's well. Forcing the e-brochure-like HTML-based browsers to act like desktop/CRUD GUI's is like trying to roll Pluto up Mt. Everest: people have kept trying to pull it off with AJAX and whatnot for more than a decade, but it's still kludgy, bloated, buggy, security-challenged, and version-sensitive.
It's time to throw in the towel and start a new tool and markup language.
Table-ized A.I.
Scala gives you most of the same benefits of groovy with the addition to being statically typed. The lift web framework is very nice (albeit poorly documented), especially with its ability to generate pain-free AJAX/Comet for you.
ps I would hardly call this article "the state of web developement." Maybe "the state of Java ecosystem web development", but even that seems a bit of a stretch.
Only Perl is true!
Futurist Traditionalism
Title of summary is wrong, its not about web development.
What is the purpose of this? Don't we want to go away from Java in web? It was slow back in the days, now its just yet another security risk that can compromise ALL browsers at once if Oracle/Sun screws up. And now some spin-off or whatever? No thanks.
What we really need is some kind of consistency between output of HTML/JS engines, as well as CSS, so that GUI "just works". There is nothing wrong with those languages/markups, just with the implementation. While I'm all for competition and browsers trying to be better at something from others, it seems to me that in this area they just should cooperate more. It was IE6 back in the days, now its all over the place with vendor-specific extensions, that instead of going first thru W3C, they just are added to the browser with -moz/-webkit/-whatever thats supposed to make it okay to do this? Or perhaps they want to take approach "Hey, we implemented X and its popular, can we force this into W3C now?", with I hope won't work very well for them.
IMHO, programming language wars are silly. The proof of the pudding is in what you can achieve with the framework of choice. After many years of observing the competitors to J2EE, I have yet to see a professional grade alternative to it.
There is no such thing as luck. Luck is nothing but an absence of bad luck.
It rocks until you need to support more than a dozen users. Then you need something like Java, which as proven to scale to meet any demand.
Just ask the folks at Twitter.
Mod me down, my New Earth Global Warmingist friends!
In Java, its a weakness about interfaces- you can't have a data member in an interface, so any interface needs to use getters/setters.
In most languages, its so you don't give direct access to internal variables. In C++, you can just make the data member public and assign to it like a normal variable. But then you can't protect what is stored there or do sanity checks. Or you can write a getter/setter to do so. And if you decide to change from one to the other, you need to go back and change every access everywhere- a pain. Some languages like C# provide syntactic sugar to allow you to use foo.bar=9 and have that call a function, but there's problems with this- its impossible to know when you're calling a function or not by inspection, so you can have bugs that are difficult to find by code inspection- = does not always do what you expect it to. I prefer writing getters and setters to that.
I still have more fans than freaks. WTF is wrong with you people?
Sooner or later ANY client small or large, will come up with a 'change' that will require going way down the level to the underlying language, because of the intricate and out of the ordinary way they will ask it.
moreover, rarely will the two changes requested in similar area by two different clients will be the same. every business has their own style of running things, and what they will ask of you will differ from each other. this is even valid for small ecommerce presences on the web. you cant imagine the number and variety of different stuff they may ask.
there has been a lot of framework talk and numerous frameworks put out up til this date, yet the biggest and strongest ecommerce software and community remains oscommerce, despite its aging code (no templating, html mingled with php and so on). clients who start with even different software (leave aside frameworks) eventually move on to oscommerce due to unequaled community support. (innumerable modules, modifications available for free, all the service providers - any payment, shipping provider - know and support it and have modules for it, very cheap development fees and so on).
the disparage in between the success of software like oscommerce and any such hyped framework that has been put out so far shows that, as developers and programmers, we shouldnt close in on ourselves and go about being above all, and programming for ourselves instead of end users. it just ends up in elitism, detached from the reality.
Read radical news here
Are the client-side data validations declarative or do you still have to use Javascript to make them happen?
It didn't take that many years to go from 0 users of HTML to where we are today despite the fact that most people didn't understand the potential at the time.
Or perhaps there could be two protocols available - one to support legacy sites and a new one specifically designed to facilitate web applications.
It would be great if you could have the most common AJAX-style transactions be available declaratively so that you could use them with little or no client-side scripting
Really, try it. You can leverage many existing Java-centric frameworks. Sitemesh, Spring and Hibernate are fast & stable. Grails takes the 'suck' out of using them. Rewrites are easier, since you are already 1/2 way to Java. Find the bottle neck, rewrite it in Java and away you go.
Think global, act loco
It seems heavily tied to C++ as your app development language. Scripting fans won't like that. Also, how it would work over HTTP is not clear. And, a GUI-Markup-Language would be the more popular and practical route, with imperative programming only around the edges for the custom stuff not handled by the markup language. If somebody put a markup wrapper around QT and worked out how it functions over HTTP, then you may have something.
Table-ized A.I.
They took our jobs!
Almost most IT and Web Development jobs have been outsourced to third world nations.
They took our jobs! Duurkee duuuurr!
Remember, Slashdot does not have a -1 disagree moderation, and no, troll, flamebait, and overrated are not substitutes.
It was documented at http://highscalability.com/scaling-twitter-making-twitter-10000-percent-faster that a language change would have provided a 10%-20% speed increase, while architectural changes that Ruby on Rails could easily accommodate would provide with them with increases of 10,000%.
I've been using this lately, and it beats the crap out of anything else I've seen. It _feels_ like I'm writing a swing app, but it's ajax enabled without writing javascript.
And since it keeps _all_ the logic (even loops to generate tables or bullets) inside java code, refactoring is trivial. I will never go back to a framework with a separate templating language again (I'm sorry, Django!).
!
In Soviet Russia, articles before post read *you*!
Except that it was not documentet at all. It was just stated as a fact with absolute nothing to back it up. Aka an analysis pulled out of his a**
Rails? Been there. Grails? Done that. Both are decent. Rails is very good, but the abuse of open classes gets old quickly. Grails is ok, but it's really just a thin veneer over a complex mix of Java projects, and God help you if you run into any problems, because you'll be dealing with a stack trace that's 1000s of lines long, and you be troubleshooting these underlying complex java libs. For me, the play framework (http://www.playframework.org) is the best Rails-like approach on a Java platform. It stays very close to rails, so if you know rails learning it is easy. It's very pragmatic and very fast. It doesn't require a compile step to see your changes. It just works. Best of all, the code is clean and easy to troubleshoot. I suggest you check it out.
1. If the app needs that, it can be built without a whole lot of complexity. Abstracting it so that it can just be applied is a lot more complicated and bravo to Java for having that. 2. Single Sign On is not a complicated process. I worked as a J2EE architect and PHP developer for a telcom company a few years back. The java only team implemented their "standards based" single sign on system that was marketed by the J2EE vendor as doing all that and a bag of chips. Took forever to get setup, constantly had issues and was nowhere close to as good as advertised. Eventually the VP came to our little web team of PHP + a specialty guys (J2EE, .NET, and Perl) because our stuff actually worked when we wrote it. We replaced the ENTIRE system with a from scratch SSO solution across 18 different internal and external sites/applications in under 2 weeks. You know why?
Because J2EE talks a big game and has a whole lot of giant books but when it comes time to deliver it comes up short OVER and OVER and OVER again. It's going to be behind schedule, over budget, and under-functional 9/10.
3. Yes. You can.
Do you have any idea how much money corporations throw away on J2EE Application Servers to get that functionality built in? 6 figure numbers minimum.
Do you have any idea how much you need to pay for the annual salary of a good server admin? Usually less than that.
Do you have any idea how much time it will take for a good server admin to set that up for you? 2 weeks to a month so you can use it forever.
Session failover? Really? If you've got a multi-server app running it better darn well failover or you've written a POS app. Again, not that complicated to implement in less than a day.
4. Ah, the dream. It always sounds so good and yet, never really works that way. Great marketing pitch though.
5. Again, sounds good. J2EE app servers are very good for that, however, paid app servers for a lot of other languages will give you detailed trace modes for exactly that reason.
Getting a vendor to support you is a great idea too. It's actually more of a testament to out-sourcing than anything else though. By depending on a vendor to support their application, you're basically just paying to depend on their programming team, documentation, and training processes instead of yours. If you're trying to figure out if it's a server issue or an issue with the application that you've written in house, I hope you've already got the tools available to trace those down.
Finally, all this aside, I was a java guy before. Completely bought into all of the talk about ideal architecture, standards, "enterpriseyness", etc. I literally had the "I can't believe anybody would try to use anything but Java...it solves everything" mindset.
Then I saw it in practice and reality is far from what's spec'd on paper. For one thing, J2EE is serious overkill for 99% of applications and that is very important. When people get into java, they want to do EVERYTHING in Java. This is where most of the "standardize on a language" people come from. If you try to do everything a company needs in java, the company is going to simply hemorrhage money.
Additionally, the beauty of the web is that through web services, REST, and API's everywhere it's easier than ever to use the right tool for the job. J2EE is a swiss army knife. You can hammer a nail with it, but it will take forever and your fingers will get bloody. Use it for heavy lifting backend work if you need to and then just let everything else talk to it via a web service. It's one of the most effective ways to take advantage of Java where it's needed and to not use it where it's inefficient to develop and not cost effective - aka, web apps.
One of Java's biggest flaws in the world of more and more client-side web apps is the save + build + war + deploy to app server + refresh + compile JSP at first runtime that takes absolutely forever. In other languages that are more suited to the web (PHP, Python, Ruby, Perl) you can simply hit save + refresh.
When you're
"Don't teach a man to fish, feed yourself. He's a grown man. Fishing's not that hard." - Ron Swanson
Web development has expanded into a very large and exciting platform for content and applications, both on the server and client.
Still, every time I open an article about it, all I see is a developer who's tortured at the thought of generating endless CRUD forms and writing elaborate explanations, why he had no choice, *no choice* at all, but climb high up on the abstraction ladder, so that he can do basic validation in cute one-liners.
That's great, but that's just a minor fraction of what web development constitutes today. The vast majority of those prefabbed CRUD frameworks do horribly at handling load, scaling across servers, hand-tuning the details to the customer's preference... and well, they do horribly at anything but CRUD. The web is more than CRUD and I do feel bad for the developers who do it for such lengths of time, they get accustomed to the false idea that this is the entirety of what web development is all about.
I would not call the interface mechanism a weakness, interfaces come straight from eiffel and are contractual "interfaces" in a sense that they allow a loose
coupling of classes while still forcing you to some standard which reflective mechanisms do not. Interfaces are an awesome mechanism
for certain things.
Javas problem in this are is not the interface, they are heavens sent it is the lack of a real property mechanism. True you dont write setters and getters anymore, but something is wrong if the average class has about 1/3rd of its code dedicated to setters and getters. Given that javas goal was to enable readable code the setters and getters are clear contradictory to this goal. I hope now that Oracle is at the helm this is finally recognized as a problem.
(Btw. I have been programming with java since version 0.7)
I know them back from the good old TurboPascal/Delphi years, properties never really have been an issue . :-(
This is one thing I have been lacking from java since 0.7
I personally think the sideffects of having endless getters and setters in the code is worse than the sideffects of applying a property wrongly.
Btw. I do not particularily like the auto propertying languages like Groovy do.
I personally prefer to mark instance variables as properties.
Is it just me or is software design generally to difficult, you just should define your system in uml with all rules in place and then generate the code.
The problem is all this fails usually in detail, where you have to deal with platform specific issues, client specific issues, rules you cannot cover in the description language, deployment szenarii, existing infrastructure, whatever you name it.
This is a mismatch of ui paradigm. Ajax is used to enable rich client interfaces where the back button simply does not make sense anymore unless you save a continuous application stage (which again is not possible with ajax due to its non continous flow)
The limited programmability of the back button does not help there too much.
On the other hand the back normally is used as a document specific buttom which should help the user to jump back into the "DOCUMENT" history
which a rich client app almost never is, because you leave the document level.
As long as your application is document centric there is a way you can enable back even in ajax, but as soon as you leave the domain it does not work anymore usabilitywise.
The problem starts when people get a rich client application in a browser and suddenly expect that the back button still has to work the way they think it should (which they do not really know how to also, but it should work because it is there)
No one expects a back button in word or photoshop, but if they would be in the browser they suddenly would scream for it.
And no back is not undo in this case although it comes close.
I think so too, Wicket is a really nice webapp framework, probably one of the best there is, and since it limits itself only to the ui aspects you can use whatever the entire java ecosystem provides in the backend area, which is a lot. I am not sure if moving to an abstraction like grails provides really will make him happy, but I have yet to use grails (although I work with lot of groovy)
I only can see the auto scaffolding being a timesaver for him, outside of that he just replaces one language with the other (you also can do wicket in groovy)
and maybe a proven work environment with another one.
And seriously auto scaffolding can be done with a handful of templates and a few hours of code yourself. I did that years before Rails hyped it into oblivion for an application where I generated about 60% of it with the scaffolder. But that does not releave you of the rest of the gruntwork and that you have to deal with the nasty web layouting.
As a Java/C/RPG programmer, with 10 years experiance... I have to say, I don't have the foggiest what you're wittering on about!
Btw. interfaces do not prevent not to have real properties, you could use a special property keyword to push them into interfaces without having to revert to endless setters and getters.
You only can make rails scalable by going into the java domain even by just moving over to jruby to get threading ... but even then rails follows patterns which have their limits the more you need scalability the more you have to move away from what rails provides ootb and the less you save time.
But in the end, scaffolding is the only real timesaver there, and rails has no monopoly in this area, and I would not even call a scallfolder too much of a timesaver it saves some time for the standard coding frontiers, but in the end, you still need to layout every page there is (although you can cover a lot of common ground with CSS) and the special cases have to be hardcoded and there you are locked into the boundaries of rails.
Some languages like C# provide syntactic sugar to allow you to use foo.bar=9 and have that call a function, but there's problems with this- its impossible to know when you're calling a function or not by inspection, so you can have bugs that are difficult to find by code inspection- = does not always do what you expect it to. I prefer writing getters and setters to that.
If you're using getters and setters for all field access, then you're not any better off than seeing assignment to a field in C# - you still don't know if those methods you call are trivial (just return/set the wrapped field), or whether they do expensive computations.
The whole point of C# properties is that, in most cases, those getters really are trivial and field-like. In fact, Framework Design Guidelines (the de-facto standard API style guide for .NET) say that you should only use a property when it doesn't perform any extensive computation, and when the getter is a pure function, and Get.../Set... methods otherwise, so in .NET this very distinction is actually used to communicate intent from API designer to developer.
With the amount of abstraction in software development these days, very few people seem to really know what they're doing anymore. This should concern you -- if it doesn't, you haven't thought about it enough yet.
We regularly see new exploits that affect systems that have been live for years, oft-times spanning multiple major versions and platforms. In retrospect these flaws are often usually painfully obvious, but because they have been buried in the layers of sediment of "best practices", "boilerplate" code and underlying platforms, they aren't seen. At least, not until a curious or malicious mind starts poking around.
While this is in part a problem with QA, the deception of abstraction is that it provides a Black Box that is very easy to trust. This affects developers as much as QA.
Are we really wise to keep building on these layers of abstraction? Toolkits on top of frameworks on top of virtual machines on top of operating systems on top of hardware -- even device manufacturers can't keep their locked-down devices from being rooted in a matter of days, sometimes even before release. While many of the Slashdot crowd laugh because there is a sense of social justice in seeing DRM broken, the same exploits may some day be used against systems we rely on. I don't consider myself a fearmonger, but I wouldn't be surprised to see significant digital infrastructure fail at some point, either due to malicious intent or simply instability, at some point in my lifetime. Poor software quality hurts us all.
I realize that I sound like an old man yearning for the better days, but I learned to program in assembly on 8088s, and I knew exactly what my programs were doing. I'm not saying I want to go back to that, but the idea that most developers these days don't even understand memory management or garbage collection blows my mind. Asking for a new language because getters and setters are too much of a hassle? Somebody get this kid a lollipop, please.
I read the article (no, I'm not new here) and the author's main point, emphasis original, is this:
Where does he draw the line at "wasting time writing code"? This is exactly the mindset that leads us to buffer overruns, SQL injections, and many other problems which should not make it into production software. He wants his developers to abstract as much as possible, but code reuse all too easily leads to blind acceptance and a failure to understand what is being imported. If he trusts that all those acronyms on the blog post he wrote are bug-free, then I would hate to be one of his customers. Not that there seems to be many categorically better options available.
In the end, I think we need to abandon the cycle of "software bloat to more powerful hardware to software bloat..." and figure out what we can do with what we have. Good grief -- look at CUDA! We have orders of magnitude more processing power in a single video game console than all the world's computers before World War II, and available memory is simply insane. Take a look at what Farbrausch has done, and you will see what dedicated focus on efficiency can do.
Stop being lazy, understand what you are doing, understand what you have available, and use it well.
"I still have the problem I complained about a few years ago: the problems that arise from mixing client side and server side markup in the same artifact"
Someone needs to start using haml.
I'm a bit confused.
It's 2010 and we discuss a java framework as if it represented "the state of web development"?
You have heard about rails and django, right?
Thanks! Didn't know about that.
I've since updated it, but it doesn't seem like there's any way for me to edit the original comment.
"Don't teach a man to fish, feed yourself. He's a grown man. Fishing's not that hard." - Ron Swanson
1. If the app needs that, it can be built without a whole lot of complexity. Abstracting it so that it can just be applied is a lot more complicated and bravo to Java for having that.
2. Single Sign On is not a complicated process. I worked as a J2EE architect and PHP developer for a telcom company a few years back. The java only team implemented their "standards based" single sign on system that was marketed by the J2EE vendor as doing all that and a bag of chips. Took forever to get setup, constantly had issues and was nowhere close to as good as advertised.
Eventually the VP came to our little web team of PHP + a specialty guys (J2EE, .NET, and Perl) because our stuff actually worked when we wrote it. We replaced the ENTIRE system with a from scratch SSO solution across 18 different internal and external sites/applications in under 2 weeks. You know why? Because J2EE talks a big game and has a whole lot of giant books but when it comes time to deliver it comes up short OVER and OVER and OVER again. It's going to be behind schedule, over budget, and under-functional 9/10 times.
3. Yes. You can.
Do you have any idea how much money corporations throw away on J2EE Application Servers to get that functionality built in? 6 figure numbers minimum.
Do you have any idea how much you need to pay for the annual salary of a good server admin? Usually less than that.
Do you have any idea how much time it will take for a good server admin to set that up for you? 2 weeks to a month so you can use it forever.
Session failover? Really? If you've got a multi-server app running it better darn well failover or you've written a POS app. Again, not that complicated to implement in less than a day.
4. Ah, the dream. It always sounds so good and yet, never really works that way. Great marketing pitch though.
5. Again, sounds good. J2EE app servers are very good for that, however, paid app servers for a lot of other languages will give you detailed trace modes for exactly that reason.
Getting a vendor to support you is a great idea too. It's actually more of a testament to out-sourcing than anything else though. By depending on a vendor to support their application, you're basically just paying to depend on their programming team, documentation, and training processes instead of yours. If you're trying to figure out if it's a server issue or an issue with the application that you've written in house, I hope you've already got the tools available to trace those down.
Finally, all this aside, I was a java guy before. Completely bought into all of the talk about ideal architecture, standards, "enterpriseyness", etc. I literally had the "I can't believe anybody would try to use anything but Java...it solves everything" mindset.
Then I saw it in practice and reality is far from what's spec'd on paper. For one thing, J2EE is serious overkill for 99% of applications and that is very important. When people get into java, they want to do EVERYTHING in Java. This is where most of the "standardize on a language" people come from. If you try to do everything a company needs in java, the company is going to simply hemorrhage money.
Additionally, the beauty of the web is that through web services, REST, and API's everywhere it's easier than ever to use the right tool for the job. J2EE is a swiss army knife. You can hammer a nail with it, but it will take forever and your fingers will get bloody. Use it for heavy lifting backend work if you need to and then just let everything else talk to it via a web service. It's one of the most effective ways to take advantage of Java where it's needed and to not use it where it's inefficient to develop and not cost effective - aka, web apps.
One of Java's biggest flaws in the world of more and more client-side web apps is the save + build + war + deploy to app server + refresh + compile JSP at first runtime that takes absolutely forever. In other languages that are more suited to the web (PHP, Python, Ruby, Perl) yo
"Don't teach a man to fish, feed yourself. He's a grown man. Fishing's not that hard." - Ron Swanson
I'm much more upset about the lack of innovation in the way that people interact with computers. I know, Rome wasn't built in a day, but it seems like our OS could at least have the graphic appeal of say, Quake 2. Our Desktop is still so flat and limiting, and online collaboration is still so hokey and primitive. All this could be fixed, and largely for free if based on currently available FOSS. Instead we're cloning Windows XP with a prettier menu shade. WTF?
I'd like a 3d online space where my avatar can stand in the rustling grass of a windy prairie. In this environment, are a variety of nearby locations: A Desk, a Chess board, a poker table, a coffee table, a doorway, and a Super Nintendo. This environment could then be populated real time with the avatar of anyone else online at that time, with instant VOIP in 3d positional audio. In addition, the face of their avatar could be exactly modeled real time from a webcam image of the actual user's face. In this environment, either avatar can then interact with any of the aforementioned locations. Choosing to interact with the Desk would bring up an Windows XP clone, or a Windows XP Virtual Machine. Both Avatar's could use the desktop at the same time (by password invite, for avatar's from a separate IP as the host), real time, and continue their VOIP, and also have an optional skype cam pic up real time, directly from the 3d world. A simple key press would then exit back into the 3d environment and leave the other options (ESC). The Chess Board would work as a regular chess game, online, and with your opponent either being their webcam image, or their avatar with webcam mimicked facial expressions and jaw movement. The Poker Table would act much the same way, and any card game would be possible, complete with rules, and chips, etc.. The Coffee Table would have Digital Publications, Blogs, and other News and Information sources, directly updated real time from the Internet. The Super Nintendo would open an emulator locally and remotely, so both avatar's could play a multiplayer Super Nintendo game online, again, possibly with webcam images up simultaneously. The doorway would open an FPS as preferred by the local host, and I would have mine set to a customized Urban Terror, complete with 3d positional VOIP with whatever Avatar I walked into the doorway with.
This "Dream OS" would also optionally backup it's user files and information on several different computers real time over the internet, maintaining a backup of all your files and information on a distant machine, like your brother's, or cousin's. This would ensure that no matter you logged in, in the world, provided one of the machines was online with your backup information, you could get online and use your computer as normal from any computer in the world, including newer cell phones.
While we're at it, my dream cell phone would run this OS, and have an android mode for on the go travel, but when plugged into a USB charger, it would automatically work with a USB mouse, keyboard, speakers and Monitor, and then act as a regular computer. This cell phone would also have a front facing camera, for Skype like chat on the go, provided there's nearby wifi, or enough bandwidth. While on the road, this cell phone would act pretty much line a Droid, or a MyTouch, or a Nexus One.
Somebody build a few of these and send me one.
I hold very few opinions. I hold information based on observation and fact. If you wish to disagree, please use facts.
I have no citation here, but I suspect twitter was well beyond "a dozen" users before they started feeling whatever pain they said Rails was behind.
Before you design for reuse, make sure to design it for use.
In Java, its a weakness about interfaces- you can't have a data member in an interface, so any interface needs to use getters/setters.
Not true if the field is declared static.
Most people can't be an expert at all things, it is usually poor practice to attempt to implement all things yourself as most often those that wrote the library know better what they are doing. Sure if you are perfect and have infinite time doing what you propose makes sense, but it is almost always faster and usually safer to trust that the writers of a library know what they are doing.
Do you wish to write your own sort algorithm? Your own SQL interface? Your own filtering implementations? If so that I would hate to be your employer as you will be spending much more time writing less efficient code that probably has more exploits than some mouth-breather that just used the default libraries.
I understand your point, but abstraction is really important, an electrical engineer could never design a computer if he had to worry about what every transistor in his circuit did, he trusts that the amplifier provided works more or less as specified the same with the same with the phase detector and the variable oscillator. If he were to try to build it from transistors, (or worse from dopings in silicon) he would never get anywhere, the abstractions allow him to function, building something off the shoulders of those that created the various parts and trusting that they did their job well. It isn't perfect, but it is better than everyone starting from square one.
I'm commenting on developers in general, not just my preferences. And the use of markup languages is not just about making things "easy", but largely about making it easier to use other languages to generate and control GUI's. If your shop already specializes in language X, you don't want to have to switch to language Y to start using or converting to a new tool.
Table-ized A.I.
but there's problems with this- its impossible to know when you're calling a function or not by inspection, so you can have bugs that are difficult to find by code inspection- = does not always do what you expect it to. I prefer writing getters and setters to that.
Worse, it gives people the "feeling" that they're not doing anything except copying or compariing a value, leading to code like "for (Obj in ObjArray) { if Obj.X = 1 || Obj.X = 2 || (Obj.X > 10 && Obj.X 100)". People tend to assume that because it's so transparent, they're just accessing in data member. In reality, you have *no* idea of what that lookup is doing in the background - it could be refreshing from a remote server, or performing a complex calculation. At least with get/set* you are given some notion that there may be functionality attached, and you tend to be a little less careless.
When you're debugging code and you see
foo.bar=7;
You assume that you know what = does. It sets the value. With C# style properties, you cannot assume this. It *should* be what it does, with the possibility of throwing an exception on a bad value, but it isn't assured. It can be very hard to find this kind of bug by inspection, because you'll never think "Does = really mean ="? The only way you'll find it is by luck or by stepping through in a deugger, which isn't always possible/convenient. And I don't know about you, but I fix more fo my bugs via inspection than by debuggers.
Now you can argue that any code which does that is bad code and abusing the feature. I'd probably agree. But there's an awful lot of bad code out there in the world, I'd rather have it clearly showing that this is not a normal equals but instead is calling a function. Its more verbose but it's also clearer as to what it's actually doing. I really don't care about extra verboseness when it leads to clarity- more words/lines but clearer code is better than terseness.
(Side note: you can get into similar situations using C++ with overloaded operators. But its less likely to occur, since you can't overload individual fields but only entire types.)
I still have more fans than freaks. WTF is wrong with you people?
The idea of interfaces in general doesn't prevent data members (and C++ does this- just make a pure abstract class). Java however doesn't allow data members in interfaces as a language design decision. Thus if you need data in an interface, you need getters/setters.
I still have more fans than freaks. WTF is wrong with you people?
I washed my brains afterward. Ick.
Please do not read this sig. Thank you.
Man, what happened to the moderators? Are they supplied by 4chan idiots?
I can’t even imagine what could possible make anyone mod that as flamebait... it boggles the mind.
Envy? Or just plain retarded dickishness? Whatever. Those people just make themselves look like idiots.
By the way: How about showing the names of whoever moderated your comment? You know, so people have to look their victims in the virtual eyes.
Any sufficiently advanced intelligence is indistinguishable from stupidity.
This original post was talking about SOFEA and SOUI as if they are living things. But a little research shows they are dead as acronyms, anyway. I think really these concepts have become mainstream, at least in relation to SOA. And so they become anonymous concepts. But we do need a way to talk about these details and advance the status quo. So, how about it? Point us to discussions/acronyms/sites that talk about what the state of the art is in building clients for services. At the moment that would be some in depth way to use JSON and JavaScript to render a UI on top of business services, I think. But it's all up for debate! Cheers! The Captn...
The advantage probably was on slashdots side, since using ajax saves a load of traffic because only partial document contents are updated.
But using Ajax not necessarily means you have to avoid the back button, you can program it to behave correctly, at least for most modern browsers. Although the approaches are somewhat hackish they normally work well enough.