Maison  >  Article  >  développement back-end  >  Programmeur, combien d'années encore pouvez-vous faire ça ?

Programmeur, combien d'années encore pouvez-vous faire ça ?

雷果国
雷果国original
2020-06-19 10:55:10176parcourir

La vague technologique est sans fin. Une fois la vague retirée, que nous restera-t-il de la méthodologie ? Ou une technologie obsolète ?

------

Nous, les programmeurs, aimons toujours parler de la soi-disant « malédiction des 35 ans », comme si la « malédiction des 35 ans » avait devenir un brevet pour les programmeurs. Pourtant, en réalité, l’âge de 35 ans est un problème auquel sont confrontés les professionnels de tous horizons.

Fondamentalement parlant, l'âge de 35 ans est le tournant lorsque les gens atteignent l'âge mûr. Si notre valeur au travail repose davantage sur la force physique, alors nous sommes forcément confrontés au dilemme du développement de carrière qui commence à décliner.

La programmation est à l'origine un travail très créatif qui valorise la pensée abstraite et la déduction logique. Cependant, bon nombre d'entre nous traitent la programmation comme un travail transactionnel, aussi ennuyeux que l'eau. vieux La malédiction" nous hantera.

Dans un groupe social, différentes personnes ont des choix différents. Je n'ai aucune intention et je ne peux pas changer l'environnement général, mais j'espère aider les programmeurs prêts à combattre la « malédiction des 35 ans » à en trouver. direction. Donnez-lui encore quelques années !

À partir d'une question d'entretien

Le Triangle Yang Hui est une question que je pose souvent lors des entretiens : "Veuillez programmer et afficher les N premières lignes du Triangle Yang Hui selon le format spécifié."

Programmeur, combien dannées encore pouvez-vous faire ça ?

La plupart des candidats ont commencé à coder après avoir répondu à la question. Ils ont d'abord écrit une boucle à deux couches, puis ont commencé à réfléchir à la condition de terminaison de la boucle. une réponse à laquelle vous ne croyez même pas. L’un des moments les plus impressionnants a été celui où un candidat de WeChat Pay a uniquement fourni une méthode pour obtenir les N premières lignes de données, mais n’a toujours pas réussi à trouver un moyen de les imprimer dans le format spécifié.

Beaucoup de gens diront qu'ils ont oublié l'algorithme après avoir quitté l'école pendant plusieurs années. Ce genre de question devrait être posée aux élèves recrutés par l'école. Je ne pense pas. Ce qui m'intéresse, ce n'est pas un algorithme spécifique, mais l'idée d'analyser et de résoudre des problèmes. Nous pouvons oublier certains algorithmes spécifiques, mais tout en les oubliant, nous devons internaliser les idées de résolution de problèmes contenues dans les algorithmes dans nos propres armes.

Ensuite, permettez-moi de vous présenter comment je vois ce problème.

N. Wirth, lauréat du Turing Award, a proposé "Programme = Algorithme + Structure de Données", j'ai plus l'habitude de dire "Programme = Données + Processus".

Perspective des données

Tout d'abord, examinons cette question d'entretien du point de vue des données. Nous pouvons trouver :

1 Vous pouvez utiliser un tableau bidimensionnel. (en langage PHP Par exemple) Décrivez les N premières lignes de données du triangle de Yang Hui

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

2. Il y a les règles suivantes entre les lignes de données :

1) Les nombres des deux côtés de chaque ligne sont toujours 1

2) Le nombre au milieu de chaque ligne est la somme des deux nombres à l'intersection de la ligne précédente

Programmeur, combien dannées encore pouvez-vous faire ça ?

Par conséquent, un pseudocode peut être utilisé pour décrire cette relation :

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
]

Perspective du processus

Ensuite, regardons cette question d'entretien du point de vue du processus. Tout d'abord, son processus peut être divisé en deux étapes : 1) Obtenir les données des N premières rangées de triangles Yang Hui 2) Imprimer selon l'alignement indiqué dans le diagramme ;

La première étape, sur la base de notre analyse précédente des données, nous pouvons facilement dessiner la conception de la méthode correspondante :

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

La deuxième étape, imprimer selon l'alignement du diagramme. L'impression pure est très simple, la clé est donc « l'alignement ».

La façon de résoudre le problème d'alignement est de laisser les positions correspondantes vides. Mais nous avons constaté qu’il n’était pas clair comment laisser un espace vide. Alors réfléchissez plus loin, quels sont les problèmes difficiles qui conduisent à une logique floue dans l’espace vide ?

Grâce à l'analyse, vous pouvez voir que si vous n'avez besoin d'afficher que les 5 premières lignes, alors chaque nombre sera constitué d'un seul chiffre. Si vous souhaitez afficher la 6ème ligne, il y aura alors des dizaines de chiffres. C’est donc l’incertitude sur la largeur des chiffres qui crée ici la difficulté.

