Zum Inhalt springen

Wie beruflich PHP-Entwickler werden?


Gast dnyc

Empfohlene Beiträge

Guten Abend allerseits,

dies ist mein erster Beitrag und ich hoffe, dass ich nichts falsch mache.^^ Zu meinem Problem: ich würde gerne als PHP-Programmierer quereinsteigen. Nun sind meine Kenntnisse allerdings eher bescheiden. Ich habe selbst bisher ein Projekt in Arbeit, um mich mit der Materie auseinanderzusetzen (es ist ein Image-Sharing Social Network), welches in PHP/HTML/CSS/JS geschrieben ist und auch Ajax verwendet. Vergleicht mal mein Produkt allerdings mit den Webseiten, die von beruflichen Entwickern erschaffen werden, so schneidet mein Projekt doch sehr schlecht ab. Bisher habe ich auch noch keine Erfahrungen mit irgendwelchen Frameworks oder jQuery. Meine Frage ist nun, wie man eigentlich als PHP Entwickler beruflich Fuß fassen kann. Ich dachte vielleicht an ein Praktikum mit späterer Übernahmemöglichkeit. Ich habe auch schon danach in meiner Region gesucht, allerdings tatsächlich nur 1 Stellenangebot gefunden, das in Frage gekommen wäre und dort leider eine Absage kassiert. Ich frage mich, wie die ganzen beruflichen PHP Programmierer an ihr Know-How gekommen sind. Normalerweise lernt man in der Aus-/Weiterbildung doch nur von jedem ein bisschen aber nichts so richtig. So war es auch in meiner Ausbildung (IT-Kaufmann). Muss man sich alles selbst beibringen? Welche Referenzen kann man dann aber als Beleg für die Qualifikationen bei einer Bewerbung nehmen und ab wann ist man gut genug? Und warum gibt es fast gar keine Praktikumsstellen für Einsteiger? Gut, die kann ich mir schon denken, es kostet mehr Ressourcen jemanden unerfahrenen einzustellen als jemanden, der schon alles drauf hat, oder? Eine Ausbildung an einer privaten Schule kann ich mir auch leider nicht leisten, weder finanziell noch zeitlich...

Vielen Dank für Antworten im Voraus und noch einen schönen Abend. :-)

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor einer Stunde schrieb dnyc:

Normalerweise lernt man in der Aus-/Weiterbildung doch nur von jedem ein bisschen aber nichts so richtig.

Zum einen ist das nicht wirklich korrekt. Im schulischen Teil einer Ausbildung ist das zwar durchaus so. Der Arbeitgeber der ausbildet hat meist weder das Know-How noch die Motivation dem Auszubildenden neben Java/C# auch noch PHP oder ähnliches beizubringen, wenn im Betrieb nur Java und C# genutzt wird. Im Umkehrschluss heißt das aber auch das eine Firma die mit PHP entwickelt auch hauptsächlich PHP vermitteln wird.

Die Ausbildung wäre also der eine Weg. Den anderen Weg versuchst du gerade zu gehen. Dein Projekt ist nicht so gut wie die Konkurrenz? Das wundert dich? Selten werden größere Projekte nur von einem Menschen entwickelt und auch nicht in - überspitzt gesagt - 2 Monaten. Kein Arbeitgeber wird dich ablehnen, weil dein Projekt nicht so gut ist wie Instagram. Der Grund ist wahrscheinlich eher das man erwartet dich frühestens in 6 Monaten sinnvoll einsetzen zu können. Jeder neue Angestellte muss sich an neue Arbeitsweisen, Tools etc. gewöhnen, dazu dann noch in das eigentliche Projekt einarbeiten. Bei dir kommt dann noch dazu das du dich in PHP einarbeiten musst. 

Mag sein das du PHP schon total gut beherrschst, dennoch denke ich das du im professionellen Umfeld noch einiges lernen kannst. Zumindest war es bei mir [kleine bis mittlere PHP Projekte, Ausbildung FISI, Arbeit als PHP Entwickler] so,  die ersten 6 Monate gab es ne steile Lernkurve.

Die Wahrscheinlichkeit einen AG zu finden der den WIllen hat das zu tragen, ist gering. Und wird geringer je kleiner das Unternehmen ist. Du suchst im Idealfall eine Firma mit 3-4 Mann Teams und keine wo man erwartet, das du nach 4 Wochen Eigenverantwortlich neue Features entwickelst. Hilfreich auf dem Weg dahin wäre noch, wenn du dir ein nettes Community-Projekt suchst, bei dem du schonmal nen Einblick in die Teamarbeit (git, scrum, bugtracker,..) bekommst.

Nicht einfach auf offene Stellen bewerben. Alles anschreiben was mit PHP entwickelt und danach alle anderen. Probearbeit und Praktika anbieten. Jede Woche professionellen Entwickelns hilft bei der nächsten Bewerbung. 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 3 Stunden schrieb dnyc:

Bisher habe ich auch noch keine Erfahrungen mit irgendwelchen Frameworks oder jQuery. Meine Frage ist nun, wie man eigentlich als PHP Entwickler beruflich Fuß fassen kann. 

Kein Mensch entwickelt eine größere Webseite mehr mit reinem PHP. Stattdessen wird z.B. für Onlineshops gerne Magento verwendet oder Projekte mit dem Laravel-Framework oder anderen Frameworks realisiert. Kenntnisse darin bieten dir ganz neue Optionen bei der Stellensuche.

