Nein, die Qualität hat zugenommen.

Selbst die erfahrendsten Entwickler, die vor 30 Jahren noch wußten, was im Hintergrund alles passiert, können es heute nicht mehr wissen. Man ist gezwungen schnellebige Bibliotheken zu benutzen, wo man gar keine Zeit mehr hat, sich für Details zu interessieren, es seie denn, man sucht nach einem Bug. Die Betriebssysteme und die Build-Tools entwickeln sich ähnlich rapid, dass man als Informatiker nur wenig Chancen hat, alle Änderungen wahrzunehmen.

Die Informatik ist sehr komplex geworden und hat inzwischen extrem viele Zweige. Selbst als Abgänger von einer Uni wird ein neueingestellter Mitarbeiter schnell erkennen, dass er nicht soviele Bereiche abdecken kann, wie er gern würde. Es reichen wenige Bereiche, um ihn voll zu fordern. Der Bedarf, Neues zu lernen (und das beinahe täglich) ist jedem Informatiker bekannt.

Die Zeit, die für reine Implementierung übrig bleibt, wird immer weniger. Forderungen nach Nachhaltigkeit, Dokumentation, Team-Fähigkeit samt der Zeit, die für Meetings drauf geht, verringert diese Zeit.

Und final: Informatiker waren es, die die Bedienbarkeit von SW verbessert haben, sonst hätten wir heute noch Betriebssysteme, die nur Nerds bedienen könnten, UND JA, Informatiker haben auch ihre Entwicklertools so optimiert, das alles schneller geht......Sind heutige Bauern dümmer, nur weil sie nicht mehr wissen, wie man einen Mähdrescher baut????

...zur Antwort

Die Sätze enthalten u.U. auch kleine Buchstaben, Zahlen und Sonderzeichen wie Leerzeichen und '.'? Ich bin sicher, dass die RegEx bestimmt nicht das ist, was Du wolltest.

...zur Antwort

Du solltest Dich nicht für die dunkle Seite der Macht entscheiden. Jeder, der umfangreiche Ahnung hat, wie TCP/IP, HTML-Server, Hardening und IP-Security funktionieren, weiß auch um die Schwachstellen und kann theoretisch auch hacken.Wenn es Dich interessiert, wie solche Schwachstellen ausgenutzt werden, empfehle ich Dir SW wie Nessus. Installiere Dir alte SW-Versionen, von denen Schwachstellen bekannt sind und lerne wie z.B. ein fehlerhaftes memcpy in einer Server-Funktion dazu genutzt werden kann, um Schad-Code auszuführen. Ich wiederhole es gern nochmal, man kann dieses Wissen dazu nutzen, die Sicherheit zu verbessern oder fremde Systeme anzugreifen. Ich hoffe, Du entscheidest Dich für die richtige Seite, mit der falschen Entscheidung landest Du u.U. im Gefängnis...es gibt nämlich auch die Guten im Internet:-)

...zur Antwort

