<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Schauderhaft &#187; vision</title>
	<atom:link href="http://blog.schauderhaft.de/tag/vision/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.schauderhaft.de</link>
	<description>Softwaredevelopment, Projectmanagement, Qualitymanagement and all things &#34;schauderhaft&#34;</description>
	<lastBuildDate>Sun, 05 Sep 2010 08:43:17 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Where are the High Level Frameworks?</title>
		<link>http://blog.schauderhaft.de/2009/08/16/high-level-frameworks/</link>
		<comments>http://blog.schauderhaft.de/2009/08/16/high-level-frameworks/#comments</comments>
		<pubDate>Sun, 16 Aug 2009 11:46:49 +0000</pubDate>
		<dc:creator>Jens Schauder</dc:creator>
				<category><![CDATA[Softwaredevelopment]]></category>
		<category><![CDATA[aop]]></category>
		<category><![CDATA[dsl]]></category>
		<category><![CDATA[paradigm]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[vision]]></category>

		<guid isPermaLink="false">http://blog.schauderhaft.de/?p=169</guid>
		<description><![CDATA[I became a java developer (and not a C developer for example) because java takes a lot of the pain away. I just love the garbage collector. Sure it can give you a hard time, but 99% memory is not an issue in the projects I am working on. The object oriented paradigm also made [...]]]></description>
			<content:encoded><![CDATA[<p>I became a java developer (and not a C developer for example) because java takes a lot of the pain away. I just love the garbage collector. Sure it can give you a hard time, but 99% memory is not an issue in the projects I am working on. The object oriented paradigm also made it way easier to write the big complex systems, enterprise applications seem to be these days. In this layers of abstraction we do loose a little performance, or actually a lot, but again: 99% of the time performance of java code is not an issue at all. Performance is controlled by network and database access.</p>
<p>So I should be pretty happy right? Well in the general sense actually I am, but as a developer, I have the feeling that I am operating on the wrong level of abstraction. A lot of the time I am working directly on the code level. Writing getters, setters, exception handling, logging. There are some areas, where the abstraction level moved considerable upwards in the last years. Persistence comes to the mind. Hibernate is pretty reasonable, although it has it&#8217;s problems, and it&#8217;s enemies. Another one might be rules engines, I haven&#8217;t tried those. But other then that &#8230;? Of course there has been progress. A lot of progress. We have hundreds of languages, many with very interesting features. We have a large choice of databases with innovative concepts to choose from, and of course a pletorea of java libraries for almost every purpose. We have IDEs so smart, I sometimes wonder if they are really just another piece of code. So what am I complaining about?</p>
<p>I think it is about time for the next paradigm shift. Why are we still coding objects? An example: I want to build the ubiquitous shopping system. I take a jar I found somewhere on the web to get started. Of course I have my own little idea, about how this thing should work, so I want to tweak the shopping cart a little. So what do I do?</p>
<pre>public class MyCart extends somebody.elses.Cart {
    public void setRealyCoolFeature() { ...</pre>
<p>But most of the time, this doesn&#8217;t work. Because the new attribute doesn&#8217;t get saved in the database. Or maybe it does, but the repository returns only Cart&#8217;s and not MyCart&#8217;s. The gui doesn&#8217;t show the new attribute, actually the gui of the component is for swing, but I want a web gui. No problem I can write that, but now I have tons of fireProperty noise in the code, that really nobody cares about. Of course it&#8217;s better than the other way round, because it is extremely tricky get fireProperty calls into a class without changing the source files.</p>
<p>Hold on a second I know what you are thinking: You fix that with a little AOP here, and this won&#8217;t be a problem if the component was cleanly designed in the first place. Agreed. But my point is: I want to use the concept of a shopping system. I don&#8217;t want to deal with technical detail like AOP, IoC and similar. Or from the perspective of the component provider: I want to code the concept of a shopping system, and I do not care, how the users want to store it, how they want to show it, and how they want to extend it. That is what I&#8217;d call a new paradigm.</p>
<p>Of course I am not the first calling for the next paradigm since OOP. Actually there are many alternatives out there on various levels: AOP, Functional Programming, Meta Programming on the very technical side. Business Process Modeling, Rule Engine, and Components pretend to operate on a higher level, but sometimes I get the feeling they&#8217;re just a glorified version of Basic. None of those come even close, to what I imagine. And I don&#8217;t even use drugs to get there. Still there might be a solution in sight. Imagine something along these lines:</p>
<p>If you write a component, you use a language that is much more expressive than java, possibly like groovy but two steps further and with a strong type checking (I&#8217;m a fan of strong type checking). In this language you specify the structure (the relationships) of you component. Using the equivalent of annotations on stereoids you specify things like transactional behavior, logging behavior, GUI representation, concurrency options, but on a very high abstraction level. For example for concurrency you don&#8217;t specify locks, latches and stuff like that, instead you specify data that is related and there for needs protection against concurrent access.</p>
<p>All this is not compiled into a single jar (or whatever we will call it), but actually ends up in separate ajars (Aspect Jars). So as a user, I can take the differnt pieces, and create a extension, specifying the various aspects  in the same way, thereby extending all the aspects I need to extend. This is possible, since the aspects are still separated, and not compiled in one big blob. And the original developer separated those, because it was the easiest thing to do.</p>
<p>The guy actually using the component, somebody else created, and extended be  me, uses the components in a high level DSL, that allows him to glue pieces together. For example he could specify which kind of order and invoice component should get created from the cart component. And although the three components come frome completely distinct developers, they would be joined automatically using domain information from the semantic internet. This joining would of course need some tweaking but it should give you a head start. I think this sounds extremely nice, doesn&#8217;t it?</p>
<p>Will it happen? Most certainly not. The description is to specific to fit whatever comes, yet way to vague for anybody to actually implement it. BUT I am pretty optimistic something along these lines will actually happen in the next 10 years. DSLs and AOP and new languages that allow Aspects to be written as easily as a for loop will be key players at it.</p>
<p>So if you are a genius with lots of time and a strong developer team at hand, get into contact with me to exchange ideas. If you just a stupid enterprise application developer as I am that needs a job for the next 30-40 years to come, get used to AOP, watch the new languages and don&#8217;t worry to much about concurrency.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.schauderhaft.de/2009/08/16/high-level-frameworks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Welche Bedeutung bekommt Concurrency für Enterprise Applications</title>
		<link>http://blog.schauderhaft.de/2008/06/12/welche-bedeutung-bekommt-concurrency-fur-enterprise-applications/</link>
		<comments>http://blog.schauderhaft.de/2008/06/12/welche-bedeutung-bekommt-concurrency-fur-enterprise-applications/#comments</comments>
		<pubDate>Thu, 12 Jun 2008 16:18:07 +0000</pubDate>
		<dc:creator>Jens Schauder</dc:creator>
				<category><![CDATA[Softwaredevelopment]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[Concurrency]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[vision]]></category>

		<guid isPermaLink="false">http://blog.schauderhaft.de/2008/06/12/welche-bedeutung-bekommt-concurrency-fur-enterprise-applications/</guid>
		<description><![CDATA[Wenn man sich auf IT-Blogs und Konferenzen tummelt ist immer wieder die Rede von Concurrency, und wie wichtig das in Zukunft wird. Fakt ist sicherlich das Moorsche Gesetz in seiner alten Form ist am Ende. Wir werden uns mit immer mehr Kernen in unseren CPUs herumschlagen müssen. Fakt ist aber auch: Datenbanken und Webserver mit [...]]]></description>
			<content:encoded><![CDATA[<p>Wenn man sich auf <a href="/2008/05/19/jax-08-sprachen-concurrency-security-architektur/">IT-Blogs</a> und <a href="http://jax2007blog.it-agile.de/2007/04/concurrency-past-and-present.html">Konferenzen </a>tummelt ist immer wieder die Rede von Concurrency, und wie wichtig das in Zukunft wird. Fakt ist sicherlich das Moorsche Gesetz in seiner alten Form ist am Ende. Wir werden uns mit immer mehr Kernen in unseren CPUs herumschlagen müssen. Fakt ist aber auch: Datenbanken und Webserver mit vielen Usern sind schon super parallelisiert. Bleiben die Clientrechner, und Webanwendungen bzw. Datenbanken mit nur wenigen Benutzern.</p>
<p>Ich denke im ersten Schritt wird das, was schon seit jeher zu den Best Practices gehört wichtiger: Lang laufende Aktionen werden in ihren eigenen Thread ausgelagert, damit der Benutzer nicht auf die Abarbeitung warten muss. Aber dies lastet die Prozessoren noch nicht besser aus, denn die lang laufenden Aktionen laufen lange, weil auf Ressourcen gewartet wird: Die Antwort vom Web Service, von der Datenbank oder vom Filesystem. Das ganze wird nur fixer, weil man auf drei Dinge gleichzeitig warten kann. Aber warten kann schon eine CPU mit einem Kern ziemlich gut auf ziemlich viele Dinge.Die eigentliche Frage: Was tun mit den andere Prozessoren / Kernen bleibt also. Ich sehe zur Zeit zwei Alternativen:</p>
<ul>
<li> Wir finden keine gute Antwort auf die Frage. Dies wäre in der Tat fatal, denn das Moorsche Gesetz treibt die gesamte IT Industrie! Warum soll ich mir einen neuen Rechner kaufen, wenn die Software so schnell läuft wie auf dem alten? Warum soll ich mir neue Software kaufen, wenn die auch nicht mehr kann als die alte, da sie die gleichen Ressourcen zur Verfügung hat wie die alte? Ich halte diese Bedrohung für durchaus ernst und wundere mich, dass ich diesen Gedanken noch nirgends so gelesen habe.</li>
<li>Wir tun komplexere Dinge. Der größte Teil der der Anwendungen, die wir schreiben ist doch erschreckend banal: Benutzer gibt Daten ein, wir schubsen die Daten von hier nach da, drehen sie auf links und schreiben sie schließlich in eine Datenbank. Wirklich komplexe Aufgaben wie Optimierungsprobleme oder Simulationen, anspruchsvolle 3D-Visualisierungen von Daten, stehen bei den meisten Entwicklern nur sehr selten im Pflichtenheft. Das hat zweierlei Gründe. Einerseits sind nur wenige Entwickler von &#8216;Enterprise Applications&#8217; in der Lage solche Probleme zu lösen, andererseits ist die Hardware schon mit den einfachen Dingen komplett ausgelastet. Aber letzteres wird sich ändern. Auf einem normalen PC werden wir schon bald ein Dutzend Prozessorkerne haben, die nicht richtig ausgelastet sind. Wenn wir dem Kunden neue Versionen unserer Software verkaufen wollen, müssen wir ihm zeigen, dass wir mit dieser Rechenleistung etwas anfangen können. Berechnungen und Optimierungen, die wir bisher als nicht handhabbar abgetan haben, und dem Benutzer überlassen haben, müssen wir uns krallen, in parallel verarbeitbare Algorithmen gießen, nett visualisieren und in die Anwendung integrieren.</li>
</ul>
<p>Daher meine apokalyptische Prophezeiung: Wer als Software Entwickler in 10 Jahren noch einen Job haben will, sollte hoffen dass Java sich zum nächsten Cobol entwickelt, und für Leute mit veraltetem Wissen viel Geld bezahlt wird, oder sie sollte sich schon mal an <a href="http://20bits.com/2007/05/08/introduction-to-dynamic-programming/">nicht triviale Algorithmen</a> herantasten.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.schauderhaft.de/2008/06/12/welche-bedeutung-bekommt-concurrency-fur-enterprise-applications/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
