simotin13's message

simotin13といいます。記事の内容でご質問やご意見がありましたらお気軽にコメントしてください\^o^/

根性の本質は何か

ちょっと気になる記事を最近読んで、「根性」という言葉について思ったことを上げておきたいと思います。

storys.jp

この記事の話の中で、上司の方が、

低学歴の奴は勉強する根性さえ身についていない怠け者や。そんな奴に仕事ができるわけがない。

とこの話の投稿者の方に語られますが、実はこの上司の方と私も同じようなことを最近感じていました。

去年の夏にシステムプログラミング会という集まりに参加させて頂いたのですが、参加されている方に東大を卒業されている方が多かったようでした。

mcommit.hatenadiary.com

3流プログラマの私からすると信じられないくらい優秀な方々で、話しかけるのも畏れ多いような感じもして、自分の無能さに腹が立つと同時に皆さんの才能をうらやましく思いました。

ところが、話を聞いていると(東大を卒業されるような優秀な方達でも)勉強を苦痛と感じることがあって、それでもそういう時間を乗り越えた上で現在にたどり着いている人もいるということでした。※もちろん才能・天才という言葉でしか説明がつかないような方もいらっしゃると思いますが。

やはり、

「努力って大切なんだな」

と考えさせられる経験になりました。

同時に、

自分の能力が低いということは、

  • 努力していない
  • やる気がない
  • 根性が無い

といった側面があるのかもしれないと感じました。

根性というと体育会系のイメージがありますが、考えてみれば勉強するのも結構大変です。
地道に単語や年号を覚えたり、数学の難しい問題に取り組んだりするのはしんどかったりします。

甲子園に出場する野球部のイメージとかだと、部活の練習の時間は頑張って授業の時間は体力回復のために寝て勉強はまったくしないというイメージがあります。
※もちろん全ての高校球児がそうではないでしょうが、実際のところよくある話だと思います。

これって捉えようによっては、

好きなことだけやって、勉強はしないなんて根性無いやつや!

という見方のできると思います。

そもそも、

根性=辛くても耐えられる力・乗り越えられる力

というイメージがありますが、要は好きなことや到達したい目標のためであれば人間頑張れるものなんだと思います。

傍からみたらなんでそんなに頑張っているのか分からない・・・
すごいな、俺には無理だな・・・

といった気持ちを表現するために根性という言葉があるんだと思いますが、当事者が、好きなことや目標のためにやっていることであればそれを根性という言葉で表現するのは適切ではないような気がします。

要するに、根性の本質は

取り組んでいることがどれくらい好きか?

ということだと思います。
そこまで好きでなければ途中でやめてしまうという感じでしょうか。

体育会系的根性のメリット

ちなみに、体育会系的な根性と勉強を通して身につく根性の違いはなんでしょうか。

思いつくのは他者との関わりです。

勉強は一人でするもので、自分との闘い、自分と向き合う時間になりますが、スポーツなどは他人との関わりがあります。(個人競技であっても部活等の練習は集団でする事になりますし)

そういう意味では、体育会系的根性のある人は人との関わり方に耐性があるという点で優れているのではないかと思います。

人間という言葉が人の間と書くように、社会人として、人と人との関わりの中でしっかりと生きていけるというのは

文武両道

結局のところ、

「体育会系的根性もあるし、勉強で培った根性もある」

といういわゆる文武両道型人間が最強の存在なのかもしれません。
※う~ん、なんか欠点が無い人間って嫌な気もしますが・・・

一番大切なことは何か?

記事を書いてみて思ったことですが、

「あいつは根性あるな」と

言われるくらい頑張れるもの・好きなものを見つけること

が何よりも大切だと思いました。

どうすれば c++ の eof に対する違和感を抑えることができるのか?

C++でバイナリファイルの読み込みをしたいとき、ソースコードはこんな感じか。

#include <stdio.h>
#include <iostream>
#include <fstream>

using namespace std;

int main(int argc, char **argv)
{
	string filePath = "test.bin";

	ifstream fin( filePath.c_str(), ios::in | ios::binary );
	if (fin) {
	    unsigned char c;

	    while(!fin.eof())
    	{
	    	fin.read( ( char * ) &c, sizeof(unsigned char));
    		printf("[0x%02X]", c);
	    }

	    fin.close();
	} else {
		return -1;
	}

    return 0;
}

↓読み込むデータ(上記コードのtest.bin)としてこんなデータを用意してみます。

f:id:simotin13:20170217231956j:plain

出力


$ g++ main.cpp
$ ./a.exe
[0x00][0x01][0x02][0x03][0x04][0x05][0x06][0x07][0x08][0x09][0x0A][0x0B][0x0C][0x0D][0x0E][0xFF][0xFF]