En pensant à l'inverse, si la largeur du nombre est déterminée, il n'y aura pas une telle difficulté. Donc :

Programmeur, combien dannées encore pouvez-vous faire ça ?

Nous mettons chaque numéro dans une grille de largeur égale. De cette façon, tout le problème est clair :

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

Après l'analyse ci-dessus, le code apparaît presque sur le 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));
}

Enfin, les deux parties du processus se réunissent pour produire le résultat souhaité.

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

Supplément

Certaines personnes disent que les nombres dans le triangle de Yang Hui peuvent être calculés directement en fonction des coordonnées. Cela n'a pas d'importance, remplacez simplement la partie correspondante des données.

Illumination

Lorsque nous sommes confrontés à des problèmes, il existe deux modes de pensée : basé sur l'expérience et basé sur les capacités.

Pensée expérientielle, recherchez dans votre propre base de connaissances et découvrez que le triangle de Yang Hui devrait être un cycle à deux couches, donc vous commencez à l'exécuter après avoir exécuté une étape, vous constatez que vous êtes bloqué sur la suivante. la question ne fait pas partie de votre base de connaissances. Ensuite, je suis tombé dans une profonde réflexion !

Pensée basée sur les capacités, analysez d'abord les composants essentiels du problème, décomposez le problème, convertissez le gros problème complexe en plusieurs petits problèmes simples, décollez les cocons et recherchez les réponses à chaque petit problème dans votre propre base de connaissances La réponse résout finalement le problème.

Les avantages et les inconvénients des deux modes de pensée sont évidents. La pensée basée sur l'expérience est adaptée à la résolution de problèmes certains, connus et simples, et est plus efficace pour résoudre des problèmes incertains, inconnus et complexes ; problèmes et est adaptable plus large.

Exercer une réflexion capable grâce à la programmation

La programmation est un travail hautement créatif qui se concentre sur la logique et la déduction.

Avant de commencer la programmation, nous devons d'abord analyser le système cible du point de vue de problèmes spécifiques, puis nous devons analyser le système cible d'un point de vue abstrait pour effectuer des déductions à un niveau supérieur. Entre le concret et l’abstrait, nous délibérons constamment pour trouver une description abstraite raisonnable de la réalité.

Ce processus d'analyse et de déduction est le processus permettant de trouver l'essence des choses. Cependant, dans notre travail quotidien, nous sommes confrontés à un grand nombre d’exigences complexes et n’avons pas beaucoup de temps pour réfléchir au niveau de la conception. La réalité a fait de nous des machines de traduction de la demande.

La plupart des programmeurs ne sont en fait pas disposés à faire cela, je souhaite donc utiliser un didacticiel pour aider les étudiants qui sont prêts à rechercher des changements et à promouvoir la réalisation de tels changements.

En 2014, j'ai écrit le framework actuellement utilisé par l'entreprise. Il fonctionne de manière stable depuis plus de 5 ans et prend en charge plus de 600 000 lignes de code métier, mais il ne compte que 6 000 lignes de code. Dans la prochaine période, je vais l'utiliser comme modèle, du point de vue de la réécriture d'un cadre, reproduire de manière exhaustive l'ensemble du processus de réflexion, d'analyse, de conception et de mise en œuvre de l'écriture d'un cadre, et l'organiser dans un didacticiel vidéo, en vue de Cela peut aider tout le monde à retrouver le sentiment de programmation. (Paiement volontaire, partage et diffusion gratuits)

L'ensemble du tutoriel est grossièrement divisé en 12 conférences, chaque conférence a un thème indépendant, chaque conférence dure 1 à 3 heures et est accompagnée d'un article de compte public. . Le cadre à grand niveau est divisé en trois parties : l'interaction avec l'environnement externe, les contraintes d'encapsulation sur la couche métier et les outils auxiliaires tels que ORM.

Tutoriel

En raison de l'expressivité limitée du texte, cet article n'est utilisé qu'à titre d'introduction pour une analyse spécifique du développement de carrière, de la valeur que le tutoriel veut transmettre et de la méthode. utilisé pour transmettre la valeur, veuillez télécharger le didacticiel vidéo Apprenez en profondeur.

[One Sword in Ten Years, Understanding Abstract Thinking through Frameworks] est une série de tutoriels que j'ai enregistrés pour aider tout le monde à trouver des programmes en recréant l'ensemble du processus de réflexion, d'analyse, de conception et de mise en œuvre de développement d'un cadre. Inspiration de conception (paiement volontaire, diffusion et partage gratuits). Les tutoriels seront publiés via le compte public « Abstract Thinking ».

Ce qui est publié aujourd'hui est la première conférence « La signification des didacticiels d'enregistrement ». Si vous êtes intéressé et souhaitez en savoir plus, veuillez scanner le code QR pour télécharger le didacticiel vidéo (Adresse : https : //pan.baidu.com /wap/init?surl=IZ24Az5GFpQoQSD4WbfR8g Mot de passe d'extraction : rcga)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn