レベルエンター山本大のブログ

面白いプログラミング教育を若い人たちに

BLOCKVROCKリファレンス目次はこちら

ソフトウェアエンジニアの独立というキャリアパス

ソフトウェアエンジニアには、常にキャリアパスとして独立というルートが存在しています。

35歳の転機

古くから語られている通り、ソフトウェアエンジニアの35歳には転機があります。
「まっとうな人は、繰り返しを馬鹿馬鹿しく感じ」
「賢い人は、すでに去っており」
「まっすぐな人は、極める快感に酔いしれる」
また、
「仕事の対象がコンピュータから完全に人へシフトする」
「描いていた人生の必要経費と、将来の給与の限界が折り合わなくなる」
という時期だと思います。

僕がソフトウェア開発の業界に就職した2000年ごろ、35歳のソフトウェアエンジニアのロールモデルはあまり存在していませんでした。
だから「35歳定年説」を聞いたときも、「じゃあ35歳以降どうなるの?死ぬの?」って思っていました。

現実の35歳

現実には35歳を超えた私の周りでは元ソフトウェアエンジニアが、自分たちで産んだ価値を、自分たちの対価にかえるというモチベーションで起業をすることが増えてきました。

もちろん会社に所属して頑張る人も沢山いますし、それぞれのキャリアを描いていることにケチをつけるものではありません。
起業のリスクはとても大きくて、半泣きになって会社勤めに戻りたいと思う時もあります。

でも、キャリアの転機において、独立という選択肢が残されているソフトウェアエンジニアは、なかなか良い職業だと感じているって話です。

ござ先輩のクオリティスタート

さて、この6月に「ござ先輩」こと湯元堅隆さんが起業して株式会社クオリティスタートという会社を立ち上げました。

ござ先輩は、SIerでソフトウェア開発やコンサルティングのキャリアを積み、その後「これからは事業会社をIT会社に変革していくのがSIerのミッション」との信念で、流通系の企業のIT部門長として仕事をされていました。

とか今更紹介するまでもなく、エンジニアブロガーの有名人です。

ござ先輩の生み出したクオリティスタート社がやろうとしていることは「事業会社をIT会社に変革する」ことですが、その手段として、顧問弁護士や顧問税理士などのように「顧問エンジニア」というスタイルを生み出そうとしていること、併せて「業務システム自動生成ツール」を使ったビジネスを展開していくとのことです。
MOD99ご説明資料.pdf 直

顧客目線とIT目線の両方を持ち合わせたござ先輩らしい進め方だと感じています。
ソフトウェアの自動生成と顧問エンジニアの組み合わせは、IT化されていない主に中小の企業にとっては、導入しやすいサービスではないでしょうか。

ステマで、互助会だといわれるかもしれませんね。。。でもとても良いロールモデルだとおもったのです。

まとめ

少ない設備投資で、価値を生み出すことができるのがエンジニアであり、起業にはとても向いています。

ビジネスを作ろう。小さなものでもいい。それがエンジニアの代表作というものだ。
そういう働き方が、一つの35歳以後の姿かなと思います。

プログラミングを学ぶべき理由

2020年に小学校でプログラミングの授業が必修化することに関連して、プログラミング学習の理由について、議論が活発になっています。

私は、プログラミングは「コンピュータとの対話の手段」であり、本当の目的はコンピュータを知り、使いこなす方法を学ぶということだと考えています。

若い世代にとって、スマホを含めコンピュータに接する時間はどんどん長くなっています。
親しい隣人とも呼べるコンピュータを制御し使いこなすことができることは、頼れる相棒を生涯にわたって持つということだと言えます。

プログラミングは論理的思考を学ぶために有効か?

プログラミング学習の義務教育化に向けて、「プログラマーばかり育ててどうする」という外部からの声に反論するために、プログラマーを育てるのではなく、論理的思考を育てるのだ」とその目的を表現したりします。

体育が必修だからといって、全員がオリンピック選手を目指さなくてもよいように、プログラミングを学んだからといって、全員がプログラミングを仕事にしなくても良いのです。

確かに、全員がプログラミングを仕事にしなくても良いと思います。そこは同意。

ですが後半の「論理的思考を育てる」という部分には少々疑問があります。
プログラミングをするときに論理的思考は必要ですが、それを学ぶのにもっと効率の良いやり方はあると思います。
例えば、正しい国語を学ぶことや数学を学ぶことです。

Viscuitの開発者である原田さんのブログで共感した部分です。
http://devroom.viscuit.com/2016/10/02/%E8%AB%96%E7%90%86%E7%9A%84%E6%80%9D%E8%80%83%E3%81%AE%E5%90%91%E4%B8%8A%E3%82%92%E7%9B%AE%E6%8C%87%E3%81%95%E3%81%AA%E3%81%84%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E6%95%99/

