mikrocontroller.net

Forum: PC-Programmierung Google Go: in welcher Art von Firmen wofür eingesetzt?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Antonia W. (an-toni-a)


Bewertung
0 lesenswert
nicht lesenswert
Hi,

die ja noch eher junge Sprache Go macht auf mich einen ziemlich 
interessanten Eindruck. Weil ich ET studiere aber danach im Job gerne 
Software machen würde sollte ich Sprachen, in die ich mich einarbeite, 
danach auswählen, was die Firmen einsetzten und wofür und was gefragt 
ist - vor allem eben weil Softwareentwicklung im ET-Studium dünn gesäht 
ist.

Hat jemand von euch einen Ein- oder Überblick, wo in Deutschland Go 
wofür eingestzt wird und vor allem, wie stark es verbreitet ist?

Danke!

von Yalu X. (yalu) (Moderator)


Bewertung
0 lesenswert
nicht lesenswert
Einen groben Überblick erhältst du hier:

  https://github.com/golang/go/wiki/GoUsers

  https://github.com/golang/go/wiki/SuccessStories

Aber darauf bist du bei deiner Suche vermutlich auch schon gestoßen.

: Bearbeitet durch Moderator
von St. D. (st_d)


Bewertung
0 lesenswert
nicht lesenswert

von Gerd E. (robberknight)


Bewertung
0 lesenswert
nicht lesenswert
Wenn Du ET studierst und Softwareentwicklung machen möchtest, vermute 
ich daß Du in den Bereich Embedded-Software gehen möchtest.

Dafür halte ich Go für ungeeignet. Denn das Speichermodell erschwert den 
direkten Hardwarezugriff sehr. Der Einsatz eines Garbage Collectors ist 
oft riskant, da schnell der Speicher ganz ausgehen kann. Auch für 
größere Embedded-Prozessoren halte ich Go für ungeeignet, da es keine 
Shared Libraries verwenden kann, sondern jedes Programm immer komplett 
statisch zusammengelinkt werden muss. Das kostet unnötig RAM. Auch 
kannst Du bestehende Libs von Herstellern oder Drittanbietern (z.B. QT 
für Grafik) nur sehr schwer einbinden.

Für Embedded solltest Du in C und C++ sattelfest sein. Ich könnte mir 
gut vorstellen, daß Rust in Zukunft weitere Verbreitung erfährt.

Oder möchtest Du Softwareentwicklung vor allem für klassische PCs und 
Server machen?

: Bearbeitet durch User
von Sven B. (scummos)


Bewertung
0 lesenswert
nicht lesenswert
Ich habe schon in einem mittleren Unternehmen (ca. 100 MA) 
Embedded-Software in Go geschrieben. Den Namen nenne ich nicht, bin 
nicht sicher ob diese Information als strategisch öffentlich betrachtet 
wird.

In dem Fall ist "Embedded" aber natürlich als "größerer µC mit 
Betriebssystem" zu verstehen, Bare-Metal Go macht eher wenig Sinn.

Gerd E. schrieb:
> Der Einsatz eines Garbage Collectors ist
> oft riskant, da schnell der Speicher ganz ausgehen kann.

Naja, geht so. Du darfst halt keine Leaks einbauen, dann lässt sich nach 
oben abschätzen, wie viel der GC mehr belegen kann als tatsächlich in 
Verwendung ist.

> Auch für
> größere Embedded-Prozessoren halte ich Go für ungeeignet, da es keine
> Shared Libraries verwenden kann, sondern jedes Programm immer komplett
> statisch zusammengelinkt werden muss. Das kostet unnötig RAM.

Das Argument kann ich nicht nachvollziehen. Warum soll statisches Linken 
mehr RAM benötigen als dynamisches? Eher das Gegenteil ist der Fall, da 
der Linker alle nicht benötigten Symbole aus dem Executable entfernen 
kann, sodass diese weder geladen noch überhaupt gespeichert werden. Das 
geht bei dynamischem Linken nicht.

Blöd ist lediglich, wenn man mehrere Executables haben möchte, was ja 
durchaus vorkommen kann. Ich würde dann einfach einen "main"-Wrapper 
schreiben, der abhängig vom übergebenen Argument das eine oder andere 
Programm ausführt.

: Bearbeitet durch User
von Gerd E. (robberknight)


Bewertung
0 lesenswert
nicht lesenswert
Sven B. schrieb:
>> Auch für
>> größere Embedded-Prozessoren halte ich Go für ungeeignet, da es keine
>> Shared Libraries verwenden kann, sondern jedes Programm immer komplett
>> statisch zusammengelinkt werden muss. Das kostet unnötig RAM.
>
> Das Argument kann ich nicht nachvollziehen. Warum soll statisches Linken
> mehr RAM benötigen als dynamisches?

Wenn ich eine shared Lib in mehreren Programmen dynamisch linke, muss 
sie hinterher nur einmal im Speicher liegen.

> Blöd ist lediglich, wenn man mehrere Executables haben möchte, was ja
> durchaus vorkommen kann. Ich würde dann einfach einen "main"-Wrapper
> schreiben, der abhängig vom übergebenen Argument das eine oder andere
> Programm ausführt.

Dann müssten diese anderen Programme aber auch alle in Go geschrieben 
sein.

Sagen wir mal Du hast ein System, welches aus Backend (macht die 
eigentliche Arbeit), GUI und Webserver besteht, das wären dann 3 
Executables. Von mir aus machst Du Gui und Backend in Go. Aber den 
Webserver möchtest Du nicht selbst machen, sondern nimmst einen fertigen 
in einer anderen Sprache. In allen 3 Programmen musst Du aber 
Verbindungen zu externen Webservern machen um Daten abzufragen und dafür 
linkst Du dann OpenSSL. Das OpenSSL ist damit dann 2x im Speicher.

Bei den Produkten die wir in der Firma herstellen wird eine Vielzahl von 
Opensource-Projekten verwendet und die werden dann miteinander verknüpft 
und mit einer schönen Oberfläche versehen. Die sind in vielen 
verschiedenen Sprachen geschrieben. Viele gängige Libs (wie das genannte 
OpenSSL, aber noch ne ganze Menge mehr) werden direkt oder indirekt von 
vielen dieser Projekte gemeinsam genutzt und sind hinterher nur einmal 
im RAM. Go-Programme sind da eigentlich die einzige Ausnahme und oft 
echte Speicherfresser und daher bei uns nicht gerne gesehen.

von Sven B. (scummos)


Bewertung
0 lesenswert
nicht lesenswert
Gerd E. schrieb:
> Das OpenSSL ist damit dann 2x im Speicher.

Das wäre richtig, wenn Go OpenSSL verwenden würde, was es nicht tut ;)
Die TLS-Implementierung ist in Go geschrieben.

Da die gängigen Go-Bibliotheken, gerade für Embedded, eh fast nichts 
bekanntes externes verwenden, ist das dynamic linking-Argument zwischen 
Go- und nicht-Go-Anwendungen auch irgendwie hinfällig. Man kann 
natürlich ein anderes Fass daraus aufmachen, aber dynamic linking würde 
hier nicht helfen.

: Bearbeitet durch User
von Ursel (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Gerd E. schrieb:
> Wenn Du ET studierst und Softwareentwicklung machen möchtest, vermute
> ich daß Du in den Bereich Embedded-Software gehen möchtest.

Embedded wäre nur eine Möglichkeit von vielen, und Embedded heißt nicht 
gleich "kleiner µC". Das können durchaus auch linuxbasierte ARM oder 
sogar x86-Systeme sein. Da sind grundsätzlich alle Programmiersprachen 
denkbar, also auch Go.

Außerdem gibt es natürlich auch Elektroingenieure, die PC-Software 
entwickeln, z.B. für Simulation. Sprachen wie Matlab und Python sind da 
sehr weit verbreitet. Go wäre aber auch denkbar.

Aber eigentlich spielt es ja auch keine große Rolle, welche Sprache man 
nutzt. Es schadet nicht, sich mal eine neue Sprache anzuschauen, wenn 
sie interessant klingt. Dadurch lernt man, flexibel zu sein. Wenn man im 
Berufsleben mit einer völlig neuen Programmiersprache konfrontiert wird, 
ist das ein Vorteil.

von c-hater (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Sven B. schrieb:

> Ich habe schon in einem mittleren Unternehmen (ca. 100 MA)
> Embedded-Software in Go geschrieben.

Warum?

Ich meine: so eine Wahl muss doch wenigstens an irgendeiner Stelle 
irgendeinen Nutzeffekt erzeugen. Oder doch zumindest eine berechtigte 
Hoffnung auf einen solchen...

von Sklavenvermittler (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Antonia W. schrieb:
> Hat jemand von euch einen Ein- oder Überblick, wo in Deutschland Go
> wofür eingestzt wird
Webservices die man dann in einen Container schmeisst. Geht aber auch 
mit jeder anderen Sprache. Go kompiliert halt in ein binary, man muss 
sonst nix bereitstellen, das ist auf den ersten Blick ein Vorteil, in 
der Praxis ist es egal ob ich noch 120 andere Dateien in den Container 
werfe.


> und vor allem, wie stark es verbreitet ist?
Im obigen Bereich etwas verbreitet, verglichen mit anderen Sprachen. Der 
Hype ist längst verpufft und go längst wieder auf dem absteigenden Ast. 
In .de ist der kurze Hype sowieso nie richtig angekommen.

Oben schrieb jemand er hat es im embeddedbereich verwendet, ist glaube 
das ist ein noch viel exotischer Anwendungsfall, ausser embedded = 
fetter linuxbasierter Controller.


Schau dir lieber relevantere Sprachen in deiner Domäne an und 
berherrsche diese im Schlaf, das ist wichtiger als 20 verschiedene nur 
oberflächlich zu kennen. Go bietet nix grundlegend neues ausser dass es 
etwas einfacher ist.

von S. R. (svenska)


Bewertung
0 lesenswert
nicht lesenswert
Antonia W. schrieb:
> Weil ich ET studiere aber danach im Job gerne Software machen
> würde sollte ich Sprachen, in die ich mich einarbeite, danach
> auswählen, was die Firmen einsetzten und wofür und was gefragt ist

Dann würde ich an deiner Stelle in jedem Fall erstmal mit C anfangen, 
sowie die Grundlagen von C++ oben drauf (nicht unbedingt kompliziert). 
Damit fährst du deutlich breiter - mit Go alleine bist du eher ein 
One-Trick-Pony. Auch, wenn es da recht coole Dinge gibt.

Wie es dann weitergeht, hängt von der konkreten Firma ab, bei der du 
landest. In meinem Fall zählen z.B. grundlegendes Java bzw. Kotlin dazu, 
die man da eher nicht einordnet. Aber die Android-Plattform zählt auch 
unter Embedded (viel C++), und da muss man gelegentlich auch kleine Apps 
zusammenpfuschen und fremde Apps flicken können.

von Sven B. (scummos)


Bewertung
0 lesenswert
nicht lesenswert
c-hater schrieb:
> Sven B. schrieb:
>
>> Ich habe schon in einem mittleren Unternehmen (ca. 100 MA)
>> Embedded-Software in Go geschrieben.
>
> Warum?
>
> Ich meine: so eine Wahl muss doch wenigstens an irgendeiner Stelle
> irgendeinen Nutzeffekt erzeugen. Oder doch zumindest eine berechtigte
> Hoffnung auf einen solchen...

Gibt immer Argumente dafür und dagegen. Dafür spricht z.B.

 - go ist eine der wenigen Sprachen die die Nische "automatisches 
Memory-Management, statisch stark typisiert, erzeugt beim Kompilieren 
native Binaries ohne externe VM" füllt. Mir fällt spontan gar keine 
andere ein. Vielleicht sowas wie Haskell. Trotzdem sind aber alle drei 
Eigenschaften u.U. für ein Embedded-System wünschenswert.

 - Wenn es so ein bisschen Richtung Sicherheit geht, ist go vermutlich 
nicht schlecht, weil es einige der Fehlerklassen aus C ausschließt, 
insb. die ganzen Memory-Corruption-Probleme.

 - umfangreiche Standardbibliothek, die sehr viel Kram mitbringt (zB 
TLS, HTTP, eine Template-Engine, XML-Parser, ...), was auch einfach viel 
Nachdenken und Diskussionen spart, welche externe Bibliothek jetzt denn 
benutzt werden soll

 - insb. verglichen mit C/C++ sehr einheitliches Code-Bild, die Sprache 
ist wirklich sehr klein und sehr streng damit, was man wie machen kann.

Naja. So der ultimative Verfechter dass es die perfekte Wahl ist bin ich 
jetzt nicht, aber ich glaube Python oder Java wären schlechter geeignet.

: Bearbeitet durch User
von schotter (Gast)


Bewertung
0 lesenswert
nicht lesenswert

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.