# Fragen zur richtigen Umsetzung eines Projektes



## ---> (6. Jan 2016)

Sehr geehrte Community,
ich habe Probleme bei der Programmierung meiner App.
Unten habe ich die App, meinen Wissenstand
und die Probleme und Fragen die sich ergeben haben kurz erleutert.

Grundsätzlich möchte ich ersteinmal eine Beispielapp programmieren.
Ohne sich groß Gedanken über das Design oder die Benutzerfreundlichkeit zu machen,
würde ich gerne ersteinmal eine Desktopanwendung, für Windows (.exe), programmieren,
die aus einem Editor besteht, in dem Texte und Bilder eingefügt und formatiert werden können.
Der Editor soll dan eine Datei erstellen, die Automatisch, neben dem lokalen Speichern,
auch auf einen Serveranwendung hochgeladen werden kann.
Eine App, für Android, die mit einer universellen Platformübergreifenden Technik
(HTML/Javascript mit PhoneGap oder z.B. C# mit Xamarin) programmiert wude
und in eine Native App umgewandelt worden ist,
soll die Datei von dem Server herunterladen
und dargestellen.

Grundsätzlich ist dies ja schon sehr Umfangreich.
Meine Kentniss beschrenken sich leider auf die grundätzliche (Funktionsweise von Computern)
und von Programmierung, auf Java, bis zu einem Gewissen Grad auch für Andoid,
auf die Grundlagen der Datenbankenprogrammierung mit MySQL
und die "Webseitenprogrammierung" mit HTML und CSS.
Ich habe bisher noch keine Desktopanwendungen (außer mit Java) programmiert.
Ich habe auch noch nichts mit Servern zutuhen gehabt (mit der Entwicklung für Server)
und ich habe auch keine Web-App programmiert.
Ich bin aber nicht abgeneigt etwas neues zu lernen,
ich habe auch verhältnismäßig viel Zeit
und würde es in kauf nehme die nächste Zeit ersteinmal zu lernen
und noch nicht mit der Umsetzung meiner Projekte zu beginnen.

(1) Ich würde Grundsetzlich mit dem Programmieren des Editor beginnen.
Als erstes stellt sich mir die Frage
welche Programmiersprache für Windows am besten geignet ist (1.1)?
Ich habe mit Java und Windows keine guten Erfahrungen gemacht,
zumal ja immer das JRE benötigt wird.
Da ich mich schon immer mit einer anderen Sprache beschäftigen wollte
ist dies wohl durchaus ein richtiger Zeitpunkt.
Meine zweite Frage ist, auf was ich mein Augenmerk richten soll (beim erlernen der Sprache),
wenn ich vorhabe einen Editor zu programmieren,
der automatisch eine datei erstellt die auf einen Server hochgeladen werden soll
und von einer Web-App dargestellt werden soll (1.2)?
Außerdem stehen hierzu ja verschiedene Datentypen zur verfügung,
(HTML, PDF, RTF und XML standen konkret im Raum),
welcher ist eurer Meinung nach am besten geeignet
und schond auch das begenzte Datenvolumen der mobilen Geräte(1.3)?

(2) Außerdem würde ich nun gerne eine App programmieren
die ohne großen Aufwand auch auf anderen Plattformen
zum laufen gebracht werden kann
und die die Datei darstellt,
die von der Desktopanwendung erstellt wurde.
Hier stellt sch die Frage nacch der Technologie.
Ich könnte z.B. eine Web-App mit HTML/ JavaScript erstelln
und sie mit PhoneGap in eine Native App umwandeln
oder genauso mit C# und Xamarin.
Welche Technologie ist eurer Meinung nach am besten geignet (2.1)?
Gibt es auch Möglichkeiten eine Platformübergreifende App zu programmieren
ohne Entwicklertools wie PhoneGap zu verwenden (2.2)?
Was mache ich eigentlich wenn meine App ein Widget haben soll
und es sich um eine Native App handlt, die aus einer Web-App erstellt wurde,
ist auch dies möglich (2.3)?
Wie funktioniert eigentlich Web-Apps (2.4)?
Handelt es sich quasie um interaktive Webseiten,
die auf dem Android Gerät dargestellt werden (2.5)?
Ist es möglich auf z.B. die Sensore des Gerätes zurückzugreifen
oder die Bildschirmgöße herauszufinden (2.6)?
Auf welche Technik muss ich zurückgreiffen,
wenn ich ohne großn Aufwand eine App für Windows erstellen möchte (2.7)?
Wie abhängig bin ich von dem Tool das die Native App erstellt (z.B. Phone Gap) (2.8)?
Verändert es (das Tool) meine App und sammlet Daten über mögliche Nutzer (2.9)?
Welche Alternativen gibt es
und kann ich auch ohne Toll aus einer Web-App/ C# Anwendung eine Native machen (2.10)?
Kann ich selber einen Browser (mit Java) für Android programmiern,
der meine lokal gespeicherte Web-App darstellt (2.11)?
Oder ist eine Native App mit Java die bessere Wahl (2.12)?
Wie viel Aufwand macht es eine zweite App für Apple Geräte (oder eventuel Windows),
zu programmieren wenn ich schon eine mit Java für Andoid habe (2.13)?
Kann ich Java Apps auf Apple Geräten zum laufen bringen (2.14)?
Welche weitern Möglichkeite gibt es für platformübergreifende Apps (2.15)?
Welche wie geghe ich mit verschiedenen Android/Appple IOS Versionen um (2.16)?
Kann ich die selbe Sprache für die Platformunabhängige App
und die Desktopanwendung verweden (2.17)?

(3) Nun muss "nur" noch die Datenübermittlung mittels einer Serveranwendung realiesert werden?

Kneitzel hat mir nettwerweise folgendes geraten:


kneitzel hat gesagt.:


> Also wie bekommen Apps dynamische Daten?
> - Indem sie sich zu einem Server verbinden und diese Daten über ein definiertes Protokoll herunter laden. Welches Protokoll dies ist, ist dabei erst einmal egal. Ein Entwickler kann sein eigenes Protokoll entwickeln oder ein bestehendes verwenden. Viele Anwendungsbereiche haben bereits Protokolle, die sich bewährt haben. Für Emails gibt es SMTP, POP3, IMAP... Chatserver können das IRC Protokoll nutzen, Newsserver haben NNTP., ....
> Wenn man keinen Spezialfall hat und auf ein bestehendes Protokoll gehen möchte, dann kann man sich überlegen, was man statt dessen möchte. Es gibt ein Rahmenwerk, welches sich Web Services nennt. Das ist wie ein Webserver nur eben speziell für automatische Abfragen gedacht. Darauf kann man sehr gut aufsetzen, um seine eigenen Interfaces online zu bringen und man muss nicht mehr das Rad neu erfinden. Die Services beschreiben sich auch selbst und es gibt dann z.T. Tools, die für einen bestehenden Webservice den notwendigen Code direkt schreiben.



Auf was soll ich mein Augenmerk richten wenn meine Desktop-Anwendung Daten hochladen,
und die App Daten herunterladen sol (3.1)l?
Welche Technologie/ Protokolle soll ich für die Datenübermittlung zwischen PC - Server
und Server - Smartphone nutzen (3.2)?
Wie soll ich die Datenspeicherung/ Datenbanken sowol auf dem PC,
als auch auf dem Server und dem Smartphone realiesiern (3.3)?
Kann jemand auf die von Kneitzel beschreibenden Web Services
und die erwähnten Tools näher eingehen (3.4)?
Was gibt es über Serveranwedungen zu wissen (3.5)?
Gibt es ein Buch, ein Video oder eine Internetseite
in dem/ auf der näher auf solche Themen eingegangen wird (3.6)?
Wo kann ich einen Server hosten,
was gibt es dabei zu beachten(3.7)?

(4) Kennt ihr Beispiele, Beschreibungen, Quellen, Videos, Erleuterungen, Dokumentationen,
Videotrainigs usw. die näher auf meine vielen Wissenlücken eingehen (4.1)?
Wie kann ich mir das fehlende Wissen am besten aneignen (4.2)?

Ich hoffe ich habe euch mit meinen Fargen wieder nicht erschlagen.
Ich würde mich auch über die Beantwortung nur einer Frage,
Anregungen und Teilandworten sehr freuen.

Danke, schonmal im voraus.

Mit freundlichen Grüßen

"--->"

#Alle halbwegs nützliche Antworten bekommen eine "gefällt mir" Angabe.


----------



## Joose (6. Jan 2016)

---> hat gesagt.:


> Sehr geehrte Community,
> ich habe Probleme bei der Programmierung meiner App.



Also deine Fragen beziehen sich nicht nur auf eine App sondern auch auf eine Serveranwendung bzw. Clientanwendung und unterschiedlichen Grundlagen zu unterschiedlichen Themen.

Somit gleich zu Beginn: Nimm dir für den Anfang nicht so viel vor, sondern versuche alles der Reihe nach in Teilschritten zu realisieren.
Sprich fange mit deinem Editor an, dann realsiere deine Serveranwendung und zuletzt solltest du versuchen deine App zu programmieren.



---> hat gesagt.:


> Grundsätzlich möchte ich ersteinmal eine Beispielapp programmieren.
> Ohne sich groß Gedanken über das Design oder die Benutzerfreundlichkeit zu machen,
> würde ich gerne ersteinmal eine Desktopanwendung, für Windows (.exe), programmieren,
> die aus einem Editor besteht, in dem Texte und Bilder eingefügt und formatiert werden können.
> ...



Was willst du denn nun? Eine App oder Desktopanwendung programmieren?
Was soll diese Anwendung bzw. App genau machen? Texte und Bilder zu einem Dokument zusammenfügen -> Eine Art Word?



---> hat gesagt.:


> Ich habe bisher noch keine Desktopanwendungen (außer mit Java) programmiert.
> Ich habe auch noch nichts mit Servern zutuhen gehabt (mit der Entwicklung für Server)



Desktopanwendung bleibt Desktopanwendung nur die Sprache kann eine andere sein. 
Auch auf einen Anwendung für "den Server" ist nichts anderes als eine Java Anwendung.




---> hat gesagt.:


> (1) Ich würde Grundsetzlich mit dem Programmieren des Editor beginnen.
> Als erstes stellt sich mir die Frage
> welche Programmiersprache für Windows am besten geignet ist (1.1)?
> Ich habe mit Java und Windows keine guten Erfahrungen gemacht,
> ...



Das kommt eben auch darauf an ws das Ziel ist 
Eine Anwendung nur für Windows wäre am besten in C# geschrieben, eine Anwendung für Windows, Mac oder Linux sollte man in Java schreiben. Alternativ wenn es auf die Performance ankommt wäre C++ eine gute Wahl.

Bei deinem Anwendungswunsch würde ich auf C# oder Java setzen.



---> hat gesagt.:


> Meine zweite Frage ist, auf was ich mein Augenmerk richten soll (beim erlernen der Sprache),
> wenn ich vorhabe einen Editor zu programmieren,
> der automatisch eine datei erstellt die auf einen Server hochgeladen werden soll
> und von einer Web-App dargestellt werden soll (1.2)?
> ...



Wie schon weiter oben gesagt: Gehe Schritt für Schritt vor. Auf den Dateitypen oder das Protokoll solltest du erst Wert legen wenn du es wirklich brauchst.



---> hat gesagt.:


> Welche Technologie ist eurer Meinung nach am besten geignet (2.1)?
> Gibt es auch Möglichkeiten eine Platformübergreifende App zu programmieren
> ohne Entwicklertools wie PhoneGap zu verwenden (2.2)?
> Was mache ich eigentlich wenn meine App ein Widget haben soll
> ...



Kommt hier wieder auf das OS des Handy an. Alle deine Fragen sind schon so spezifisch. Damit solltest du dich dann beschäftigten sobald du anfängst deine App zu schreiben.




---> hat gesagt.:


> Auf was soll ich mein Augenmerk richten wenn meine Desktop-Anwendung Daten hochladen,
> und die App Daten herunterladen sol (3.1)l?
> Welche Technologie/ Protokolle soll ich für die Datenübermittlung zwischen PC - Server
> und Server - Smartphone nutzen (3.2)?
> ...



Das Protokoll hängt auch wieder davon ob die Verbindung verschlüsselt sein soll/muss. Wie mit einem abgebrochenen Dateidownload umgegangen werden soll, welche Daten alle überliefert werden sollen.


----------



## kneitzel (6. Jan 2016)

Also das ist alles recht umfangreich - zu umfangreich um jetzt per Handy auf alles einzugehen.

Wenn du nur eine Sprache verwenden willst, dann sehe ich jetzt auf die Schnelle 3 Möglichkeiten:

a) Java - Desktop, Server und Android werden da abgedeckt. Das Problem mit der JRE sehe ich nicht wirklich - ist eine einmalige Installation und Du kannst zur Not eine JRE in dein Installer stecken.