論理的思考能力を鍛えたければ,他のもっといい方法があります.よく考えたゲームとか.プログラミングは筋が悪いです.

モダンな(笑)プログラミングは論理的を求めてはいません.

実はひどいプログラミングツールを使ってプログラムを作らなければならない場合に,論理的思考能力がなければなにもできない,ということがあります.上記「プログラミング教育は論理的思考能力の向上を目指す」と主張している人たち,そしてそれに反論している人たちは,ひどいプログラミングツールを使ってプログラム作った(しかし動かなかった)という経験が強く残っていて,そんな狭い考えに支配されているのだと思います.ここで言えるのは,ひどいプログラミング=論理的思考能力必須 です.

わざわざプログラミングを学ばなくても論理的思考は学べます。
「プログラミングを学ぶ」ことがありきで、目的をカッコよく後付けしただけのように感じます。

実際、子供さんをコンピュータに長時間触れさせることは、親御さんからのウケは悪いものです。

そこに、別角度の目的を据えて反論を逸らしていますが、本音を言えば「世界的にプログラミングが価値ありとされている中、日本が置いていかれるのはまずい」ということでしょう。


私は、「コンピュータでできることと、できないこと、そして次の可能性を知る」という目的が良いように思っています。
コンピュータは、この先も長らく人類の頼れる隣人になると思います。
偏屈で頑固でこだわり屋だけど、能力は高いという困った隣人のことをよく知りましょうという目的です。

正しい知識がなければ、「AIが人類を滅ぼすかも」みたいな不安に駆られることでしょう。
「写真に写ると魂が抜かれる」的ですね。
人類を滅ぼすとしたら、AIよりよっぽど人間のほうが怖いと思います。

コンピュータを怖がらずに武器として、道具として使いこなすこと。

それが若い人みんなに習得して欲しい力です。

株式会社レベルエンターは、昨年2015年7月に設立しており、この7月1日で2期目に入りました。

正直なところ、大きな不安の中で模索する日々でしたが、様々な人のご支援や温情により、なんとか1年やってこれました。
ビジネスが軌道に乗っているとはまだまだ言えません。
しかし僕らにしかできないこと、僕らが世の中に打ち出せることが見えてきました。
ワクワクする期待や希望はとても大きくなってきています。
2期目は、企画段階から世に出していく段階へ進めていきたいと思います。

会社としては、1期分の一通りの出来事を経験したことと、
背伸びして従業員さんを雇い入れられたことが、大きな成果だと感じています。

この1年間は、自分たちの実力を蓄える時間と位置付けていました。
でも2期目は、我々らしさをきちんと打ち出して行こうと思っています。

これからもレベルエンターを宜しくお願い致します。

SIerに勤めるあなたが出世できないとしたらそれは質問力だろう。

タイトルは釣りだけれども、やっぱり質問力は大事。

僕は質問力が100中、0から10ぐらいの新卒さんや学生さんたちに教える仕事をしている。

彼らに伝えたい事は山ほどある。そしてそれは今のうちに身につけているととても大きな武器になる。
質問力は新人だろうが、ベテランだろうが関係なく必要な仕事力であると思うのだ。
なぜなら、新人は先輩に質問するが、ベテランもクライアントに質問するのだ。


質問をするときにきにするべきポイントは以下だ

・「目的」どういうことを実現したいと思っているのか

・「推測」そのために自分は何ができるのではないかと思っている

・「報告」どこまでは調べたのか、そして、どこまでは自分が理解できているかという「理解の表示」も含める
 
・それらをできれば図示を交えること

こういった観点を踏まえて質問することができれば
達成したい目標をいち早く達成することができるかもしれない。

新入社員さんへ伝えたい行動規範48カ条

新入社員さんがええ感じになってきた頃合、お伝えしたい48カ条をまとめておきます。

責任

1.人のせいにせず自分の責任と考えよう
2.中途半端で満足せず成し遂げよう
3.ポジションや責任を与えられたら成長のチャンスと捉えよう
4.他人より先に動こう
5.自ら決定しよう。責任を負おう。責任こそが仕事の本質
6.与えられたチャンスにはとりあえず乗っかろう
7.横並び意識を捨てよう
8.悪くならない可能性よりも良くなる可能性を選択しよう
9.アウトプットの質にこだわろう
10.よりよくしよう、現状維持は悪と考えよう

習慣

