Heim  >  Artikel  >  Backend-Entwicklung  >  Programmierer, wie viele Jahre können Sie das noch schaffen?

Programmierer, wie viele Jahre können Sie das noch schaffen?

雷果国
雷果国Original
2020-06-19 10:55:10183Durchsuche

Die Welle der Technologie ist endlos. Wenn die Welle nachlässt, bleibt uns nur noch die Methodik? Oder veraltete Technologie?

------

Wir Programmierer reden immer gerne vom sogenannten „35-Jahre-Fluch“, als ob der „35-Jahre-Fluch“ schon so wäre zum Patent für Programmierer werden. Tatsächlich ist das Alter von 35 Jahren jedoch ein Problem, mit dem Berufstätige in allen Lebensbereichen konfrontiert sind.

Grundsätzlich ist das Alter von 35 Jahren der Wendepunkt, wenn Menschen das mittlere Alter erreichen. Wenn unsere Wertschöpfung bei der Arbeit mehr von körperlicher Stärke abhängt, dann stehen wir zwangsläufig vor dem Dilemma, dass die berufliche Entwicklung nachlässt.

Programmieren ist ursprünglich eine äußerst kreative Arbeit, bei der abstraktes Denken und logische Schlussfolgerungen im Vordergrund stehen. Allerdings behandeln viele von uns das Programmieren wie eine Transaktionsarbeit, die so langweilig ist wie Wasser alt Der Fluch wird uns verfolgen.

In einer sozialen Gruppe haben verschiedene Menschen unterschiedliche Möglichkeiten, die allgemeine Umgebung zu ändern, aber ich hoffe, Programmierern zu helfen, die bereit sind, gegen den „35-Jährigen-Fluch“ zu kämpfen Richtung. Geben Sie ihm noch ein paar Jahre!

Ausgehend von einer Interviewfrage

Das Yang-Hui-Dreieck ist eine Frage, die ich in Interviews oft stelle: „Bitte programmieren und geben Sie die ersten N Zeilen des Yang-Hui-Dreiecks gemäß dem angegebenen Format aus.“

Programmierer, wie viele Jahre können Sie das noch schaffen?

Die meisten Kandidaten begannen mit dem Codieren, nachdem sie die Frage erhalten hatten. Sie schrieben zunächst eine zweischichtige Schleife und begannen dann, über die Beendigungsbedingung der Schleife nachzudenken Eine Antwort, die Sie nicht einmal glauben. Einer der beeindruckendsten Momente war, als ein Kandidat von WeChat Pay nur eine Methode zur Verfügung stellte, um die ersten N Datenzeilen zu erhalten, aber immer noch keine Möglichkeit fand, sie im angegebenen Format auszudrucken.

Viele Leute werden sagen, dass sie den Algorithmus vergessen haben, nachdem sie die Schule mehrere Jahre lang verlassen haben. Diese Art von Frage sollte den von der Schule rekrutierten Schülern gestellt werden. Ich glaube nicht, dass es mir nicht um einen bestimmten Algorithmus geht, sondern um die Idee, Probleme zu analysieren und zu lösen. Wir können einige bestimmte Algorithmen vergessen, aber während wir vergessen, sollten wir die in den Algorithmen enthaltenen Problemlösungsideen in unsere eigenen Waffen verinnerlichen.

Als nächstes möchte ich Ihnen vorstellen, wie ich dieses Problem sehe.

Turing-Award-Gewinner N. Wirth schlug „Programm = Algorithmus + Datenstruktur“ vor, ich sage eher „Programm = Daten + Prozess“.

Datenperspektive

Betrachten wir diese Interviewfrage zunächst aus der Datenperspektive. Wir finden:

1 (zum Beispiel in PHP-Sprache) Beschreiben Sie die ersten N Datenzeilen im Dreieck von Yang Hui

[
  [1],
  [1, 1],
  [1, 2, 1],
  [1, 3, 3, 1],
]

2. Zwischen den Datenzeilen gelten die folgenden Regeln:

1) Die Zahlen auf beiden Seiten jeder Reihe sind immer 1

2) Die Zahl in der Mitte jeder Reihe ist die Summe der beiden Zahlen am Schnittpunkt der vorherigen Reihe

Programmierer, wie viele Jahre können Sie das noch schaffen?

Daher kann ein Pseudocode verwendet werden, um diese Beziehung zu beschreiben:

F(1) = [1]
F(N) = [
    1,
    F(N-1)[0] + F(N-1)[1],
    F(N-1)[1] + F(N-1)[2],
    ...,
    F(N-1)[N-2] + F(N-1)[N - 1],
    1
]

Prozessperspektive

Als nächstes betrachten wir diese Interviewfrage aus einer Prozessperspektive. Der Prozess kann zunächst in zwei Schritte unterteilt werden: 1) Erhalten Sie die Daten der ersten N Reihen der Yang-Hui-Dreiecke. 2) Drucken Sie gemäß der im Diagramm gezeigten Ausrichtung.