Ansonsten ist im Frontend-Bereich React und Angular sehr gefragt. Das ist zwar anders als PHP, aber hat durchaus seinen Reiz, wenn du HTML, CSS und JS magst. Wenn du hier dann noch serverseitig gehen möchtest, wäre NodeJS und MongoDB ein Blick wert (Stichwort MEAN-Stack). 

vor 3 Stunden schrieb dnyc:

Nun sind meine Kenntnisse allerdings eher bescheiden. Ich habe selbst bisher ein Projekt in Arbeit, um mich mit der Materie auseinanderzusetzen (es ist ein Image-Sharing Social Network), welches in PHP/HTML/CSS/JS geschrieben ist und auch Ajax verwendet.

Es kommt weniger darauf an, was du programmierst, sondern eher, wie du das programmierst. Gerade mit PHP kann man da viel falsch machen. Du kannst das aber auch objektorientiert und mit einer super-duper MVC-Architektur realisieren.

vor 3 Stunden schrieb dnyc:

Ich frage mich, wie die ganzen beruflichen PHP Programmierer an ihr Know-How gekommen sind. Normalerweise lernt man in der Aus-/Weiterbildung doch nur von jedem ein bisschen aber nichts so richtig. So war es auch in meiner Ausbildung (IT-Kaufmann). Muss man sich alles selbst beibringen? Welche Referenzen kann man dann aber als Beleg für die Qualifikationen bei einer Bewerbung nehmen und ab wann ist man gut genug? 

Du brauchst halt Referenzen. In einem Bewerbungsgespräch kann man recht schnell das Level eines Entwicklers feststellen. Jemand, der das drei Jahre in der Ausbildung gemacht hat, ist hier natürlich fitter als jemand, der sich das selbst (evtl. sogar falsch) beibringt. Ansonsten gibt es aber auch viele andere Wege: Praktika, Zertifikate, Onlinekurse (Udemy oder wie das Zeugs heißt), ein Github-Profil mit nem eigenen Projekt, Mitarbeit an nem OpenSource-Projekt uvm.

Das Problem ist halt, dass jemand, der sich das selber beibringt, sich auf einem anderen Level belegt als jemand, der in der Ausbildung einen kompetenten Ausbilder / Mentor zur Seite hat. Da kann man dann in 3 Jahren viel mehr lernen als jemand, der sich das 10 Jahre selbst beibringt und sich viele Fehler angeeignet hat. Vielleicht solltest du dir überlegen, noch eine Ausbildung zum FIAE zu machen.

Von mir aus, lad deinen Code in ein Repo hoch und ich schaus mir mal an. 

vor 3 Stunden schrieb dnyc:

Und warum gibt es fast gar keine Praktikumsstellen für Einsteiger? Gut, die kann ich mir schon denken, es kostet mehr Ressourcen jemanden unerfahrenen einzustellen als jemanden, der schon alles drauf hat, oder? 

Bei Praktikanten gibt es immer mehrere Probleme. Erst einmal, muss es genug Arbeit in der Firma haben, sonst sitzt der Praktikant nur rum, was für beide Seiten eine blöde Situation ist. Dann kommt es natürlich drauf an, was der Praktikant machen kann. Ein Praktikant, der bereits ein wenig Grundlagen beherrscht, kann sicherlich mehr machen als jemand, der kein CSS und keine Schleife kann. Ich denke auch, dass viele Firmen einfach nicht direkt danach suchen, aber dennoch Praktika möglich sind. Einfach mal initiativ bewerben.

vor 3 Stunden schrieb dnyc:

Eine Ausbildung an einer privaten Schule kann ich mir auch leider nicht leisten, weder finanziell noch zeitlich...

Und eine reguläre duale Ausbildung (ggf. verkürzt, weil du ja schon eine hast)?

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 8 Stunden schrieb pr0gg3r:

Von mir aus, lad deinen Code in ein Repo hoch und ich schaus mir mal an. 

Da schließe ich mich an.

 

Ich habe auch eine Ausbildung zum Informatikkaufmann abgeschlossen und dabei gemerkt, dass mir der Programmierteil und die Datenbankthemen am meisten Spaß machen.

Weil Freunde dann gerade auf der Suche nach einem Webentwickler für ein kleines Spiel waren hab ich das dann als Hobbyprojekt gestartet während ich mich einfach auf Juniorstellen und Praktika beworben habe (Rückmeldungen dazu fielen sehr bescheiden aus ?).

Irgendwann hatte das Projekt dann so einen Umfang, dass da auch ein paar User rumhingen und ich den Link zur Demo + Link zum Repo in die Bewerbung packen konnte. Der Code war totale Kacke, aber es war ein kleiner Eyecatcher und hat für so Rückmeldungen gesorgt wie "Entspricht nicht unserem Qualitätsstandard und [...] , aber das kann man ja alles noch lernen".

 

Falls du mit PHP schon einigermaßen sicher umgehen kannst, würde ich dir empfehlen dich einfach ein wenig in eines der beliebteren Frameworks (Symfony oder Laravel) einzuarbeiten, mal so ein grundlegendes Tutorial durcharbeiten.

Der JQuery Hype ist inzwischen größtenteils abgefahren. Wenn du im Frontend hier und da ein paar Animationen brauchst kannst du das noch gut nutzen, solltest vorher aber mal googlen ob es dafür spezialisierte Libraries gibt. Wenn du umfangreichere Dinge im Frontend machen willst, würde ich JQuery wegpacken und React nehmen.