Das Zauberwort heißt Escape-Sequenz. Escapesequenzen kommen aus einer Zeit, in der Terminals und Consolen noch echte Hardware waren. Die meisten der heutigen Konsolen- oder Terminalprogramme unterstützen diese Escapesequenzen immer noch. Eine gute Beschreibung findest Du hier (http://academic.evergreen.edu/projects/biophysics/technotes/program/ansi\_esc.htm). Die Startsequenze ist immer "\x1B[".

Die Zeile print("\x1B[31mText\x1B[0m") gibt 'Text' in roter Farbe aus. Bitte nie vergessen, nach dem Text, die Terminal-Attribute mit "\x1B[0m" wieder abzuschalten, sonst kommen ab da an alle Texte in dieser Farbe.

Mit Escape-Sequenzen kann man weit mehr machen, als nur farbige Texte ausgeben. Man kann z.B. auch den Cursor lenken, um ihn z.B. für eine auf der Zeile bleibenden Progressanzeige auf der Zeile zu halten.

Sollte Dein Terminalprogramm das nicht sofort richtig anzeigen, kannst Du das in Deinem Terminalprogramm unter Optionen und Terminal Type einstellen.

...zur Antwort

Tolle Frage! Ich würde behaupten, ja, man kann logisches Denken erlernen. Jedes Kind tut dies seit der Geburt: "Ist die Herdplatte an, dann nicht anfassen, sonst tut das weh."

Man muss zunächst zwischen menschlicher, philosophischer und mathematischer Logik unterscheiden. Das obige Beispiel eines Kindes ist menschliche Logik, die sich 1:1 in philosophische und mathematische Logik überführen liese. Umgedreht geht das oft nicht. In der Mathematik gibt es Dinge (z.B. einen 128-dimensionalen Raum), den man sich als Mensch nicht vorstellen kann, sehr wohl aber mathematische Aussagen darüber treffen kann.

Die Logik, die Du zur Software-Entwicklung erlernen willst, ist die mathematische Logik. Wie grtgrt schon schrieb, hilft dort das intensive Befassen mit Mathematik. Alles, was sich mathematisch berechnen läßt, kann man auch via Software berechnen, das gilt aber auch umgekehrt: wenn ein universelles Problem mathematisch unlösbar ist, dann ist es auch mit Software-Mitteln nicht lösbar.

Aus didaktischer Sicht gibt es Möglichkeiten, das logische Denken zu fördern. Eine einfache Möglichkeit ist ein logisches Spiel. Ich rede nicht über "Call of Duty" :-) ich rede über Schach. Wenn Du Schach spielen kannst und oft gegen Gegner spielst, die stärker sind als du, werden sich zwei Dinge einstellen:
1. Der Zwang, mehrere Züge vorauszudenken, wird dein logisches Denken schulen, insbesondere der Umgang mit "UND" und "ODER" (das sind Grundlagen mathematischer Logik)
2. Die Notwendigkeit, sich gedanklich "total" auf das Spiel zu konzentrieren, wird Dir helfen, auch in anderen Situationen (Schule, Beruf, u.a.) sich auf das zu konzentrieren, was wichtig ist (z.B. beim Lösen einer Textaufgabe).

...zur Antwort

Keiner sollte hier antworten, um einen Lernenden das Lernen abzunehmen. Lehrer geben Übungsaufgaben, damit die "Schüler" dabei etwas lernen. Die Antwort-Kultur der "Antwortenden" sollte darauf Rücksicht nehmen, ob ein Entwickler ein "echtes" Problem hat, oder ein Schüler nur zu faul ist, seine Hausaufgaben zu machen.

Danke für die Beachtung aller Internet-Etikette

...zur Antwort

Du brauchst eine Idee, die von Dir selbst heraus kommt oder den Zwang, etwas umzusetzen...man es von Dir verlangt. Das ist wie bei "echtem" Handwerkzeug und "echten" Projekten. Du kaufst Dir auch nicht erst den Hammer, die Nägel und die Bretter und kommst später auf die Idee, eine Bude zu bauen, es ist umgekehrt. Die Art, wie Du dazu kommst, unterscheidet auch, wie Du die Bude baust. War es ein Professor, muss die Bude nicht dicht sein, Hauptsache, Du hast für alle Nachwelt dokumentiert, wie man eine Bude baut. War es ein Wirtschaftler, muss die Bude dicht sein, und die Nägel, Bretter und der Hammer billig. Erschwerend dazu kommt, dass Du entscheiden musst, ob Du die Bude selbst baust, oder sie fertig im Baumarkt kaufst. Ich rede immer noch von Python. Denke einfach mal darüber nach. (Jede Aufgabe, die ich Dir hier empfehlen könnte, gibt es in der Python-Community mit Sicherheit schon mehrfach implementiert.)

Ich empfehle Dir, konzentriere Dich auf das Werkzeug im Werkzeug: Baue Python-Bibliotheken, entdecke, welchen Code man sinnvoll auslagert und wie, schreibe z.B. einen Scheduler, der Dich morgens weckt, zur Teatime begrüßt und Dir abends 'gute Nacht' sagt, dazu einen Tracer, der das Ganze mitloggt, und den man so konfigurieren kann, dass er viel oder wenig mitloggt. Es gäbe 1000 solcher Mini-Aufgagen, lernen wirst Du daran nur, wenn sie von Dir selbst kommen, oder Du sie machen musst, weil sie von außen kommend von Dir verlangt werden.

Empfehlung 2: Suche nach Python-Code in der Python-Community. Versuche ihn zu verstehen und eigene Applikationen zu adaptieren.

PS: Ist Python die n+1 .te Sprache und der Druck ist da, hast Du diese Sprache in 3 Wochen theorethisch drauf, nebenbei das geforderte Projekt total billig damit implementiert und sogar noch ne Doku dazu geschrieben, dass jeder Professor glücklich wäre :-).