Im ersten Schritt können wir basierend auf unserer vorherigen Datenanalyse ganz einfach das entsprechende Methodendesign zeichnen:

function yanghui_datas($n); // 获取前N行杨辉三角数据
function yanghui_line_datas($prev_line_data); // 依据前一行数据获取下一行数据

Im zweiten Schritt drucken wir entsprechend der Ausrichtung des Diagramms. Das reine Drucken ist sehr einfach, der Schlüssel liegt also in der „Ausrichtung“.

Die Lösung des Ausrichtungsproblems besteht darin, die entsprechenden Positionen leer zu lassen. Wir stellten jedoch fest, dass nicht klar war, wie die Leerstelle entfernt werden sollte. Denken Sie dann weiter darüber nach, was sind die schwierigen Probleme, die zu unklarer Logik im leeren Raum führen?

Durch die Analyse können Sie erkennen, dass, wenn Sie nur die ersten 5 Zeilen ausgeben müssen, jede Zahl eine einzelne Ziffer sein wird. Wenn Sie die 6. Zeile ausgeben möchten, beginnend mit Zehnerstellen. Es ist daher die Unsicherheit über die Breite der Zahlen, die hier die Schwierigkeit darstellt.

Umgekehrt betrachtet gibt es keine solche Schwierigkeit, wenn die Breite der Zahl bestimmt wird. Also:

Programmierer, wie viele Jahre können Sie das noch schaffen?

Wir legen jede Zahl in ein gleichbreites Raster. Auf diese Weise wird das gesamte Problem klar:

格子宽度 = 最大数字宽度 + 1
行前留白 = (LINE_COUNT - LINE_NO) * 格子宽度 / 2
格子内部: (数字居中)
左留白 = (格子宽度 - 数字宽度)  / 2
右留白 = 格子宽度 - 左留白 - 数字宽度

Nach der obigen Analyse erscheint der Code fast auf dem Papier.

// 获取前N行杨辉三角数据
function yanghui_datas($n_line) {
    $datas = []; 
    $prev_line_datas = []; 
    while ($n_line -- > 0) {
        $line_datas = yanghui_line_datas($prev_line_datas);
        array_push($datas, $line_datas);
        $prev_line_datas = $line_datas;
    }   
    return $datas;
}
// 通过前一行数据获取下一行数据
function yanghui_line_datas($prev_line_datas) {
    if (empty($prev_line_datas)) {
        return [1];
    }   
    $line_datas = []; 
    array_push($line_datas, 1); // 行首
    for ($i = 1; $i < count($prev_line_datas); $i ++) {
        array_push($line_datas, $prev_line_datas[$i - 1] + $prev_line_datas[$i]);
    }   
    array_push($line_datas, 1); // 行尾
    return $line_datas;
}
// 打印指定的杨辉三角数据
function yanghui_print($datas) {
    $space         = &#39; &#39;; // 留白字符
    $newline       = &#39;<br />&#39;; // 换行符
    $max_num       = yanghui_max_num($datas); // 最大数字
    $max_num_width = yanghui_num_width($max_num); // 最大宽度
    $unit_width    = $max_num_width + 1; // 格子宽度
    $line_count    = count($datas); // 行数
    foreach ($datas as $idx => $line_datas) {
        $line_no           = $idx + 1; // 行号
        $line_prefix_width = ($line_count - $line_no) * $unit_width / 2; // 行前留白数
        echo str_repeat($space, $line_prefix_width);
        foreach ($line_datas as $num) {
            $num_width   = yanghui_num_width($num); // 数字宽度
            $left_width  = intval(($unit_width - $num_width) / 2); // 格子内左留白宽度
            $right_width = $unit_width - $left_width - $num_width; // 格子内右留白宽度
            echo str_repeat($space, $left_width);
            echo $num;
            echo str_repeat($space, $right_width);
        }
        echo $newline;
    }
}
// 获取最大数
function yanghui_max_num($datas) {
    $max = 0;
    foreach ($datas as $line_datas) {
        foreach ($line_datas as $num) {
            $max = max($max, $num);
        }   
    }   
    return $max;
}
// 获取数字的宽度
function yanghui_num_width($num) {
    return strlen(strval($num));
}

Schließlich kommen die beiden Teile des Prozesses zusammen, um das gewünschte Ergebnis zu erzielen.

function yanghui_dump($n) {
    $datas = yanghui_datas($n);
    yanghui_print($datas);
}

Ergänzung

Einige Leute sagen, dass die Zahlen im Dreieck von Yang Hui direkt anhand der Koordinaten berechnet werden können. Es spielt keine Rolle, ersetzen Sie einfach den entsprechenden Teil der Daten.

Erleuchtung

Wenn wir mit Problemen konfrontiert sind, gibt es zwei Denkweisen: erfahrungsbasiert und fähigkeitsbasiert.

Erfahrungsdenken, durchsuchen Sie Ihre eigene Wissensbasis und stellen Sie fest, dass das Dreieck von Yang Hui ein zweischichtiger Zyklus sein sollte ist nicht in Ihrer Wissensdatenbank. Dann verfiel ich in tiefe Gedanken!

Fähigkeitsbasiertes Denken: Analysieren Sie zunächst die wesentliche Zusammensetzung des Problems, zerlegen Sie das Problem, wandeln Sie das komplexe große Problem in mehrere einfache kleine Probleme um, ziehen Sie die Kokons ab und suchen Sie nach Antworten auf jedes kleine Problem Ihre eigene Wissensdatenbank. Die Antwort löst letztendlich das Problem.

Die Vor- und Nachteile der beiden Denkweisen liegen auf der Hand. Erfahrungsbasiertes Denken eignet sich zur Lösung bestimmter, bekannter und einfacher Probleme, während fähigkeitsbasiertes Denken zur Lösung unsicherer, unbekannter und komplexer Probleme geeignet ist Probleme und ist anpassungsfähig.

Fähiges Denken durch Programmieren trainieren

Programmieren ist ein äußerst kreativer Beruf, der sich auf Logik und Schlussfolgerung konzentriert.

Bevor wir mit der Programmierung beginnen, müssen wir zunächst das Zielsystem aus der Perspektive spezifischer Probleme analysieren und dann müssen wir das Zielsystem aus einer abstrakten Perspektive analysieren, um Schlussfolgerungen auf einer höheren Ebene durchzuführen. Zwischen dem Konkreten und dem Abstrakten suchen wir ständig nach einer sinnvollen abstrakten Beschreibung der Realität.

Dieser Prozess der Analyse und Schlussfolgerung ist der Prozess, das Wesen der Dinge zu finden. Allerdings sind wir in unserer täglichen Arbeit mit einer Vielzahl komplexer Anforderungen konfrontiert und haben nicht viel Zeit, uns über die Designebene Gedanken zu machen. Die Realität hat uns zu gefragten Übersetzungsmaschinen gemacht.

Die meisten Programmierer sind eigentlich nicht bereit, dies zu tun, daher möchte ich ein Tutorial verwenden, um Studenten, die bereit sind, nach Änderungen zu suchen, zu helfen und das Erreichen solcher Änderungen zu fördern.

Im Jahr 2014 habe ich das derzeit vom Unternehmen verwendete Framework geschrieben. Es läuft seit mehr als 5 Jahren stabil und unterstützt mehr als 600.000 Zeilen Geschäftscode, verfügt jedoch nur über 6.000 Zeilen Code. In der nächsten Zeit werde ich es als Blaupause verwenden, aus der Perspektive des Umschreibens eines Frameworks den gesamten Prozess des Denkens, Analysierens, Entwerfens und Implementierens des Schreibens eines Frameworks umfassend reproduzieren und ihn in einem Video-Tutorial organisieren. mit Blick auf Es kann jedem helfen, das Gefühl des Programmierens zu finden. (Freiwillige Zahlung, kostenlose Weitergabe und Verbreitung)

Das gesamte Tutorial ist grob in 12 Vorlesungen unterteilt, jede Vorlesung hat ein eigenständiges Thema, jede Vorlesung dauert 1-3 Stunden und wird von einem öffentlichen Artikel begleitet. . Das Framework auf großer Ebene ist in drei Teile unterteilt: Interaktion mit der externen Umgebung, Kapselungsbeschränkungen auf der Geschäftsschicht und Hilfstools wie ORM.

Tutorial

Aufgrund der begrenzten Aussagekraft des Textes dient dieser Artikel nur als Einführung zur konkreten Analyse der Karriereentwicklung, des Wertes, den das Tutorial vermitteln möchte, und der Methode Um den Wert zu vermitteln, laden Sie bitte das Video-Tutorial herunter. Lernen Sie gründlich.

[Ein Schwert in zehn Jahren, Abstraktes Denken durch Frameworks verstehen] ist eine Reihe von Tutorials, die ich aufgezeichnet habe, um jedem zu helfen, Programme zu finden, indem der gesamte Prozess des Denkens, der Analyse, des Designs und der Implementierung der Entwicklung eines Frameworks nachgebildet wird. Design-Inspiration (freiwillige Zahlung, kostenlose Verbreitung und Weitergabe). Tutorials werden über den öffentlichen Account „Abstract Thinking“ veröffentlicht.

Was heute veröffentlicht wird, ist die erste Vorlesung „Die Bedeutung von Aufnahme-Tutorials“. Wenn Sie interessiert sind und ausführlicher lernen möchten, scannen Sie bitte den QR-Code, um das Video-Tutorial herunterzuladen (Adresse: https ://pan.baidu.com /wap/init?surl=IZ24Az5GFpQoQSD4WbfR8g Extraktionspasswort: rcga)

Das obige ist der detaillierte Inhalt vonProgrammierer, wie viele Jahre können Sie das noch schaffen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Was ist asynchrones PHP?Nächster Artikel:Was ist asynchrones PHP?