11.生活習慣を重視しよう。日々の積み重ねに価値をおこう
12.若い頃は仕事を中心に置こう、それはプライベートを含めた「人生」を充実させるため
13.本を読もう。読む習慣をつけよう
14.「深く狭く」その先に広がりがあるから
15.調べる回数はできるだけ少なく決心しよう。同じことを100回調べるより行動して知ろう
16.記録しよう。記録して測定しよう
17.事実に対して、意見と仮説をもとう
18.見えない属性を見よう。例えば人の情緒が効率に及ぼす影響を考えてみよう

自己研鑽

19.自分の特徴を構築してよう。同世代と比べて特徴をプロデュースしよう
20.自分を分析しよう。強み弱みを問われたときにどう答えるか常備しよう
21.自分の価値を高める努力をしよう。自分を安売りしてはいけない
22.他人を信頼しよう。自分には厳しく懐疑しよう
23.目標をもとう
24.平穏よりも刺激を求めよう。そうすれば変化に強くなるから
25.自らの目で確かめよう。とりあえず作ってみよう
26.自分の記憶を疑おう

行動

27.熟考よりも行動を優先しよう。考えれば考えるほど行動しにくくなるから
28.振り返りをしよう。反省しよう
29.素直にあやまろう
30.未来のチャンスにしがみつこう、今の安全または過去の栄光は捨てよう
31.挑戦と困難を楽しもう
32.トラブル解決に取り組もう。問題の対応は、新しい物の創造と同じく価値がある

コミュニケーション

33.人の話を聞こう。人の話は遮らず最後まで聞こう
34.反論するなら代替案を出そう
35.自分は口下手だと思っていればこそ説明上手になる努力をしよう
36.自分の正義を押し付けるのではなく、相手の正しさも認めよう
37.一度言った事でも間違っていたら覆す勇気を持とう
38.伝える方法を模索しよう
39.上司と信頼関係を築こう。上司の当たり外れは、あなたの責任も半分あると知ろう
40.チームへの貢献を優先しよう
41.人間関係を地道に、農業のように構築しよう。畑を耕し種をまきじっくり待とう。とりあえずの利益より信頼の構築をめざそう
42.意見の不一致を大事にしよう。意見の一致を嫌おう
43.上と比べよう。社外の人や目上の人と付き合おう

仕事

44.無駄に費やす時間を見直そう。時間についての改善は大きな宝であると知ろう
45.仕事が終わってから翌日の仕事のことを考えよう。仕事場についてから昨日取り組んだ問題について思い出すのでは効率がまったく悪いから
46.必要性のない仕事は疑おう。行わなくても良いかもしれない可能性を考えよう
47.優先順位を決めよう。決めてから進もう
48.現在の仕事の進め方に疑問を持とう。既存踏襲は常に遅れをとっていく道だと思おう

新入社員さんや学生さんへ教える技術と方法論

レベルエンターという会社は、プログラミングを学生など若い人たちに教える会社ですが、プログラミングに限らず、あらゆる学習について言える僕の気づきがあります。
それは仕事として取り組んだ経験がなければ、まるで我々が高校でならった「数学」の授業のように、将来なんの役に立つかわからず学んでしまうということです。

僕は10年以上、IT企業向けの派遣講師としてプログラミングを教えてきたのですが、プログラミングを仕事として経験した人と比較して新入社員や学生では、効果を上げる方法論が180度違うということに気づきました。

新入社員は業務経験がありません。それは我々業務経験者が思っている以上に学習効果に影響します。現場で役立つ技術だけを教えても、あんまり身になりません。必要性がわからないのです。

それに対して業務経験者は、現場経験に照らして今教えられていることがどれほど価値があるかを判断できます。だから技術だけ教えた方が効率良く学べます。


我々は、上記の理由で新人さんや学生さんは、グループワークを重視し、かつコミュニケーションを重視して伝えています。また、カリキュラムの進め方的にもコミュニケーションなしには成果があがらないように設計しています。

新入社員や学生は、覚えるべきことが何の役に立つのかピンとこないので、チームに貢献するという目的をもたせて学習成果をあげるようにしているわけです。
チームに貢献することや足を引っ張らないことに目的意識をもたせることで成果が上がっていきます。

そのほかは、そもそも楽しいと感じてもらえるようにカリキュラムを設計します。
これはレベルエンターの社名の由来でもある、エンターテイメントレベルで楽しく学ぶという理念からきています。

docker-phpの環境構築メモ

教育資料作成のためのメモ。丁寧には書かない。
(以下、sudo面倒くさいのでrootでインストール)

PHPから DockerRemoteAPIを叩く、docker-phpというのがある。
https://github.com/docker-php/docker-php

ドキュメント
http://docker-php.readthedocs.org/en/latest/

環境構築のメモ

Virtualbox Centos7minimalで環境を作ってみる。