b) html/css/javascript - deckt eigentlich alles ab. Desktop zwar nicht direkt, aber eine Web-Applikation kann von jedem Client mit Browser genutzt werden. Server Applikationen gehen mit node.js. Ist von den Möglichkeiten her nicht schlecht. Auch das Cordova / PhoneGap ist recht leistungsfähig. Und Du musst da keine Angst haben: Da macht kein Tool irgendwas böses. Das ist OpenSource und die Projekte haben den vollen Quellcode...

c) c# ist dann noch da. Microsoft hat viel freigegeben, so dass Mono und co recht gut sind. Damit ist es nicht auf Windows beschränkt. Xamarin ermöglicht die Entwicklung für mobile Geräte. Mac und co werden auch unterstützt, wobei dies auch mit Mono so gehen würde. Xamarin ist nur beschränkt frei nutzbar. Das müsste man sich genau ansehen.

Ich würde Dir raten, dich auf eine Sprache zu konzentrieren. Diese ist dann zu meistern. Da gibt es mehr als genug zu lernen und zu machen. Es bringt nichts, wenn du in 100 Sprachen ein Hello World Programm schreiben kannst.

Alle drei Alternativen haben vor und Nachteile.. Java hast du schon angefangen - mach da doch weiter! Wenn es zwei Dinge sein sollen: Nimm html/css/javascript dazu - das lässt sich nicht immer trennen, denn Web Applikationen mit Java gibt es ja auch und da benötigt man halt auch html, css und javascript.

