14
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

今すぐ辞めて欲しい、「高級言語勉強してます」

Last updated at Posted at 2013-07-24

元ネタ
今すぐ辞めて欲しい、「Ruby on Rails勉強してます」「CakePHP勉強してます」
http://blog.sumyapp.com/2013/07/no-recommend-rails/

なぜかみんな「シーってイケてる技術だよね」「シーっだったらこんなこともいとも簡単にできちゃうんだよね」みたいな印象を持っている。もちろん、それは間違いではない。フォートランは早い。ライブラリもたくさんある。弾道計算なんて昔は数人月かけて作ったものだが、いまはmath.hなんて使えば、1人日で出来てしまうほどのものだ。

自動車のABS(アンチロック・ブレーキ・システム)なんかとは全く違う。ABSはあくまでブレーキがロックしてしまう事象を発生しないようにアシストしてくれるシステムである。

Hello worldと出力しようとした場合下記のようなコードが必要になる。

helloworld.c

#include<stdio.h>
int main(){printf("hello world!");}

これをコンパイルすると、

helloworld.s
	.file	"hellowrld.cc"
	.section	.rodata
.LC0:
	.string	"hello world!"
	.text
	.align 2
.globl main
	.type	main, @function
main:
.LFB2:
	pushq	%rbp
.LCFI0:
	movq	%rsp, %rbp
.LCFI1:
	movl	$.LC0, %edi
	movl	$0, %eax
	call	printf
	movl	$0, %eax
	leave
	ret
.LFE2:
	.size	main, .-main
.globl __gxx_personality_v0
	.section	.eh_frame,"a",@progbits
.Lframe1:
	.long	.LECIE1-.LSCIE1
.LSCIE1:
	.long	0x0
	.byte	0x1
	.string	"zPR"
	.uleb128 0x1
	.sleb128 -8
	.byte	0x10
	.uleb128 0x6
	.byte	0x3
	.long	__gxx_personality_v0
	.byte	0x3
	.byte	0xc
	.uleb128 0x7
	.uleb128 0x8
	.byte	0x90
	.uleb128 0x1
	.align 8
.LECIE1:
.LSFDE1:
	.long	.LEFDE1-.LASFDE1
.LASFDE1:
	.long	.LASFDE1-.Lframe1
	.long	.LFB2
	.long	.LFE2-.LFB2
	.uleb128 0x0
	.byte	0x4
	.long	.LCFI0-.LFB2
	.byte	0xe
	.uleb128 0x10
	.byte	0x86
	.uleb128 0x2
	.byte	0x4
	.long	.LCFI1-.LCFI0
	.byte	0xd
	.uleb128 0x6
	.align 8
.LEFDE1:
	.ident	"GCC: (GNU) 4.1.2 20080704 (Red Hat 4.1.2-54)"
	.section	.note.GNU-stack,"",@progbits

これは尋常ではない。まるで核ミサイルの発射スイッチのようである。
核の発射スイッチはむしろまだ単純だ。押したら破裂する。結果が明白である。

helloworld2.s
.text
	.global	_start
_start:
	movl	$len, 	%edx
	movl	$msg, 	%ecx
	movl    $1, 	%ebx
	movl    $4, 	%eax
	int	  $0x80
	
	movl	 $0, 	%ebx
	movl    $1,	%eax
	int	 $0x80
.data
msg:
	.ascii "Hello World\n"
	len = . - msg

こう書けばすむ話である

movl call leave
どれもプログラマにとっては当たり前のキーワードだが、%eaxって何?って人がほとんどなのではないだろうか?

一体、「高級言語勉強してます」といった人の内どれだけが、この自動生成された各種のコードを理解しているのだろうか?
「高効率」「最先端」みたいなキーワードに踊らされている初心者が多すぎるのではないだろうか?

K&Rの頃はまだよかった。まだその程度の機能量ですんでいた。
C99なんて狂気の沙汰だ

自動化は「既にルーチン化できるようになったもの」に対して行うべきだ。未知のものを自動化するのは狂気だ。

この記事にぐさっときた人、プログラミング初心者にとっておすすめしたいのはこの書籍だ。

CPUの創り方

というわけで、本記事のまとめ。

  1. つけびして
  2. 煙り喜ぶ
  3. 田舎者
14
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?