pr0gg3r hat es schon angesprochen, die JavaScript Frameworks React und Angular sind zur Zeit richtig beliebt und es macht viel Spaß damit das Frontend für Webanwendungen zu entwickeln. Da könntest du auch mal die Tutorials durcharbeiten und sehen wie es dir gefällt. 

 

Ach, nur um auf Nummer sicher zu gehen solltest du mal raussuchen welche Design Patterns häufig angewendet werden und dann eine grobe Vorstellung haben wofür sie genutzt werden. Sowas wird gerne mal gefragt und dann sollte man zumindest die Factory kennen.

Bearbeitet von PVoss
Link zu diesem Kommentar
Auf anderen Seiten teilen

Bezüglich solcher Ideen bin ich vorsichtig und würde Dir klar zu einer Ausbildung oder einem Studium raten.

Zum einen ganz grundsätzlich, denn mit Abschluss ist es immer besser als ohne. Man kann auch heute noch als Quereinsteiger Fuß fassen, aber es wird, meiner Meinung nach, von Jahr zu Jahr deutlich schwieriger. Wo dies 2000 noch die Regel war, ist es 2020 schon ein Exot und die Zahlen der Abgänger nach Ausbildung, Umschulung oder Studium werden nicht kleiner. Wer da nicht ein Überflieger ist, wird es zukünftig ohne Abschluss schwer haben.

Ausserdem vermitteln eine Ausbildung, Umschulung oder ein Studium zusätzliche, andere Kompetenzen und Erfahrungen, welche im Beruf von Bedeutung sind. Selbst, wenn Du Dich nun private einliest und der PHP-Crack wirst, ist das nur ein Bruchteil dessen, was Du später im Beruf brauchst. Das Programmieren als solches ist häufig leider nicht das Wesentliche, wenn man Programmierer werden möchte, so paradox das klingen mag. Dazu gehören auch theoretische Grundlagen der Informatik, Vorgehensmodelle, soziale Normen der Geschäftswelt, usw. usf.

Von daher: Wenn es Dir ernst ist, fasse Dir ein Herz und suche Dir eine Ausbildung oder ein Studium. Da wirst Du gerne genommen und das sollte mittelfristig der beste Weg sein. Vor allem, weil Du schon einiges an Vorkenntnissen mitbringst.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Nun meiner Meinung nach hilft die Ausbildung oder ein Studium vor allem erstmal um an ein Bewerbungsgespräch zu kommen bzw. ist die Eintrittskarte in die Welt. Klar gibt es Quereinsteiger, in der Summe aber immer weniger und vor allem die großen schielen hierzulande sehr auf das Papier, anders kann man die Bewerber anfangs auch kaum filtern.

Was das Wissen angeht, man wächst an seinen Herausforderungen. Habe in meiner Ausbildung komplett andere Sachen gelernt, als ich sie heute täglich einsetze. Wenn man sich aber 8 Stunden am Tag mit was beschäftigt, dann kommt man da relativ schnell rein. Außerdem gibt es ja durchaus gewisse Routinen und Alltag im Berufsleben.

Die Sprachen und Frameworks sind eh so vierfältig, dazu gibt es noch branchenspezifisches Wissen etc. pp. Ich habe bis dato noch keine Stellenausschreibung gesehen, die auch nur im geringsten meinem Profil entspricht. Sowas würde ich aber auch nicht als Problem sehen, da in dem ganzen Bereich sehr viel Wissen transferierbar ist. Klar kommen spezifische Sachen oben drauf, die sehr wichtig sind aber verdammt viel ist meist eben schon vorhanden.

Ansonsten je nach Finanzen und Alter eine reguläre Ausbildung, eine schulische Ausbildung oder ein Studium, sofern Anforderungen dafür vorhanden sind. Im Zweifel lernst du dabei überhaupt kein PHP, das ist aber auch nicht so wichtig. Habe persönlich z.B. in der Ausbildung hauptsächlich C und Assembler gelernt. Assembler habe ich im Berufsleben noch nicht zu Gesicht bekommen, C selten, die meiste Zeit verbringe ich nun in Oracle, den Websprachen und hier und da mal in Java.

Am Ende sind die ganzen Konzepte in der Programmierung eh schon 40-50 Jahre alt und wir erfinden sie ständig neu mit neuen Sprachen, Frameworks oder Schlüsselwörtern. Ggf. solltest du anfangs auch über den Bereich PHP hinausschauen. Umorientieren kann man sich immer noch, damit schränkst du dich persönlich nun aber sehr stark ein.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo, 

vor 17 Stunden schrieb dnyc:

... war ... meiner Ausbildung (IT-Kaufmann) ...

ich schließe mal implizit aus deiner Aussage, dass du die Ausbildung abgeschlossen hast und zumindest einen IT Beruf gelernt hast. 

Demnach hast du einen "IT" Beruf und zumindest den einen obligatorischen Abschluss.  - Da du selber das Studium ausgeschlossen hast, wirst du aber damit leben müssen, dass es bei jeder neuen Station in den ersten 10 Jahren schwierig werden wird, weil du eben gegen passendere Profile konkurrierst. Dennoch gibt es eben auch aktuell genug Firmen, die händeringend nach Leuten suchen, die willig sind ausgebildet zu werden.

vor 17 Stunden schrieb dnyc:

Zu meinem Problem: ich würde gerne als PHP-Programmierer quereinsteigen. Nun sind meine Kenntnisse allerdings eher bescheiden. ...