32bitのepelにはdocker-ioパッケージがないので、複雑化する。
またCentos6系は、Dockerのサポートから外れているので7の64bitでやる。
https://github.com/docker/docker/issues/14365

32bitか64bitかを知る方法

uname -a
i686, i686, i386と表示された場合は、32bitカーネル
X86_64やamd64と表示された場合は、64bitカーネル

centos7、ifconfigがなくてびびる
http://qiita.com/haisaihiroki/items/87fe137f00b5c625f607
http://www.cyberciti.biz/faq/rhel-centos-linux-7-restart-networking-command-line/

ifconfig -> ip addr
service サービス コマンド -> systemctl コマンド サービス 

virtualbox にcentos7.isoをインストール
・ホストオンリーネットワークを作っておくこと
参考:http://www.kakiro-web.com/memo/virtualbox-create-virtual-machine-2.html
・ホストオンリーネットワークは、ipを192.168.99.2で静的に設定
 ローカルPC側を192.168.99.1にしてみた。

selinux を止める

vi /etc/selinux/config

書き換える箇所は以下

SELINUX=permissive

要、再起動

reboot

docker インストール

yum update
yum -y install docker-io

dockerのサービスを起動する

systemctl start docker
systemctl enable docker

dockerイメージをダウンロード

docker pull busybox:latest

実行確認してみる。

docker run -it busybox

busyboxは、基本的なLinuxコマンド群を単一のbusyboxコマンドにまとめたものであり、必要最小限のLinuxシェル環境を提供する場合によく利用されています。

Dockerにおけるデータ専用コンテナ、KVM仮想化環境からの移行 | Think IT(シンクイット)

centos7のイメージも入れてみた。動いてる

docker pull centos:7
docker run -i -t centos:7 /bin/bash

PHPhttpdをインストール。
PHPの関連パッケージで競合があったので--skip-broken

yum -y install httpd
yum -y  install php
yum -y --skip-broken  install php-* 
yum -y  install git

httpd.confでPHPを有効化

vi /etc/httpd/conf/httpd.conf

約45行目「Dynamic Shared Object (DSO) Support」ブロックの中に、モジュールを登録する以下の記述をします。(58行目あたりにしました)

# PHP setting --- start
LoadModule php5_module modules/libphp5.so

<FilesMatch \.php$>
    SetHandler application/x-httpd-php
</FilesMatch>

httpd起動、自動起動

systemctl start httpd.service
systemctl enable httpd.service

composerをインストール(docker-phpインストールのため)

cd ~/
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer

プロジェクトを作成、httpdのデフォルトのドキュメントルート/var/www/html配下に作った

cd /var/www/html
mkdir docker-php

composerでdocker-phpをインストール

cd docker-php 
composer require docker-php/docker-php

環境変数でDOCKER_HOSTを設定しておく( remote apiのため)

vi /etc/profile

最終行に追記

DOCKER_HOST=tcp://127.0.0.1:2375

設定した環境変数の読み込み

source /etc/profile

dockerをtcpで待ち受けるように設定

vi /etc/sysconfig/docker

2375ポートでRemotoAPIを待ち受けるようにする。

OPTIONS='--selinux-enabled -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375'

TCP経由でRemoteAPIを利用できるようにする。
デフォルトではfdのみなのでローカルホストからしかdockerコマンドを利用できませんが、TCPソケットを有効にして リモートマシンからもコントロールできるようにします。
ドキュメント上、以前は Port:4243を使用していましたが、メジャーバージョンから Port:2375に変わっています。

http://marmotte.pyrites.jp/blog/2015/01/13/docker-on-centos7/


vi /etc/init/docker.conf
DOCKER_OPTS='-H tcp://127.0.0.1:2375'

Docker再起動

systemctl restart docker

PHPのファイルを作成

cd /var/www/html/docker-php/
vi test.php

中身。(内容はdocker-phpのドキュメント参照)

<?php
require_once("vendor/autoload.php");

use Docker\Docker;
use Docker\DockerClient;
use Docker\API\Model\ContainerConfig;
try{
  $client = new DockerClient([
    'remote_socket' => 'tcp://127.0.0.1:2375',
    'ssl' => false,
  ]);

  $docker = new Docker($client);

  //$containers = $docker->getContainerManager()->findAll();

  $containerManager = $docker->getContainerManager();

  $containerConfig = new ContainerConfig();
  $containerConfig->setImage('busybox:latest');
  $containerConfig->setCmd(['echo', 'I am running a command']);

  $containerCreateResult = $containerManager->create($containerConfig);
  echo var_dump($containerCreateResult);
} catch(Exception $e){
  print($e);
}