おー!読めてる読めて、うん!?

[0xFF]が1個多い!?

何が起こってるんだ!?

調べたところ、eosはストリームの読み込みを行った上でファイルの終端に達したかを返してくれるそうです。
※上記コードはバイナリファイルの読み込みをしていますが、テキストファイルでもeosの挙動は同じです。

stackoverflow.com

stackoverflow.com


知らなかった・・・


C言語でもfgetcとかfgetsとか使うとループは終端まで読み込んでからEOFと比較するようなコードになります。

う~ん・・・C++ の eosの挙動もC言語の挙動との類似性を意識したものかもしれませんがどうもしっくりしません。

ビルドしたモジュールに使われているDWARFのバージョンを調べる

最近デバッガに興味を持ってDWARFのフォーマットについて調べていました。

DWARFの仕様については公式サイトで公開されています。

Download DWARF Standards

DWARFの仕様にはいくつかのバージョンが存在するのですが、

ビルド後のモジュールにどのバージョンのDWARF情報が含まれているのかがよく分かりませんでした。

いろいろ検索してみると、同じことを疑問に思われた方がいらっしゃいました。

stackoverflow.com

こちらのページに書かれている通り試してみると、


$ readelf --debug-dump=info a.out | grep -A 2 'Compilation Unit @'
Compilation Unit @ offset 0x0:
Length: 0xba (32-bit)
Version: 4

のような出力が得られて、確かに確認できました。

Compilation Unitにバージョンが格納されているんですね。

C言語のおすすめ書籍

C言語のシフト演算に関する記事を書いてから何冊かC言語の入門書を読み直したり、最近出ている書籍を読んでみました。
mcommit.hatenadiary.com


これまで私が読んできたC言語に関する書籍の中で、個人的に良かったと思う書籍を上げておきたいと思います。

Cプログラミング専門課程

ポインタは頭では理解できているけど、まだ十分に使いこなせないという初心者の頃にこの本を読んで一気にポインタの理解が深まりました。
この書籍では「メモリ」に焦点を当てて、しっかり説明されていて、初心者の私にも内容がスゥーッと頭に入ってきたことを覚えています。
残念ながら絶版になっているようですが、現代のC言語に合わせて再版して欲しいとてもおすすめの一冊です。

Cプログラミング専門課程

Cプログラミング専門課程

ふつうのLinuxプログラミング

初めてLinuxで開発をするときに読んでおくと役に立つ一冊です。
こちらの本も残念ながら絶版になっているようです。

本当は怖いC言語

上記のシフト演算に関する記事を書いた後、タイトルに惹かれて買ってみました。
タイトルからすると中級者向けのような印象を受けますが、内容は書学者のうちから読んでおきたい内容でした。
シフト演算の話もしっかり記載されておりますし、その他にコーディングをしていて気をつけないといけない事(0除算や桁溢れ・文字列操作等)についてもしっかり書かれています。

本当は怖いC言語

本当は怖いC言語

C言語 入門書の次に読む本

タイトルが入門書の次に読む本となっていますが、早い段階で読んでおきたい書籍だと思いました。
というのも、入門書ではC言語の書き方を学ぶことはできますが、C言語で実際にプログラムを書くときの常識であったり、作法のような内容についてはあまり説明がされないのが一般的です。
特に、独学でプログラミング言語を学習しているときはそういった部分で悶々と悩んだりしがちですので、身近に教えてくれる人がいないような場合はこの書籍を合わせて読みながら学習するとそういった点の疑問点が解消されてすっきりするんじゃないかなと思います。

C言語 入門書の次に読む本 [改訂新版] (プログラミングの教科書)

C言語 入門書の次に読む本 [改訂新版] (プログラミングの教科書)

感想

良書だと思う書籍がもう出版されていなかったりするのは寂しい限りです。
技術書自体があまり売れないということと、C言語を学ぶ人が減ってきているからなんだと思います。
Joel on Softwareでは

C言語はポインタと再帰が理解できない人を振るい落とすことができるがJavaではそれができない

という趣旨のことが書かれています。

最近流行りのJavascriptRuby,Pythonでも当然ポインタの概念を学ぶことはできません。
個人的には、今後C言語がすたれていったとしても、計算機に近いレイヤーを学ぶことのできる言語が必要な気がします。
(そういう役割を果たすのはLisp系とかになるのかな・・・)

労働と教育の未来を予想してみる

Twitterでもつぶやいたのですが、少し前にすき家でご飯を食べることがあったのですが、従業員がかなり残念なレベルでした。


AIとか人工知能とかロボットといったキーワードが語られることが多いですが、AIやロボットが普及した時にどういった未来になるのか、「労働」と「教育」という視点で考えてみました。

どうして「労働」と「教育」なのか

人工知能やロボットの技術が今後さらに進化した場合、よく言われることですが、人間がやっていることをロボットがやるようになると思います。

  • タクシー運転手の代わりに自動運転が普及する
  • 飲食店の給仕(配膳)をロボットが行う。
  • 各種サービス業(窓口業務)などをロボットが行う。

といったことはそう遠くない将来実現するのではないかと私は思います。

ロボットが人間に代わって働くようになった場合、人間はロボットと異なる仕事、もっというとロボットにはできないような仕事をする必要があります。

では、ロボットにできないような仕事とは何かというと

  • 高度な技術、センスなどが求められる仕事(キーワードを上げるとするならば、名人芸・職人・カリスマといった感じでしょうか)
  • 人間の感情を扱う仕事(人間関係・ウェット・営業・コンサルティング・カウンセリング・ヒアリング・接客業)

といった職種が思いつきます。

安価な労働力をこき使いたい奴が得をする

ロボットやAIが人間の代わりに仕事をするとなると大きく変化するのは当然「人件費」です。

例えばロボットであれば「深夜残業手当」も「休日出勤手当」などは不要ですし、24時間365日働かせても何も問題ありません。

ですので、Twitterでもつぶやいた通り、安い人件費で人手を沢山確保したいデフレ系企業や単純労働の多い工場等にとってはロボットは大変嬉しい存在になるはずです。

ブラックだブラックだと叩かれている企業も、ロボットを使って安くて安定した品質で製品やサービスを提供できれば、一転して優秀な企業として世間から評価される可能性があります。

マニュアル人間が損をする

ロボットが活躍する職種というのは単純作業やマニュアル化しやすい作業です。

単純作業やマニュアル化された作業をロボットがするようになれば、当然そこで働く人間は必要なくなります。

そうなった時に、そこで働く人間はどうするのか?

恐らくロボットの仕事を管理したり、ロボットには対応できない仕事(恐らく対人的な仕事)をする人が必要になるのでそういった仕事へとシフトしていく流れができると思います。

そういったロボットには対応できない仕事は、それまでの単純作業よりワンランク上の知性や能力が求められることになります。必要な人の数も従来の作業していた数よりは少なくなるでしょう。

管理する仕事にありつけなかった人はどうなるのか?

仕事にあぶれ職を求めることになりますが、世間には単純作業の仕事は恐らく限られており、また時給(単価)も今と比べて安くなるであろうと思います。

言われたことしかできない人、自分の頭で考えて行動できない人を指して「マニュアル人間」という言葉がありますが、プログラムされていないことはできないAIやロボットは人間ではないですが、まさしく「マニュアル人間」です。

しかし、学習する機能を持ったロボットであれば「マニュアル人間」以上に優れた存在になることは明らかです。

そう考えれば、仕事を得たいと思っている人間が最もしてはいけないことは、「マニュアル人間になること」です。

この考えは、以前ロボットと人間の違いについて考えた記事にも書きましたが、

相手の立場に立って考えて行動しない(愛の無い行動・心無い行動)をする人がいますがそういった人「マニュアル人間」として淘汰されていくんじゃないかと思います。
mcommit.hatenadiary.com

というより個人的には淘汰されて欲しいと思いがあります。

というのも、皆さんも1度や2度は経験されたことがあると思いますが、例えば市役所に行って窓口の人が

「ここの窓口ではそれはできないのでXXのところに行ってください」

とか

「必要な書類を揃えてからくてください」

などと無愛想な態度で応対されることがあります。

窓口業務はいわば接客業・サービス業なのでそのような応対をするのは本来仕事ができていないことになると思いますが、役所ではこういった人はときどき見かけます。
※もちろん親身になって丁寧に対応してくださる方の方が多い思いますが。

こういった人達の業務はロボットに置き換わってもサービスを受ける側の人間としてはデメリットは少ないです。
むしろ相手がロボットであれば、相手が機械だと初めからわかっている分感情的にはなりにくいでしょう。

役所の人側をフォローする立場で考えると、窓口にはちょっと変わった人やクレーマーのような人も一定の割合でくるので、受付業務は決して楽な仕事でもなければ楽しい仕事でもないかと思います。窓口の人がそう感じるのであればなおさらロボット化を進めてもよいかと思います。

これからどうすればよいだろうか

いろいろと書きましたが、今後人工知能やロボットの技術が進んでいく中で、マニュアル人間を量産しないような教育が必要なんじゃないかなと思います。

個人的には、

いろんなことを広く浅く学ぶのではなく、自分の好きなことを早く見つけて、長い時間それに取り組むような教育

が必要なんじゃないかなと思いますが、これからの社会と教育がどうなっていくのか気になるところです。