Du könntest auch sagen "ich würde gerne Spiele-Entwickler" werden - doch am Ende bist du doch  "nur C++-Entwickler" für ein ERP geworden, weil es halt mit dem Traumbereich nicht geklappt hat. Wenn du also Entwickler werden willst, würde ich mir einen allgemeinen Bereich such, der grob dazu passt. An deiner Stelle würde ich mir also verschiedene Praktika bei Web Agenturen suchen, ohne Einschränkungen auf einer technischen Ebene zum einstieg. 

===

Wäre denn ein Umzug aus beruflichen Gründen eine Option?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo! :-)

Erstmal vielen Dank für eure Mühe so ausführlich hier zu antworten. Das hat mich sehr gefreut.

Eine Umschulung wäre natürlich eine gute Möglichkeit einfacherer in die Branche zu rutschen. Ob ich das vom Arbeitsamt oder einem anderen Träger bezahlt bekomme, muss ich mal schauen. Beim AA bin ich mir da nicht sicher, da die vllt sagen, dass ich einfach wieder im Support arbeiten soll. Bis dahin sollte ich wohl den anderen Weg erstmal einschlagen, also mich wie _n4p_ und kylt gesagt haben, mich auf alles was mit PHP entwickeln initiativ zu bewerben.

@pr0gg3r Ja, das Problem, welches ich z. B. bemerke, wenn ich mir Dinge selbst beibringe, dass ich dann im Vergleich zu einem Ausgelerntem manche Begriffe oder Techniken nicht kenne. Ein paar Begriffe, die von euch genannt wurden, sind mir auch unbekannt, z. B. Design Patterns und Factory. Ich habe nicht zuletzt auch deshalb angst mich zu bewerben, da ich eben meinen Kenntnissstand nur schlecht einschätzen kann. Du und PVoss habt ja angeboten, meinen Quellcode mal einzusehen. Das finde ich sehr nett. Ihr findet ihn auf GitHub. Wie gesagt, vermutlich ziemlicher bad-code, aber es das war beim ersten Lernprojekt vermutlich zu erwarten. Vllt ist es anschaulicher, wenn man dazu ein Demo Video sieht.

@PVoss D.h. du hast trotz der Rückmeldung die Stelle bekommen? Das finde ich ja echt super. :-) Danke auch für die Tipps, dann werde ich für die Zukunft eine Auge auf die von dir benannten Techniken werfen. Laravel wurde mir auch schon von einem Freund empfohlen, der sich als PHP Entwickler selbstständig gemacht hat. Leider kann er mich nicht einstellen.^^"

@Errraddicator Ja, das ist auch ein weiterer Aspekt. Ich habe privat schon einige Projekte entwickelt (komme hauptsächlich aus dem C++ Bereich), aber beruflich im Team zu entwickeln ist natürlich dann noch mal eine Herausforderung und Ausgelernte haben es da mit Sicherheit einfacher, da sie das schon gelernt haben.

@Velicity So stark auf PHP beschränken möchte ich mich nun auch nicht. Ich bin auch offen für C# oder Java oder andere Sprachen. Ich dachte nur an PHP, weil ich die ganzen Sozialen Netzwerke und Konsorten wie Instagram, Facebook 9GAG und WebFail aus entwicklersicht sehr interessant finde. Menschen über eine Software zu verbinden, die man selbst entwickelt hat empfinde ich als sehr schön.

@kylt Ja, ich denke auch, dass ein Praktikum für mich der beste Weg erstmal ist. Dann werde ich mich initiativ so viel wie möglich bewerben und hoffen, dass ich positive Resonanz erhalte. Umziehen ist nur begrenzt möglich, da meine Freundin noch studiert und nicht überall hin mitziehen kann.

So, ich hoffe, dass ich auf alles gut genug eingegangen bin. Ich wünsche allen einen schönen Abend.

LG

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 52 Minuten schrieb dnyc:

Ihr findet ihn auf GitHub. Wie gesagt, vermutlich ziemlicher bad-code, aber es das war beim ersten Lernprojekt vermutlich zu erwarten.

Das sieht doch schonmal besser aus, als du vermutlich denkst ?

Was mir auf die Schnelle aufgefallen ist (habe zwar länger kein PHP mehr gemacht, aber sollte nichts ausmachen):

  • Du arbeitest mit Klassen, das ist schonmal sehr gut! Wieso sind die dann im Verzeichnis "Interfaces"? Klassen und Interfaces sind ein Unterschied
  • Du könntest einen Autoloader verwenden, damit fallen dann deine ganzen Includes weg
  • Deine Methodennamen haben am Anfang einen Großbuchstaben. Ein ungeschriebenes Gesetzt ist, dass man nur Klassennamen groß schreibt und Methodennamen klein, damit es übersichtlicher ist
  • Die kommentierst zu viel. Beim __constructor() muss z.B. nicht dran stehen, dass es der Constructor ist oder beim Logout, dass es der Logout ist. Meistens macht man es so, dass man nur die Stellen kommentiert, deren Sinn sich nicht erschließt, wenn etwas z.B. bewusst anders programmiert wurde, als man es eig. machen würde. Was der Code an sich macht, sollte man von ihm ablesen können, dabei helfen gut benannte Variablennamen. Du kannst dir auch mal Javadoc anschauen, für PHP gibt es sicher was ähnliches.
  • Für die Datenbankgeschichten benutzt du zwar mysqli, aber du könntest das noch besser machen, indem du ORM verwendest
  • Du trennst nicht Logik von Design. Du hast im Verzeichnis "session" jede menge echos. Das möchte man eigentlich vermeiden indem man entweder eine Template-Engine verwendet oder gleich noch besser, eine MVC-Architektur.
  • Deine Datenbank hast du in SQL-Queries definiert und zwar alles in einzelnen Dateien. Mach lieber eine Datei, das ist für andere dann besser für den Import. Außerdem fehlen da die Relationen zwischen den Datenbanken (Stichwörter: Foreign Key, Constraint)
  • Du hast kein Logging implementiert
  • Die UI ist jetzt nicht das schönste, was ich je gesehen habe, aber es geht ja gerade um PHP (ansonsten wären mir Themen wie Responsive usw. wichtig)

Fazit:

Der Code ist weniger schlimm, als der von vielen PHP-Anfängern (inkl. mir damals!) und du scheinst zu wissen, was du machst. Ich denke sogar, damit kann man eine Junior-Stelle finden, denn das was mir z.B. aufgefallen ist, wirst du dann eh auf der Arbeit relativ schnell lernen. Ansonsten, versuche dich mit den Themen die ich oben geschrieben habe auseinander zu setzen, dann bist du auf einem ganz guten Weg. Weiterhin viel Erfolg!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Jau, der Code sieht bedeutend besser aus als erwartet.

Ich schreibe mal alles runter was mir so durch den Kopf geht, einiges davon ist nur meine Meinung, die Stellen sollte ich jetzt aber gekennzeichnet haben:

  • https://www.php-fig.org/psr/psr-2/
    • Das ist der Quasi-Standard wie man seinen PHP-Code formatieren sollte.
  • https://getcomposer.org
    • Ist der Quasi-Standard um fremde Libraries in dein Projekt einzubinden, gibt dir auch gleich einen PSR-Autoloader. Kannst du aber erst einmal hinten anstellen, es gibt wichtigeres mit dem du dich noch vorher auseinander setzen solltest.
  • Wichtig:
  • Destruktoren brauchst du nur sehr sehr selten. So Dinge wie Variablen unsetten oder die Verbindung zur Datenbank trennen musst du nicht explizit tun, die Variablen räumt der Garbage Collector (brauchst du dir nicht merken) alleine weg sobald sie in dem jeweiligen Scope nicht mehr gebraucht werden und die Verbindung zur Datenbank wird am Ende des Lifecycles für den Request ebenfalls automatisch getrennt.
  • Teilweise baust du innerhalb des Konstruktors die Verbindung zur Datenbank auf, manchmal nutzt du "global" um auf eine bestehende Verbindung zuzugreifen.
    • Beide Wege sind nicht gut
    • Bau stattdessen die Verbindung zu Beginn der Verarbeitung auf und reiche diese Verbindung über den Konstruktor in die Objekte rein. [1]
  • Manche Variablen sind ungünstig benannt, z.B.
    • $this->m_oSqlCon
      • m = mysql
      • o = objekt
      • schätze ich, regt zumindest zu sehr zum Nachdenken über den Namen an
    • $this->dbConnection
      • sagt das gleiche aus, ist aber einfacher zu lesen
      • ist auch noch gültig wenn man von MySQL auf PostgreSQL wechselt
    • Geschmackssache: Bei den Klassennamen finde ich das "C"-Präfix unnötig, Klassen sind ja eher der Standard, für mich macht es mehr Sinn die Sonderfälle wie Interfaces und Abstrakte Klassen zu kennzeichnen
      • und auch dann nenne ich die eher z.B. "ValidatorInterface" als "IValidator"
  • Anstatt "die('abc failed')" nutze Exceptions
    • throw new Exception('abc failed');
    • Exceptions lassen sich an anderer Stelle wieder auffangen, dann kannst du dort auf diesen Fehler reagieren
    • Falls du die Exception nicht fängst, bekommst du eine Aussagekräftigere Fehlermeldung inkl. Datei- und Zeilenangabe für den Fehler
  • Wie schon angesprochen, für PHP gibt es auch solche Doc-Blöcke [2]
    • Bei den IDEs PHPStorm und Netbeans werden die automatisch ergänzt wenn du über der Funktion "/**" tippst und Enter drückst
    • Nicht nur, dient das der Dokumentation und Übersicht was was ist, was was macht und was was (:p) zurück gibt oder wirft ... Die IDEs wissen dann auch mit was für Klassen du da teilweise arbeitest und können Autocomplete-Vorschläge machen während du den Methoden-Aufruf tippst und dir Hinweise zu den erwarteten Parametern geben.
  • Du arbeitest viel mit Konstanten (Top!)
    • Wenn du die innerhalb von Klassen definierst, gibst du ihnen einen Kontext
    • Innerhalb von der definierenden, oder erbenden, Klasse kannst du über "self::KONSTANTE" auf sie zugreifen, außerhalb der Klasse kannst du "Klassenname::KONSTANTE" nutzen.
  • Dein Code könnte an manchen Stellen kürzer sein
  • Nur zur Info: PDO ist besser als mysqli
    • bedeutend komfortablere API
    • unterstützt noch weitere Datenbanksysteme neben MySQL und MariaDB
  • Verzeichnisnamen
    • session -> Views
    • gfx -> images
    • interfaces -> classes (ist auch nicht ideal, machts aber erstmal verständlicher)
  • In den Views musst du nicht jede Ausgabe per echo erledigen [3]
    • Du kannst zwischendurch den PHP-Kontext verlassen um Ausgaben zu generieren
    • Manche IDEs können das HTML nicht erkennen wenn es per echo ausgegeben wird, wenn du größere Blöcke HTML schreibst, ist das Highlighting aber praktisch
    • Du kannst die Kurzform von echo nutz: "<?= $var ?>"

[1]

Spoiler

<?php

/**
 * Interface to news table
 */
class CNewsInt {

    /**
     * @var mysqli 
     */
    private $dbConnection;

    public function __construct(mysqli $dbConnection) {
        $this->dbConnection = $dbConnection;
    }

}

Und dazu dann irgendwo vorher im Ablauf


$dbConnection = new mysqli(DB_HOST, DB_USER, DB_PASSWORD);
$newsInt = new CNewsInt($dbConnection);

 

[2]

Spoiler

<?php

/**
 * Interface to news table
 */
class CNewsInt {

    private $m_oSqlCon;

    const FAILED_INSERT = 1;

    /**
     * @param int $uid
     * @param string $text
     * @return boolean
     * @throws Exception
     * @todo use prepared statements
     */
    public function AddNewsEntry($uid, $text) {
        $result = mysqli_query($this->m_oSqlCon, "INSERT INTO " . DB_TABLE_NEWS . " (id, userid, stamp, text) VALUES(NULL, '" . mysqli_real_escape_string($this->m_oSqlCon, $uid) . "', CURRENT_TIMESTAMP, '" . mysqli_real_escape_string($this->m_oSqlCon, $text) . "');");
        if (!$result) {
            throw new Exception('Insert failed, shit.', self::FAILED_INSERT);
        }

        return true;
    }
  
}

 

[3]

Spoiler

<?php foreach ($users as $user) { ?>
    <p><?= $user->getName() ?></p>
<?php 
}
// weiterer PHP-Code...

Oder als konkretes Beispiel aus deiner index.php


<?php

//...

//Query page view
$pageview = 'top';
if (isset($_GET['view'])) {
    $pageview = $_GET['view'];
}
?>
<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="author" content="<?= DNY_DS_PRODUCT_AUTHOR ?>">
    <meta name="description" content="<?= DNY_DS_HEADER_TITLE ?>">
    <meta name="keywords" content="<?= DNY_DS_HEADER_KEYWORDS ?>">
    <?php
    if (IsMobile()) {
        echo '<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">';
    }
    ?>
    <link rel="stylesheet" type="text/css" href="css/<?= DNY_DS_STYLESHEET ?>">
    <link rel="icon" type="image/icon" href="favicon.ico">
    <title><?= DNY_DS_HEADER_TITLE ?></title>
</head>
<body onload="javascript:InitBody(window.innerWidth, window.innerHeight);" onresize="javascript:AdjustLayout(window.innerWidth, window.innerHeight);">

<div id="menu">
<?php
if (IsMobile()) {
    echo '<div id="menu-logo"><a href="javascript:void(0);" onclick="javascript:ToggleNavVisibility();"><img src="gfx/logo_mobile_small.png" alt="Logo"/></a></div>';
} else {
    echo '<div id="menu-logo"><a href="' . DNY_DS_BASE_DIR . 'index.php' . ((isset($_GET['m'])) ? '?m=' . $_GET['m'] : '') . '"><img src="gfx/logo.png" alt="Logo"/></a></div>';
}
// ...

 

 

 

 

Bearbeitet von PVoss
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 2 Stunden schrieb PVoss:
    • Bau stattdessen die Verbindung zu Beginn der Verarbeitung auf und reiche diese Verbindung über den Konstruktor in die Objekte rein. [1]

Das ist vermutlich das, was PHP-Entwickler unter Dependency Injection verstehen. Ein netter zusätzlicher Effekt ist, dass dadurch die Software auch viel besser testbar ist. Das ist mir vorhin nicht aufgefallen (bzw. ich habe nicht darauf geachtet), aber man sollte sich auch immer angewöhnen, sogenannte Unit-Tests zu schreiben und nur Branches zu mergen, bei denen die Tests nicht fehlschlagen.

Das bringt mich auch gleich auf einen weiteren Punkt: Du nutzt zwar Git, aber du hast keinen Workflow dahinter. Ein Workflow wäre z.B., dass du den Master schützt, so dass niemand direkt in diesen Pushen kann. Stattdessen legt man weitere Branches an (sogenannte Feature-Branches oder Branches für Bugfixes), die dann in den Master gemerged werden (aber erst, wenn sie von jemandem approved wurden). Und um das agile Arbeiten noch abzurunden, kannste dir mal ein paar Scrum- oder Kanban-Software anschauen.

Dann fehlt mir im Git noch eine Lizent-Information. Erst mal nicht weiter schlimm, aber ich persönlich mag es gar nicht, wenn ich eine coole Lib nicht nutzen kann, nur weil die Lizenz fehlt.

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 8 Stunden schrieb pr0gg3r:

Das ist vermutlich das, was PHP-Entwickler unter Dependency Injection verstehen. Ein netter zusätzlicher Effekt ist, dass dadurch die Software auch viel besser testbar ist. Das ist mir vorhin nicht aufgefallen (bzw. ich habe nicht darauf geachtet), aber man sollte sich auch immer angewöhnen, sogenannte Unit-Tests zu schreiben und nur Branches zu mergen, bei denen die Tests nicht fehlschlagen.

