【IT】Linuxを生み出したリーナス・トーバルズが考える「優れたコード」とは何か? [田杉山脈★]

1: 田杉山脈 ★ 2020/12/09(水) 22:10:29.77 CAP_USER.net
プログラミングをする上で、コメントをきちんと残したり、わかりやすい変数名をつけたりして「読みやすいコード」を目指す作業は重要です。しかし、「読みやすいコード」と「優れたコード」の間には、時として構造上の大きな違いがあるのも事実。そんな「優れたコード」に対するLinuxの開発者リーナス・トーバルズ氏の考え方について、エンジニアのmkirchner氏が説明しています。 トーバルズ氏は2016年のTEDインタビュー内で「連結リストの実装方法」を例とし、自身の「優れたコード」に対する考えを説明しています。連結リストはデータを線形につなげたリストのことで、データを扱う構造のひとつ。具体的には「4」や「12」といった値そのものと「次の値」を示すポインタで構成される「ボックス」を順番につなげたものが連結リストです。 https://i.gzn.jp/img/2020/12/08/linked-list-good-taste/010_m.png 連結リストをC言語で実装したコードは以下。値そのものである「value」と次の値を示すポインタ「next」で「IntListItem」構造体が作られており、IntListItem構造体からボックスが生成されます。「IntList」構造体はリストの先頭を表す変数「head」を持っています。 https://i.gzn.jp/img/2020/12/08/linked-list-good-taste/020_m.png この連結リストからあるボックスを消去する処理について、スタンフォード大学の計算機科学講義「Computer Science 101(CS101)」で紹介されていたコードが以下とのこと。 https://i.gzn.jp/img/2020/12/08/linked-list-good-taste/030_m.png 上のコードが行っている処理はこんな感じ。まずはコードの以下の部分で「消去したいボックス」をリストの先頭から探索します。連結リストはリストの先頭からしか値をたどることができないので、まずリスト先頭のボックスのアドレスを「cur」ポインタに格納し、「prev」ポインタはNULLで初期化。curポインタが消去したいボックスのアドレスと一致するまで、curポインタを次のボックスのアドレスへと移しながら照合していきます。 https://i.gzn.jp/img/2020/12/08/linked-list-good-taste/040.png 先ほどの処理のイメージを図で表したものが以下。ちょうどprevポインタとcurポインタがリスト後部のボックスへスライドしていくようなイメージです。 https://i.gzn.jp/img/2020/12/08/linked-list-good-taste/050_m.png 以下ソース https://gigazine.net/news/20201208-linked-list-good-taste/


3: 名刺は切らしておりまして 2020/12/09(水) 22:24:08.28 eXttlEXM.net
かと言ってメンテ性より効率性に拘りすぎたソースは逆に使いにくい 集団でコーディングする場合は

5: 名刺は切らしておりまして 2020/12/09(水) 22:29:50.24 KsAvao0z.net
この人が亡くなったらLinuxどないなるんやろね

11: 名刺は切らしておりまして 2020/12/09(水) 23:35:57.63 IA5LH6VM.net
ポインタのポインタ

19: 名刺は切らしておりまして 2020/12/10(木) 01:02:22.22 tGsCzTXv.net
変数名がpじゃなかったら完璧

21: 名刺は切らしておりまして 2020/12/10(木) 01:15:50.61 J3xH0wAA.net
C言語ではポインタの比較ってしちゃいけないんじゃなかった? x86みたいなセグメントつきのアドレスだとおかしな事になる。

22: 名刺は切らしておりまして 2020/12/10(木) 01:16:38.48 JpU5m4mP.net
たまには変数名 xyzzzzzzとか言うのをデバッグしてみろ

24: 名刺は切らしておりまして 2020/12/10(木) 01:28:54.63 fwJx6gro.net
NULLぽしてるから優れたコードではない

25: 名刺は切らしておりまして 2020/12/10(木) 01:29:00.92 9kfzNoak.net
「優れた」の基準が明らかじゃないとな Cとアセンブリ言語でカツカツにチューンしたコードが速いのは間違いないし 高級言語で読みやすいコードが引き継ぎやすいのには変わりないからな

27: 名刺は切らしておりまして 2020/12/10(木) 01:51:37.22 O/kczejv.net
そんなことより、スペースでのインデントとか、コードブロック開始時の { をいちいち改行して1行費やす書き方に辟易している。 コードの文字数や行数で金貰っているのが多いのか?

37: 名刺は切らしておりまして 2020/12/10(木) 08:03:10.89 fQOKVRjn.net
>>27 単に読み易くしたいだけで、金の問題じゃないよw

38: 名刺は切らしておりまして 2020/12/10(木) 08:13:29.78 QBurfjQl.net
コイツが作ったのはそんな大したもんじゃなかったけどな 「オープン&フリー」という点では画期的だったけど

48: 名刺は切らしておりまして 2020/12/10(木) 09:55:55.46 PggGVhVa.net
ここ見てるだけでもいろんな優秀度について書かれてるから、まあ勉強になるね。

67: 名刺は切らしておりまして 2020/12/10(木) 19:48:53.33 M6pDwKgc.net
ListTreeGraph このあたりはデータ構造の基本中の基本

72: 名刺は切らしておりまして 2020/12/11(金) 00:23:26.48 Sgtdk4k4.net
予備知識無くても直感で組めるプログラム言語って無いですか?

74: 名刺は切らしておりまして 2020/12/11(金) 00:42:23.61 8Q5Tw9FU.net
いくら効率のいいコードを書いたつもりでも、 アセンブルソースを出すと、なんじゃこのムダな処理は、という世界じゃないのか?

80: 名刺は切らしておりまして 2020/12/11(金) 12:51:00.96 ezWHgrzc.net
linuxは作ったタイミングがすこぶる良かった 4.3BSDの訴訟問題が大きくて、リーナスも386BSDがあったらlinuxカーネル作ってなかったって言ってたはず UNIX系のカーネル実装をある程度フルスクラッチで書ける能力のある人がどれだけいるかと言われれば少なくない しかしそれを実際に実行し、モノにした人がどれだけいたかって所だね

93: 名刺は切らしておりまして 2020/12/12(土) 08:23:33.03 jquYNH7b.net
>>80 切っ掛けとしてタイミング良かったというのもあると思う。 同時に、Linuxがここまで大きくなったのは、Linusが何か持っていたからだろうね。 世界中の理解できないレベルのエンジニアから、OSSみたいな何でも言えてしまう場で尊敬を勝ち得たのは生半可なことではない。 彼らと技術的な議論をして、メッキが剥がれなかったのはLinusも本物だからだろうね。

86: 名刺は切らしておりまして 2020/12/11(金) 22:40:11.22 9w8znf4P.net
このスレのやつらのリーナス過小評価すげえな 凄い人が集まってるんだな でもsvnディスってgitを作ったりする辺りやっぱり凄い人なんだと思うけどな

88: 名刺は切らしておりまして 2020/12/12(土) 02:16:52.32 oHgXmQ44.net
?

90: 名刺は切らしておりまして 2020/12/12(土) 06:52:02.39 7SIwehje.net
昔、秋葉原のショップがリーナス夫妻を呼んでイベントやった時は 20人ぐらいしか集まらずに静かなイベントだったな 確かTurbo Linuxの発売イベントだった

引用元: http://anago.2ch.sc/test/read.cgi/bizplus/1607519429/

人気記事ランキング

コメントを残す

このページの先頭へ