С какими людьми Линусу нравится работать?

Linux

Линус Торвальдс известен своим «вспыльчивым характером», и он будет драться, когда увидит вещи, которые доставляют ему дискомфорт, например:

  • Однажды он сказал, что исправления ошибок, представленные Intel, были полным вздором!

  • Когда другие говорят, что Git не разработан в C ++, он счетчики, что «C ++ - ужасный язык»

  • Он опрыскивал других Pull запрос: ваш код дерьма .....

  • Он разглагольствует, что XML, наверное, самый худший формат из когда-либо существовавших...

  • Он даже сказал «Итак, NVIDIA, Fxxk you» прямо в камеру и показал средний палец.

Некоторые люди говорят, что это гениальная личность, но такая личность действительно оскорбляет многих людей.В сентябре прошлого года он отправил электронное письмо, чтобы провести самоанализ, сказав, что он может посмотреть в зеркало и извиниться за свои личные нападки. замечания.

Мне немного любопытно, руководя крупнейшим в мире проектом с открытым исходным кодом, кем Линус восхищается, уважает и с кем работает?

Видео TED с докладом Линуса «Разум позади Linux» дает подсказку.

(ps. Линус не любит выступать на публике, если ему приходится посещать какие-то мероприятия, он предпочитает беседу один на один с ведущим, что позволяет ему чувствовать себя комфортно)

В этом интервью показаны два фрагмента кода (псевдокода), которые выполняют одну и ту же функцию, первый из них:

remove_list_entry(entry){    prev = NULL;    walk = head;    // Walk the list    while (walk != entry){        prev = walk;        walk = walk -> next;    }    // Remove the entry by updating the     // head or the previous entry    if (!prev)        head = entry->next;    else        prev->next = entry->next;}скопировать код

Студенты, изучавшие структуры данных (даже если вы не изучали указатели на языке C), предполагают, что вы можете понять общий смысл этого кода: Это удаление узла в односвязном списке.

(Этот код не учитывает тот факт, что удаляемый узел не находится в связанном списке.)

Поскольку это отдельно связанный список, когда ищете узел, необходимо постоянно записывать узл перед узлом (Prev)

Кроме того, этот код также учитывает особый случай, узел для удаления не является промежуточным узлом, а главный узел. Даже в этом особом случае этот код довольно легко понять, большинство людей напишет такой код, и школьные учителя будут научить нас таким образом.

Затем Линус дает другой фрагмент кода (псевдокод), выполняющий ту же функцию.

remove_list_entry(entry){    // The "indirect" pointer points to the     // *address* of the thing we'll update    indirect = &head;    // Walk the list, looking for the thing that    // poins to the entry we want to remove_list_entry    while ((*indirect) != entry){        indirect = &((*indirect)->next);    }    // .. and just remove it    *indirect = entry -> next;}скопировать код

Мое первое впечатление, когда я вижу этот код, это то, что он очень лаконичен, if else вообще нет, независимо от того, удаляете ли вы головной узел или средний узел, его можно выразить с помощью одной и той же логики.

Но этот код использует указатели на указатели, и мне потребовалось некоторое время, чтобы понять, как именно это работает. После понимания оказывается, что это действительно более элегантный подход. Устранено, если еще, устранено предыдущее.

Я изначально хотел использовать изображение, чтобы выразить его, но я обнаружил, что это немного хлопотно, чтобы нарисовать этот косвенный процесс изменений. Вы можете дать полную игру к своему воображению и составить свой собственный разум.

Ключевой пункт является первым косвенным указателем, указывающим на головной адрес второго пункта к адресу узла 1. Ник, третья точка - это адрес 2.Next.

Сравнив два фрагмента кода, Линус сказал:

Первый фрагмент кода не годится, нужно различать первый узел и средний узел, есть особые случаи.

Второй фрагмент кода показывает другой взгляд на проблему. Он может обрабатывать особый случай, как если бы это была нормальная ситуация. Это хороший код.

Мне просто нравится работать с людьми, у которых «вкус» кода лучше.

Хороший «вкус» кода позволяет вам видеть проблему в более широком контексте и инстинктивно знать, как делать все правильно и хорошо.

Эти два куска кода являются просто простыми примерами, они даже не идеальны, но я понимаю, что означает линус, и вдохновение дает нам: при написании кода мы должны попытаться подумать о проблеме с более высокого уровня, найти Более абстрактное, более общее решение, а не просто наполнение всех случаев, если иначе, этот тип кода трудно понять и трудно поддерживать.

Элегантный код — это не только правильное форматирование и именование, это больше способ мышления и уровни абстракции, а также хороший дизайн.

Вы могли бы

О Лао Лю и Code Farmer

я нить

Я Java-класс

Объектно-ориентированная Библия

Почтальон Мин из TCP/IP

ЦП Форрест

Принцип балансировки нагрузки

История, которую стоит рассказать HTTP

Вершина языков программирования

Ява: рождение империи

JavaScript: контратака диаоси

Язык Си: Идя домой во время праздника Весны, я обнаружил, что только у меня нет объекта