Also mein Ratschlag ist ganz klar:
Bleib erst einmal bei Java, lern objektorientiert zu arbeiten (Analyse, Design und Entwicklung) und damm meister die Dinge, die da so wichtig sind:
- clean code (z.B. cleancodedeveloper.de)
- agile methoden könnten gut sein für die eigene Projektarbeit
- Arbeitsmittel z.B. Source Code Verwaltung und Projektmanagement wie ant oder maven
- Datenbanken wollen auch gemeistert werden
- J2EE wäre gut
- Aspect orientierte Entwicklung
- Frameworks wie Spring
- ...

Du hast viel Zeit und willst lernen? Du braucht nicht von Java weg gehen - du wirst nie auslernen. Dafür kommen überall ständig genug Veränderungen

Ausführlich auf Deine Punkte gehe ich dann morgen ein.

Konrad


----------



## kneitzel (7. Jan 2016)

Die ausführliche Email ist nicht so einfach. Ich denke, ich habe eigentlich alle Punkte zumindest angeschnitten. Da jetzt noch auf jeden Punkt kurz eingehen wird nicht so viel bringen. Das, was ich da jetzt mal in einen Editor geschrieben habe, kopiere ich jetzt einfach mal. Dann ist sicher gestellt, dass eigentlich alle Punkte behandelt wurden:

(1) Editor entwickeln
Hier würde ich nicht ansetzen. Editoren gibt es wie Sand am Meer. Es gibt genug Controls, die das abdecken meine ich.

(1.1) Programmiersprache für Windows
Der Hersteller Microsoft sieht hier vor allem C# und C++. Natürlich auch Visual Basic.Net das ähnlich zu c# ist von den Fähigkeiten.

(1.2) Auf was solltets Du Dein Augenmerk richten?
Das, was Du entwickeln willst, ist sehr komplex. Das ist machbar, wenn man das, was man einsetzt, kennt. Wenn man es erst kennen lernen will, muss man auf jeden Fall klein anfangen!

(1.3) Begrenztes Datenvolumen bei mobilen Geräten
Hier gibt es viele Ideen. Wichtig ist, nur Daten zu schicken, die notwendig sind. Große Dateien werden nie automatisch gesendet. Bilder, Videos. Musik, ... können in reduzierter Qualität oder Auflösung auf das Gerät gesendet werden.

(2) Ohne großen Aufwand auf andere Plattformen ... das ist ein Traum und immer wieder gibt es tolle Werbung: Ganze Applikationen mal eben so in 15 Minuten entwickeln. Viele Standard-Dinge gehen tatsächlich, aber je mehr da jemand ins System gesteckt hat, desto schwere wird die Anpassung. Die Zeit, die Du am Anfang sparst verlierst Du im Bereich der Möglichkeiten oder du zahlst massiv drauf.

(2.1) Welche Technologie -> Dazu hatte ich schon einiges geschrieben.
(2.2) Entwicklungstools - Gute Entwicklungstools brauchst Du so oder so. Und die gibt es nicht immer für lau. 
(2.3) Möglichkeiten von PhoneGap: Keine Ahnung - musst Du selbst mal schauen.
(2.4) Funktionsweise Web-Apps. - Beziehe ich mal auf PhoneGap / Apache Cordova
Die eigentliche App wird über HTML, CSS und JavaScript erstellt. Das Toolset erstellt aber für einen einen Rahmen und man kann sich Platformen hinzufügen lassen. Dabei wird dann ein ganzes Projekt erzeugt, so wie es für die Platform üblich ist (z.B. Objective-C Projekt für iOS) welches dann einen Browser und eine JavaScript Erweiterung bietet. Darüber ist dann der Zugriff auf das Gerät selbst möglich. So kommt am Ende eine Native Applikation heraus.
(2.5) Ja, so in der Art. JavaScript kann halt mitlerweile extrem viel.
(2.6) Ja, das ist drin, da dazu eine Library/Interface mit angeboten wird.
(2.7) Windows Apps sind nur unter Windows zu bauen und du brauchst die SDKs und Visual Studio. Die sind aber frei verfügbar.
(2.8)Sobald Du Dich auf eine Technologie festlegst, dann hast Du Dich festgelegt. Ein kompleter Wechsel wird immer recht schwer. Das ist ein Vorteil von Tool wie Apache Cordova - die sind OpenSource und dadurch seh langlebig.
(2.9) Nein - zumindest bei PhoneGap hast Du die ganze Kontrolle. Du kannst auch in die Sourcen schauen, die kompiliert werden um zu sehen, was da passiert. Solltest Du einen Build-Service nutzen, dann hast Du da natürlich eine gewisse Unsicherheit, aber da sollte man schon etwas Vertrauen haben meine ich.
(2.10) Bei C# kommen eigentlich Native Applikationen heraus. Wobei der Bytecode jetzt neuerdings auch ganz kompiliert werden kann als neues Feature. Aber das habe ich noch nicht ausprobiert. Und Du kannst generell auf Apps verzichten und einfach eine Webseite entwickeln die dann alle online nutzen können.
(2.11) Natürlich kannst Du selbst einen Browser schreiben. Wer sollte Dich daran hindern. Aber die Komplexität dürftest Du unterschätzen denke ich mal.
(2.12) Vorteile Native-App mit Java - Was genau willst Du vergleichen - alle hat vor- und Nachteile.
(2.13) Wenn Du eine Android App entwickelt hast, dann ist eine Apple und Windows App meist eine Neuentwicklung.
(2.14) Auf Macs gibt es Java, iOS weiss ich nicht. Anroid Applikationen wirst Du aber nicht zum laufen kriegen denke ich mal.
(2.15) Musst Du selbst recherchieren. Es gibt paar Spiele-Entwicklungsumgebungen, die MultiPlatform sein wollen. Aber das solltest Du selbst rausfinden.
(2.16) Du musst bei der Erstellung entscheiden, welche Version Du unterstützen willst und danach richtet sich das dann meist.
(2.17) So die Sprache das unterstützt: Klar. Ist aber nicht immer im Fokus der Entwickler.

Wird ganz schön langatmig - Punkt 3- Datenübermittlung
Hier musst Du Dich für eine Technologie entscheiden. Das ist wichtig. Und dann kannst Du schauen, wie es da funktioniert. Wenn Du html/css/javascript machen willst, dann wirst Du Dir WebServices mit JavaScript anschauen. Serverseitig evtl. mit node.js. Wenn es Java sein soll, dann schaust Du Dir die Java Wege an. Wenn es Windows sein soll, dann wird es wohl auf das WCF hinaus laufen. Die Tools kommen dann auch von alleine. Wobei ich die nur für die .Net / Windows Welt kenne. Das .Net Framework liefert da Tools mit, die die Beschreibung der WebServices (wsdl) ausliest und daraus Code erstellt.

Server Hosten: Das kommt ganz am Ende. Entwickel erst einmal etwas. Und dann kann man später schauen, wie man das hosten kann und was man da braucht. Ob man da in die Cloud geht oder auf einem vServer oder physikalischen Server selbst etwas hostet oder einfach ein günstiges Hosting-Paket eines Anbieters nehmen kann ...

Zu 4:
Es gibt zu jeder Technologie sehr viele Informationen. Du musst Dich aber erst einmal festlegen. Und das wenn möglich auf eine Technologie. Wenn Du jetzt mit Java und Android-Entwicklung angefangen hast, wäre meine Empfehlung, da erst einmal weiter zu machen. Gerade das Multi-Platform Geraffel hat einen deutlich höheren Komplexitätsgrad was es für den Einstieg nicht gerade einfach macht.
Also sieh zu, dass Du besser in die Entwicklung rein kommst. Es gibt so viele Dinge, die Du meistern musst. Wenn Du dann den Überblick hast, dann kannst Du auch gerne und schnell wechseln. Die Einarbeitung wird immer noch dauern, aber unter dem Strich machen alle irgendwie das Gleiche. Nur um das zu sehen, musst Du erst einmal den Überblick bekommen. Und dazu musst Du in einer Technologie richtig rein kommen.

Konrad


----------