Kommt drauf an. Dependency Injection ist zwar ein schönes Mittel, um konkrete Abhängigkeiten zu entkoppeln aber die Abhängigkeiten bleiben bestehen, wenn auch nur in Form eines Interfaces. Dependency Injection kann somit auch schnell zur Pest werden, wenn man die Klassen nicht klein genug hält und man plötzlich 10 oder mehr Abhängigkeiten über den Konstruktor in die Klasse reinwirft. Dann muss man wieder 10 oder mehr Klassen mocken, bevor man die eigentliche Klasse testen kann. Das minimiert nicht den Testaufwand. 

Um dieses Symptom zu bekämpfen, wurden dann IoC-Container entwickelt, die dann über ein Bootstrapping die Abhängigkeiten der Klassen auflöst und wie von Geisterhand die Objekte instanziiert. Meiner Meinung nach löst dies aber nicht das Problem, sondern man verlagert es nur an eine andere Stelle und bläht sein Code mit Infrastruktur auf. Zusätzlich können auch Fehler im Bootstrapping auftauchen und plötzlich werden dann die falschen Abhängigkeiten in eine Klasse injiziert. Also muss man auch das Bootstrapping testen. Unter Umständen kann es dann auch soweit kommen, dass man den Code nicht mehr lesen kann, da man nicht mehr weiß, welche Implementierung gerade wo verwendet wird. 

Meiner Meinung nach, benötigen wir ein anderes Verständnis über die Softwareentwicklung aber ich denke, das würde jetzt hier zu weit führen.

tl;dr: Dependency Injection, ja ist ein gutes Mittel aber das Drumherum muss auch stimmen, um die Vorteile genießen zu können.

@dnycVersuche doch, einen Ausbildungsplatz zu bekommen. Bei deiner vorherigen Ausbildung als IT-Kaufmann kann ich mir vorstellen, dass du auch die Ausbildung verkürzen kannst. Ich denke mal, dass es in der heutigen Zeit Quereinsteiger doch sehr schwer haben. PHP ist auch keine allzu moderne Sprache mehr und inzwischen auch schon etwas verpönt, sodass man auch kaum Chancen hat, eine Firma zu finden, die bereit sind, einen Quereinsteiger in der PHP-Entwicklung einzustellen. Also Frontend-Entwickler mit Angular oder React hat man derzeit wohl bessere Chancen. Allerdings sehe ich heute nur noch eine Chance als Praktikant in die Branche reinzukommen, wenn man nicht eine Ausbildung oder ein Studium anstrebt. Besonders Startups suchen häufig Praktikanten.

vor 14 Stunden schrieb dnyc:

So stark auf PHP beschränken möchte ich mich nun auch nicht. Ich bin auch offen für C# oder Java oder andere Sprachen. Ich dachte nur an PHP, weil ich die ganzen Sozialen Netzwerke und Konsorten wie Instagram, Facebook 9GAG und WebFail aus entwicklersicht sehr interessant finde. Menschen über eine Software zu verbinden, die man selbst entwickelt hat empfinde ich als sehr schön.

Bei Facebook und Co. wird aber nicht ausschließlich PHP verwendet. PHP wird überwiegend für die Logik verwendet und ist mehr historisch begründet, weil Zuckerberg damals mit PHP angefangen hat. Inzwischen mussten sie aber vieles tun, damit es überhaupt performant bleibt, indem sie z.B. ein Compiler gebaut haben, der den PHP-Code in Maschinensprache übersetzt. Auch das JavaScript-Framework React stammt von Facebook. Die Klassische Entwicklung mit PHP hat nämlich den Nachteil, dass das Erstellen des HTML-Dokumentes auf dem Server geschieht. Wenn jetzt nun eine Million Nutzer eine klassische PHP-Webseite aufrufen, müssen die Server eine Million HTML-Dokumente erzeugen, die wohlmöglich zu 95% immer gleich aussehen (Header, Footer, ...). Das ist sehr rechenintensiv. Da kommen dann Angular oder React ins Spiel und verlagern die Erstellung der HTML-Dokumente auf den Client (der Browser), da der Client eh die Leistung dafür hat. Auf diese Weise entlastet man den Server enorm. Der Server sendet also nur noch die reinen Daten zum Client und der Client generiert aus diesen Daten die Ansicht. Ein weiterer Vorteil ist nun, dass Angular oder React nicht die Webseite jedes Mal neu generieren, sondern im DOM einfach nur die Elemente austauschen. So bekommt man das Gefühl, dass es sich nicht um eine Webseite handelt, sondern um eine App. Das Prinzip nennt sich dann auch Single-Page-Application.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo. :-)

Wow, vielen Dank für euer umfassendes Feedback! Das hat mich sehr gefreut.^^ Ich werde eure Liste mal durcharbeiten und mein Projekt aktualisieren. Auf ein paar Sachen kann ich ja auch eingehen:

- Das mit dem Name "interfaces" war so gedacht, dass die Klassen Schnittstellen zur den SQL Tabellen sind. Deshalb habe ich sie so benannt.^^ Aber ja, das ist wohl etwas irreführend.^^

- Stimmt, das ist eine Angewohnheit von mir, auch den ersten Buchstaben groß zu schreiben. Dann werde ich das auch mal abändern. Das 'm' bei m_oSqlCon bedeutet einfach member. Ist so eine Angewohnheit aus C++, damit man im Code direkt sieht, was eine Klasseneigenschaft ist und was eine globale Variable (welche dann mit g_ gepräfixed wird).^^ Aber eigentlich sieht man ja auf Anhieb am this, dass es sich um eine Klasseneigenschaft handelt.^^