...zur Antwort

Du solltest die Strings, die eingegeben werden, prüfen und dann in Zahlen verwandeln.

while x>1: a = input("Gebe eine gerade Zahl deiner Wahl ein")
if a.isdigit(): # wenn es eine Zahl ist
 zahlen.append(int(a)) # füge Zahl hinzu x -= 1 # nächste Zahl
else: # sonst Fehler
print("Eingabefehler: {} ist keine gültige Zahl".format(a))

Du musst ja damit rechnen, dass jemand "vier" eingibt, und dann steht da die Frage, ob "vier" > 5 ist. Das kann keine Sprache, auch Python nicht. Genau das führt zu der Fehlermeldung.

...zur Antwort

Das geht mit Escape-Sequenzen. Auf http://en.wikipedia.org/wiki/ANSI_escape_code findest Du, welche es gibt.

Zum Beispiel gibt

CSI = "\x1B["
CSI_OFF = "\x1B[0m"
print(CSI + "31m"+ "Hallo" + CSI_OFF)

ein "Hallo" in rot aus.

...zur Antwort

Noch ein Tipp: arcsin ist als Funktion asin(double x) definiert und liefert Bogenmaßwerte im Bereich [-PI/2, PI/2]. Man muß den Wert also noch mit *180.0°/PI erweitern, um auf den Gradwert zu kommen. Für das klassische rechtwinklige Dreieck (4, 3, 5) sieht das Ganze so aus:

#include <stdio.h>
#include <math.h>

#define PI 3.14159265

void main(void)
{
    double a = 3.0;
    double b = 4.0;
    double c = 5.0;

    double alpha = asin((double)(a/c)) * 180.0 / PI;
    printf("alpha = %.02f", alpha);
}
...zur Antwort

Man kann einfach am Anfang den Index aus einer Datei laden, wenn sie existiert, und am Ende speichert man ihn in die Datei. Wenn man wieder vor vorn beginnen will, löscht man die Datei und startet neu.

#!/usr/bin/perl
use warnings;
use strict;

my $result_file = "result.dat";
my $index = 0;

if (open(INFILE, $result_file))
{ #read index if result file exist
    my @lines = <INFILE>;
    close INFILE;
    $index = $lines[0] if ($lines[0]);
}
else
{
    print("cannot open input file $result_file -> use index 0\n");
}
print "start index = $index\n";
#do anything with $index
for (my $i=0; $i<5; $i++)
{
    $index += 1;
}
print "end index = $index";
#save $index
open(OUTFILE, ">".$result_file) or die ("cannot open output file $result_file");
print OUTFILE "$index";
close OUTFILE;
...zur Antwort

Der Filename der ausgeführten Datei steht in $0. Je nach Betriebssystem kann ein Pfad mit den Zeichen '/' oder '\' separiert sein. Nach diesem Zeichen splittet man den Pfad und nimmt aus dem entstehenden Array das letzte Element.

Das sieht dann wie folgt aus:

!/usr/local/bin/perl

use warnings; use strict;

my $PATH_SEP = ($^O eq "MSWin32") ? '\\' : '/';

my $fullpath = $0;

my @parts = split(/${PATH_SEP}/, $fullpath); my $fn = $parts[$#parts]; print ("filename=$fn\n");

...zur Antwort

Als einer, der beide Sprachen ganz gut kann, empfehle ich definitiv Phyton, wenn es einer der ersten Computersprachen ist, die man lernen will.

Perl ist eine Expertensprache, deswegen wird an Universitäten auch eher Phyton gelehrt, wogegen zu Perl eher Experten greifen, die schon eine Reihe anderer Sprachen beherrschen.

Zu beiden Sprachen gibt es gute Communities, die bei Erstproblemen helfen, und zu beiden Sprachen gibt es Tonnen von Bibliotheken, die bereits das liefern, was man implementieren will.

Beide Sprachen werden "vorkompiliert", deswegen sind sie deutlich effektiver als viele "reine" Interpretersprachen. Allerdings hat das Grenzen. Wenn man hoch-perfomante Dinge erledigen will, braucht man a) eine Sprache, die auf die Plattform-Maschinensprache übersetzt und b) eine Möglichkeit, hardware-nah auf Register oder Hardware-Ressourcen zuzugreifen, sowas geht nur mit Sprachen wie C u.ä.

Um es kurz zu sagen, es macht wenig Sinn, mit Phyton oder Perl etwas wie ein Betriebssystem, einen Grafiktreiber oder einen Video-Codec zu implementieren. Theoretisch geht das schon, aber aus Perfomance-Sicht hätte man wenig Freude daran.

Wenn es darum geht, eine regelnde Software zu schaffen, die auf einem variablen System, was Solaris, Ubuntu, Suse, Windows oder MAC sein könnte, so zu implemtieren, dass es auf all diesen läuft, sind solche Sprachen ideal.

...zur Antwort

Benutze Leerstrings zw. den Spalten: " "x8 erzeugt 8 Leerzeichen. $val1 . " "x(16-length($val1)) erzeugt soviele Lerrzeichen nach $val1, dass es erst ab Spalte 16 weitergeht.

Mit

print($var1." "x(16-length($var1)).$var2." "x(16-length($var2)).$var3."\n");

erfolgen die Prints mit Spaltenbreite 16.

...zur Antwort

Ja, das wird sie! Aber nicht wie in Sprachen wie C, C++, C#, Pascal o.ä in die Maschinensprache des Rechners, sondern in einen Byte Code einer virtuellen Maschine. D.h., Perl ist weder eine reine Compiler-Sprache noch eine reine Interpretersprache (wie früher Basic).

...zur Antwort

Hallo BrilleFielmann,

Du wirst Perl nicht lernen, wenn Du die Lösungen immer wieder hier im Internet suchst! Drei mal habe ich Dir schon geholfen, diesmal gibt es keine Hilfe. Du mußt es selbst lösen!

Grüße.

...zur Antwort

Wenn Du keine Windows GUIs implementieren willst sondern nur die Grundlagen von C lernen willst, ist www.cygwin.org eine gute Adresse. Cygwin enthält sowohl einen gcc als auch g++. Für Notepad++ gibt es Möglichkeiten der Konfiguration, den gcc aus Notepad++ heraus zu starten.

...zur Antwort

Hallo carl3399, Du hättest Dir mal die Unterschiede zw. der Basic und der Pro Version des Textkonverters ansehen sollen :-) Die Basic-Version ist für Performance nicht gedacht.

Mein Perl Script ist vermutlich deutlich schneller, und wenn Du es noch schneller brauchst, schreibt man ein kleines C-Programm. Das poste ich Dir gerne auch, in der Hoffnung, dass Du einen C-Compiler hast und damit umzugehen weißt.

...zur Antwort

Hallo carl3399,

mit der Annahme das jeder Zeile der Einagbedatei die gleiche Url vorangestellt werden soll, hier eine Lösung:

#!/usr/local/bin/perl

use warnings;

use strict;

if ($#ARGV < 2)

{ print ("$0 (inputfile) (inserttext) (outputfile)\n"); exit; }

open(INFILE, $ARGV[0]) or die("cannot open input file $ARGV[0]");

my @lines = ;

close INFILE;

open(OUTFILE, ">".$ARGV[2]) or die ("cannot open output file $ARGV[2]");

print OUTFILE "$ARGV[1] $_" foreach (@lines);

close OUTFILE;

Ich hoffe, das hilft Dir weiter.

...zur Antwort

Du kannst in C++ einen C++-Compiler, einen Grafiktreiber oder ein Betriebssystem schreiben, das wird Dir in Perl kaum oder gar nicht gelingen. Dafür kannst Du in Perl relativ schnell Software entwickeln, die auf Anhieb plattform-übergreifend auf Windows, Unix oder MAC läuft. Wo Du in C++ bei einer SW-Änderung erst einen neuen Compilerlauf brauchst, kannst Du in Perl Deine Änderungen beim Kunden machen, es wird sofort funktionieren. Wenn es also nicht um perfomante oder hardwarenahe Software geht und es in wenigen Stunden Entwicklungszeit laufen soll, ist Perl ein Geschenk. Wenn Du also z.B. einen Web-Server brauchst, auf den nur 10 mal pro Tag zugegriffen wird, aber für die Entwicklung nur 8 Stunden Zeit hast, nimm Perl...wird allerdings 5000 mal pro Sekunde zugegriffen und Du hast Monate Zeit, dann nimm C++ :-)

...zur Antwort