- Ja, das ist so eine Angewohnheit von mir, sehr viel zu kommentieren.^^ Das Kommentieren a la PHPDoc finde ich sehr interessant. Bisher habe ich Notepad++ verwendet, aber ich werde mir mal eine IDE zulegen, die dann auch die Kommentarblöcke parsen kann und eine Doc generiert. Könnt ihr mir da eine gute empfehlen?

- Stimmt logging habe ich nicht. Das muss ich auf jeden Fall noch implementieren. Und die echos, da weiß ich auch nicht was mich geritten hat.^^" Das werde ich mal ausbessern.

- Mit Git habe ich ehrlich gesagt noch nie wirklich gearbeitet.^^" Ich habe einfach für euch den Code über die GitHub Website hochgeladen. Aber Danke auch für diesen Tipp. :-)

Danke nochmals für alle Tipps. Jetzt habe ich wieder einiges zu tun. =)

Übrigens, ich habe doch tatsächlich morgen ein Vorstellungsgespräch. Da wollte ich hier mal fragen, ob ihr glaubt, dass das was werden könnte? Ich kann ja einfach mal die Stellenbeschreibung posten und ein Teil meines Anschreibens:

Zitat

Branche: Erbringung von sonstigen Dienstleistungen der Informationstechnologie, Betriebsgröße: zwischen 6 und 50

Stellenbeschreibung

Das Hauptprodukt der mehr als 30-köpfigen **** GmbH ist die Eigenentwicklung eines modernen Warenwirtschaftssystems, das hauptsächlich bei Handel, Vertrieb und Reparaturbetrieben in den Branchen Landtechnik und Motorgeräte eingesetzt wird.
Abgesehen von der Weiterentwicklung dieser Software planen und realisieren wir Herstellerschnittstellen und Preisdatendienste der großen Marktteilnehmer. Neben Vertriebs- und Planungstools sowie weiteren Softwarelösungen stehen verstärkt auch mobile Dienste in unserem Fokus.

Zur Verstärkung unseres Teams suchen wir einen Programmierer (m/w) mit Spaß an der Entwicklung großartiger Software

Ihr Profil:

- Kenntnisse PHP, JS
- Kenntnisse weitere Webeentwicklungstechnologien und Services (HTML5,CSS3,SOAP,REST, JSON)
- Kenntnisse Datenbanken (SQL und NoSQL)

Folgende Kenntnisse wären von Vorteil:

- C#, Visual Studio
- Debugging von größeren Softwareprojekten

Wir bieten eine spannende Tätigkeit in einem dynamischen und florierenden Unternehmen

- Entwicklung von Projekten in einem erfahrenen Team
- Ein unbefristetes Arbeitsverhältnis in Vollzeit bei der Nummer 1-Software der Branche
- Flexible Arbeitszeitregelung mit der Möglichkeit zur teilweisen Tätigkeit im Homeoffice
- die großen (und auch kleinen) Kunden der Branche (mehr als 1200 Kunden mit ca. 8000 Arbeitsplätzen)
- ein attraktives Gehaltspaket

Und das hier ist der Teil meines Anschreibens, bei dem ich mich auf meine Programmierkenntnisse bezogen habe:

Zitat

Ich suche momentan eine neue Herausforderung, in der ich meine Entwicklerkenntnisse anwenden und ausbauen kann. Erste Erfahrungen in der Programmierung konnte ich im Praktikum während meiner Ausbildung sammeln. Dort war ich u.a. involviert, den webbasierten B2B-Bereich meines Prakikumgebers mitzuentwickeln. Auch privat habe ich bereits meine Kenntnisse im Programmieren mit PHP/CSS/JS/HTML vertieft. So habe ich eine Image-Sharing Platform entwickelt (Quellcode auf GitHub einsehbar: https://github.com/dny-coder/dnyDevShare). Auch habe ich bereits MySQL und MSSQL Datenbanken erstellt und verwaltet. Als Informatikkaufmann bringe ich des Weiteren die notwendigen kaufmännischen Kenntnisse mit, um mich in ein Warenwirtschaftssystem reinzuversetzen und so die Anforderungen der Kunden umzusetzen.

Meint ihr, das könnte was werden? Ich frage mich, was man unter "Kenntnisse ***" versteht. Da gibt es dann ja noch "Gute" oder "Sehr gute Kenntnisse". Wie würdet ihr meine Kenntnisse anhand des Codes einschätzen? Ich habe ehrlich gesagt schon ein bisschen angst, dass das morgen eine echte Blamage wird. Allerdings habe ich auch nicht zu dick aufgetragen beim Anschreiben, sodass der Personaler eigentlich wissen dürfte, was auf ihn zukommt. Ob die den Code gelesen haben, ist aber auch wieder die andere Frage.

Ich wünsche euch einen schönen Tag. :-) Und nochmals vielen Dank für das Feedback!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Offotpic: Dir ist klar, dass man die Stellenanzeige mit etwas intelligentem Suchen sofort bei Google findet und somit auch den Namen des Unternehmens? Nur als Info falls dir das nicht bewusst sein sollte. ?

Und was ist jetzt eigentlich aus dem Bewerbungsgespräch geworden?

Bearbeitet von monolith
Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...