GoTheDistance

ござ先輩と言われています。(株) クオリティスタートという会社をやっています。

「Spring Fest 2017」にブースを出展致します

11/24(金)に開催されるJavaSpring Frameworkのカンファレンスである「Spring Fest 2017」に、ルート42株式会社 | root42 Inc.
と共同で運営しているサービス「Docurain」のブースを出展させて頂くことになりました。

springfest2017.springframework.jp

site.docurain.jp

Docurainは、Excelをテンプレートにしてオリジナルの帳票を開発できるサービスです。オンプレミスでの導入とクラウドの2種類の導入形態がございます。クラウド版は、現在クローズドβテスト運営中です!

というわけで、お久しぶりの方も初めましての方も、11/24のSpring Fest 2017でお会い出来ることを楽しみにしています!

【書評】いちばんやさしいPythonの教本

ビープラウドの佐藤社長よりご恵投頂きました。

いちばんやさしいPythonの教本 人気講師が教える基礎からサーバサイド開発まで (「いちばんやさしい教本」シリーズ)

いちばんやさしいPythonの教本 人気講師が教える基礎からサーバサイド開発まで (「いちばんやさしい教本」シリーズ)

私も独習Python入門――1日でプログラミングに強くなる!というPythonで学ぶプログラミングの入門書を書きましたが、こちらの書籍もプログラミング入門としての立ち位置です。「はじめての方でも挫折しないこと」に主眼を置いています。

割り切った構成

インプレスさんの「いちばんやさしい」シリーズ共通している特徴だと思いますが、1ページ内に載せる情報を限りなく削っています。説明文は各々のセクションに140文字前後、後は図解とコードの解説しかありません。その構成で全てのページが構成されており、「これだけ、まずは理解しよう」という意図をとても感じます。図も丁寧に作成されており、コードの実行イメージを喚起させる努力がなされています。

技術書まで説明を削ることはより抽象的な説明が増えてしまうことで伝わっている文脈に違いが起きやすいという問題はありますが、全体を掴まないことは何も始まらないという割り切りが、入門書を作る上で大切なことです。その点、本書は徹底されています。

基礎文法→ライブラリ活用→Webアプリ

プログラミング入門であれば、この構成が鉄板になりやすいです。どんどん出来ていくことの範囲が広がって、UIが必要なプログラムを書くことで「動くものができた」という実感が湧きます。基礎文法だけで終わってしまうとプログラミングをやった気がしない。文法の学習はどうしても退屈ですし、黒い画面だけでは面白みも出てこない。

OSS徹底コードリーディング本

サンプルコードを1回〜2回動かしただけでは、なかなかコードに書かれている文脈はわからないですよね。私が
Pythonで学ぶ、初めてのプログラミングという授業をSchooさんで担当させて頂いた時に最も好評だったのが、コードリーディングです。このコードはブラウザからやってくるリクエストを〜こうさばいて〜でもってこのオブジェクトのこの変数に代入しているから〜みたいなやつです。

なので、初級者が中〜上級者になるのであれば、代表的なOSSのコードリーディングを題材にして本が出るといいなぁと思っています。書籍にすると大変ですが、ビープラウドさんの
PyQ - 本気でプログラミングを学びたい人の、Pythonオンライン学習サービスで、拡充コンテンツの候補の1つとして頭の片隅にでも置いて頂きたいなと思いました。

プログラミングの入門なら、Pythonを選ぼう

ある特定の言語を学習する理由があるのであれば、その言語の文法や言語仕様、設計思想を学ぶ必要があります。でも、「プログラミングをはじめたいけど、どの言語が良いかわからない」のであれば、私はPythonをオススメしています。他の言語に比べて直感的にわかる要素が多く、記号が少ないからです。

Pythonで学ぶプログラミングの入門書は、本書以外にも私の著書もあれば、他に色んな本が出ています。言いたいことや書いている内容に、大きな違いはありませんが、構成は結構違います。お手にとってみて、最もご自分にあう題材を選んで頂けたらと思います。

いちばんやさしいPythonの教本 人気講師が教える基礎からサーバサイド開発まで (「いちばんやさしい教本」シリーズ)

いちばんやさしいPythonの教本 人気講師が教える基礎からサーバサイド開発まで (「いちばんやさしい教本」シリーズ)

独習Python入門――1日でプログラミングに強くなる!

独習Python入門――1日でプログラミングに強くなる!

育児スマートデバイスの動向を追うメディア「ベビテク(babytech.jp)」を開設しました

japan.cnet.com

「パパの育児をもっと楽しくするためのビジネスをしたい」がミッションの会社、パパスマイルさんにご依頼を頂き、私がチーフブログオフィサーになりました。

babytech.jp

BabyTech(ベビーテック)とは

乳幼児や小学校低学年の子育てを支援するスマートデバイスのカテゴリを指す総称です。今年のCESから「BabyTech」というフロアが設立されるなど認知度が高まっており、欧米では多くのスタートアップ企業やクラウドファンディングが存在します。

当面は海外のベビーテックシーンの紹介・資金調達の情報提供をメインに、エンジニアパパトーク的な企画や日本におけるベビテクシーンのプレイヤー紹介などをしていきたいと考えています。日本ではまだまだこれからのジャンルなので、ぜひベビテクのお問い合わせから情報提供など頂けると滅茶苦茶喜びます。

パパスマイルのサイトも御覧ください。

www.papasmile.jp

どうぞよろしくお願い致します!

(株) ディレクターズさんが「シェルで操作するコーポレートサイト」を作成

社長の加藤さんから伺ってはいましたが・・・本気だったんですね(笑)

www.directorz.ad.jp

スクショ貼っときますね

gyazo.com

僕はlemonというホストでしたが、皆さんはもしかしたら違うかも。Docker上でコンテナを30分単位で再生成して負荷分散や不正対策に役立てておられるそうです。su rootしたいですね(お

helpと打つと出来ることの一覧が表示されます。雪が降ったり桜が舞ったりします。お問い合わせはviが操作できないとフォームから送信できないですがよろしいですか? というロックな仕様です。

helpコマンドに掲載されているコマンドには掲載されていない「隠しコマンド」も幾つか用意があるそうなので、皆さんもお時間が許す限り遊んでいって下さい。

www.directorz.ad.jp

「センスがない」のほとんどは、単なる練習不足に過ぎない

4月からプログラミングを教える仕事を定期的に行っていて、集合研修という形が1つ、実験台としてプログラミングに興味がある学生の甥っ子に対してマンツーで教えています。自分の教えている内容がどう伝わるか、どんなイメージ絵を描けばいいのか、どの順番で説明すればよいのか。それらを検証するためです。

で、そんな中、甥っ子がポロッと漏らしました。

「おれ、やっぱりプログラミングのセンスが無いんだと思う。教えてもらっても全くわからないことが多いし...」

「ちげーだろ。お前は単なる練習不足にすぎない。2〜3回しか練習していないのに、どうやってオレと同じレベルで物事が判断できるんだって話。ちょっとしか練習してないのにセンスもクソもない。漢字の書き取りにセンスが必要か? 100回while文書いてみたか? 書いてないだろ? 」

「あ・・・(察し」

センスは練習不足の免罪符じゃない

彼が言っていたセンスがあるという状態は、「一を聞いて十を知る」というようなもの。言ってることから言わんとしていること(プログラミングの場合は解決しなくちゃいけないこと)を汲み取れるので、どんな手順で進めていけばよいかを自分で見つけられる。そんな状態をセンスがあると表現しているのは、結構よくあるんじゃないでしょうか。

でもこれ、違います。単なる練習不足です。センスという言葉は具体的な手順が見えていない時に使う言葉じゃない。手順が見えていないのは、練習のやり方を教わっていないからです。その結果、何を考えていいかわからなくなり、教わっている内容が身に入らないので益々理解度が下がるという悪循環に入ってしまう。それはセンスがないから起こるわけじゃなく、然るべき練習をしていないから。

その意味ではメンターが側にいるかいないかは大きいといつも思う。自分でゴールを定められるようになるには時間がかかるし、プログラミングのような抽象度の高い概念は、一人では難しいところがあるなぁ。

「例えば」という問いを投げる

抽象的な概念がわからないのなら、具体例を出すのが一番。具体的な手順がわからなくなった場合によく使うのが、「例えば」です。

「例えば、対象の文字列に"ABCDE"と入力されたら、何が返って来る? そうだよね、他の場合でも同じことが言えるはず。つまり、何をどうすれば同じことが出来る?」

「ローカル変数とインスタンス変数の違いを整理して、その違いを例示できるコードを書いてきて」

「このa_listに入っている要素はPersonクラスのオブジェクト。そう。じゃ、このa_listがどういうデータ構造になっているか、図に起こしてみて。こんな感じ。」

今、甥っ子にはこーゆー問いを投げて、紙に書かせて宿題にしています。パソコンじゃなくて、紙ってのがポイント。手を動かせないものはわからない。これがテキメンに効いている。コードで表現されたことを「例えばこれがappendされると・・・」と頭を整理して紙に書くことで、イメージと具体例がパチっとつながり、コードで表現された抽象的なものが腑に落ちる。

プログラミングって、つまりと例えばを交互に行ったり来たりする。その練習をしてこなかっただけだとしたら、センスで終わらせてしまうのは教える立場である以上やりたくないし、逃げたくはない。

センスは知識から始まる

この本に面白いことが書いてありました。センスってのは「数値化できない事象のよし悪しを判断して、最適なものを作る力」だそうです。善し悪しが判断できるためには、良いものも悪いものも知っていないといけないし、そもそも「これがスタンダード」っていう自分なりの型がないと始まりませんね。

「練習不足による自分の型がない=センスがない」には語弊があるので、練習を積みましょう。

センスは知識からはじまる

センスは知識からはじまる

(株) クオリティスタートは第2期に突入しました

昨年の6月1日に会社を作ったので、昨日でちょうど1年が経ちました。お取引をして頂いている皆様に感謝申し上げます。

以下、主だった近況報告です。

ITと経営(事業)をつなぐ、コンサルタント

メインでやっているのはこれ。言葉にするとIT企画/IT戦略立案/業務分析/要件定義、といった言葉になるのでしょうか。一言で言い表す事が難しくて、「○○屋です」みたいな単語で表現できないかな〜と思っています。ITコンサルタントだと幅が広くて...

事業がどうやって運営されているかを分析して、あぶり出した課題を正しくITで解決する。事業を運営している中で管理している情報やリソースを、どういった形で収集・蓄積して、サービスレベルをあげていく。

ユーザーの立場に立って、今後も「ITと事業をつなぐ」仕事がしたいですね。

プログラミング研修

詳しくは別記事に起こそうと思っていますが、Pythonで新人向けのプログラミング研修カリキュラムを一から作って、その内容に沿って研修講師をやっております。下記が目次の一部抜粋です。

f:id:gothedistance:20170602090627j:plain

初心者の方に伝えきれていないこと、伝える順番や表現が適切ではないことがあり、100近い改善点が挙げられています。野球のクライマックスシリーズの頃には、最高のカリキュラムになっているはずです。その際には、色んな方に意見交換がしたいので訪問させて下さいませ。

9月以降のお仕事、募集中です

8月までは実作業ができないのですけど、9月以降ならば「ITと事業をつなぐ」お仕事をさせて頂ける余裕があります。定期的にお仕事を頂いているお客様もいるので、毎日常駐して詰めるという形態は困難です。月に何回か顔を出して2ヶ月だけ手伝ってくれみたいな使い方は、こちらもウエルカムです。まずはお試し、ということで。

  • 要件定義ができる人を探している。短期間で来て欲しい。
  • 自社のITのあり方の議論をリードして欲しい。

開発会社様/事業会社様問わず、そういったご相談をお待ちしております。

お問い合わせ | 株式会社 クオリティスタート

【事前告知】開発者向け帳票生成サービス「Docurain」をリリースします

帳票開発をもっと簡単にすることができるWebサービス「Docurain(ドキュレイン)」を、2017年10月頃リリースする運びになりました。事前告知をさせて頂きます。

帳票を作るのは「めんどくさい」

開発者及び開発会社の皆様、オリジナルの帳票開発はどのようにされているのでしょうか?

帳票生成ツールをお使いの場合ですと、事前準備(レイアウト作成&データバインディング等)に結構な工数が取られます。PDF生成ライブラリ等で頑張るにしても、座標軸の指定を頑張る必要があり、レイアウトが変更になったら手戻りが発生してしまいます。

コスパに優れた使い勝手の良い帳票開発を提供できるサービスが無いと認識しており、協業しているルート42株式会社 | root42 Inc.さんと一緒になって、このようなサービスを提供することに致しました。

ExcelJSONだけで帳票を作る

Docurainは、帳票開発をもっと簡単に出来ることを目的にしています。帳票レイアウトはExcelで作り、その中にプレースホルダーを定義します。あとは定義したプレースホルダーにJSONでデータを与えるだけです。

Excelテンプレートと差し込みたい情報をJSON形式で用意して頂き、Docurainが用意したWebAPIを呼び出してお使い頂きます。それだけです。

価格体系

API呼び出し1回につき数円、という体系を考えています。無料トライアルも予定しています。これも皆さんのご意見を頂戴しながら、ベストな体系を作っていきたいと考えています。

まずはお問い合わせ下さい

事前登録を頂いた方には、β版をリリース時にその内容をいち早く告知させて頂きます。

  • 「サービスインしたら、サインアップして使ってみたい」
  • 「現時点での資料やデモを見てみたい」

そう感じて頂けたら、下記のDocurainのWebサイトのお問い合わせフォームより、是非ともお問い合わせ下さい。意見交換等でも構いません。どんなことでもお寄せください!

docurain.jp

【書評】抵抗勢力との向き合い方

著者の榊巻さんが所属されている、ケンブリッジ・テクノロジー・パートナーズ株式会社様よりご恵投頂きました。

抵抗勢力との向き合い方

抵抗勢力との向き合い方

改革には抵抗が必ずある

本書は「現状の課題を解決するための変革を目的したプロジェクト」において、日々奮闘されている現役コンサルタントの方が、プロジェクトのフェーズ毎に適切な抵抗勢力と付き合い方やヒントが書かれた本です。そのコンセプトが纏まっているのが、こちらの絵。

フェーズには「立ち上げ」「計画策定」「施策実行」の3つがあり、各々に適切な対処方法があって、それらがひとつひとつのセクションになっているという構成です。

抵抗は悪ではない

抵抗と聞くと少し感情的なイメージが強いのですが、抵抗が発生する理由は「自分の所属している立場を鑑みると、その改革によって不都合や不便が加速する」という背景があることが多いと本書を読んで感じました。抵抗はなんとなく発生するのではなく、その提案を受け入れられない確固たる理由があります。その根拠は、ぼんやりとしているかもしれません。でも、その兆候を見逃さないことが求められますね。

改革は会社で決めることであるけれども、押し付けになってはいけません。

自分の言いたいことが「相手に伝わる」ための本

抵抗勢力との向き合い方というタイトルではありますが、これを裏返すと自分の意見や意向を伝えて「相手を動かす」為には何が必要なのかを書いた本でもあります。本書の隠れたポイントは、そこにあります。主張を理由、そして根拠。これらをまず的確に伝えるようになること。その出発点からより生産的なコミュニケーションを取るにはどうしたら良いのか。

そのような事を参考にされたい方にも、本書はお役に立つことでしょう。

抵抗勢力との向き合い方

抵抗勢力との向き合い方

Pythonが独習できるオンライン学習サイト「PyQ」のレビュー

社内の主要開発言語にPythonを取り入れたことで著名な(株)ビープラウドさんが、Pythonのオンライン学習プラットフォーム「PyQ」をリリースされました。

pyq.jp

佐藤社長のご厚意でアカウントを発行頂き実際に使用してみたので、使用感をレビューします。

問題構成

以下のセクションに別れています。他にもいくつかありましたが、チュートリアルからWeb開発まで用意されています。

画面構成

f:id:gothedistance:20170501124352p:plain

2ペイン構成です。左側に問題(クエストと呼ばれています)の説明と解説、右側がPythonのコードを実装して実行結果やテスト結果の表示を行う場所になっています。工夫されているのは左側の説明の箇所で、写経前と写経後のコードの差分が見れるようになっており、自分で間違いに気づくことができるようになっています。

また、はじめの一歩で敢えてエラーがでるコードを書いて、初心者が陥りやすい「SyntaxError」「NameError」「TypeError」について先にやらせるのも上手いやり方です。先にエラーを出させて直す工程を踏めば、後々の学習が楽になります。

強いて言えばローカル実行も可能にしたい

正解で動かすことが出来たコードは、自分のローカルに保存(コピペすりゃいいんですが)出来るようにファイルをエクポートできると便利だなと思いました。模範解答として残しておいて、それをプライベートなリポジトリに置いて共有するとか、そういうやり方もあるのかな〜と。

Webアプリの実行について

特徴的なのは、ブラウザオンリーでWebアプリが作れる構成になっていること。PyQでは写経エリアに書いたコードを「ブラウザで表示」することが可能です。各々のサーバに配置されたPythonのWebアプリ(Djangoベース)が起動するので、環境構築が必要ありません。面白い仕組みだなと純粋に思いました。

個人ユースよりも企業ユースが多くなりそう

プログラミングを完全に独習で行うのはハードルが高いですが、PyQのような仕組みがあれば、オンライン学習の生産性もかなり高まるでしょう。講師の講義を聞きつつ写経が出来る。もちろん復習用途で独習もできる。このようなスタイルが確立できれば、現在新人研修講師を務めている私は楽になるな〜と感じました。

「独習Python入門」という本を書いた私からすれば、PyQさんとさりげなくコラボして、書籍で掲載された練習問題を独習して更に理解が深まるような構成に出来たら最高だった。

まずは個人で体験してみて下さい

テキストも分かりやすく書かれています。周りに誰もいない一人でも使えますし、オンラインのサポートが受けられるプランも用意されています。まずは触ってみてください。ホンマによく出来ています!自分の教材も載せてほしいです!

pyq.jp

Javaで「はじめてのプログラミング」を教えるのはキツイと思った話

2017年4月から人生初めての新人研修講師を務めさせて頂くことになりました。プログラミング入門がテーマです。

先方は昨年までJavaでカリキュラムを組んでいたんですが、JavaをやめてPythonでやらせてもらえないかと提案し快諾頂きました。プログラミングの入門書を書いたから特に感じることなんですけど、Javaはプログラミングの初学者に向いていない言語だと思います。

クラスありきの言語設計

それがJavaの良いところでもあると思いますが、プログラミング自体が初めての方を対象に考えた場合、はじめの一歩として不適切だと感じます。

Hello Worldが重たすぎる

お馴染みのHello Worldです。初めてのプログラミングで以下のコードを見たら、何のことやら分からないでしょう。

public class Test {
    public static void main(String[] args) {
       System.out.println(“Hello World!”);
    }
}

これをどうやって初心者に説明したら良いのか… クラス/関数/引数/配列/名前空間等/エントリポイント等の概念が全部まとめて出てきます。とりあえず「おまじない」で通すとしても、はじめの一歩からおまじないというパワーワードに逃げるのは筋が悪い。PythonPHPならprint/echoするだけなので、体で覚えやすい。

Javaコンパイルが必須

コンパイルのような環境構築を伴う作業は、ハードルが高い。環境変数をセットしてjavacコマンドを叩くなんて、人生でターミナル起動したことがない人には恐れ多い。IDEをインストールしろって初学者に言い放つのは「とりあえずこの栄養ドリンクをがぶがぶ飲めや」って話に近い。

その点、インタラクティブシェルがある言語はやりやすいです。そこで練習してから、ファイルを指定して実行できるようになれば良い。

サーブレットが鬼門となる

これは聞いた話なんですけど、サーブレット(Servlet)が鬼門になるそうです。【Java/Web再入門】その2.サーブレットを作ってみよう - KnowledgeFortよりServletのサンプルコード引用させて頂き、簡略化しました。

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Servlet002 extends HttpServlet {

	@Override
	public void doGet(HttpServletRequest aRequest, 
                                HttpServletResponse aResponse) {
		try {
			aResponse.setCharacterEncoding("UTF-8");
			aResponse.setContentType("text/html");
			PrintWriter _writer = aResponse.getWriter();
			_writer.println("Hello World");
		} catch (IOException e) {
			e.printStackTrace();
		}
		return;
	}
}

これが正しいかは置いといて、あまり直感的じゃないです。HTTPやHTMLが理解できていないと、上記のコードの意味はわからない。わかってから書けよって話は、初学者にはちょっと可哀想。サーブレットを動かすための環境設定も必要で、動かす前に覚えないといけないことが多くて大変です。クラスローダーも理解しないといけない。

Pythonだとすげー簡単です。ビルトインサーバの機能を使いつつ、マイクロフレームワークWelcome | Flask (A Python Microframework)を使えばこれだけで同じことが出来ます。

  @app.route('/')
  def hello():
     return 'Hello World'

プログラミング入門と言語の入門は別の話

これは自分が本を出した問題意識に直結しますが、プログラミングの学習には「プログラムに落とすための考え方」と「プログラミング言語の仕様、動くコードの書き方」の2つがあります。プログラミング自体の入門と、プログラム言語の入門は、別の話です。Javaが初心者に向かないと感じたのは、前者を学ぶのにJavaの思想が前に出すぎているからです。プログラムを書く考え方が怪しい状態で、Javaの思想や仕組みを理解しないと動くコードが書けないのは可哀想だと思いました。

プログラミングでいちばん重要なのは、論理に落とし込む文章化能力だと思います。アウトラインを描き上げる力が最も大切。それがないと、プログラミング言語が提供する技術で何を表現したら良いか、判断がつかないからです。掛け算と一緒で、ゼロに何をかけ合わせてもゼロなんで。

企業向けの研修では未だにJavaが主流のようだけど、個人的にJavaでプログラミングの入門を上手く説明できる自信がありません。はじめの一歩にJavaは正直オススメできないし、そのスタンスでご納得頂いてお仕事を頂いてきたので、「実はオレもそう思ってたんだ」層に届けばと思って、記事書きました。

プログラミングの入門書を書きました

Pythonの書き方は僕よりも優れたプログラマの方がたくさん本を出されています。サクッと「プログラミングってなんだろう、どーゆーことをするんだろう」という要点をつかみたい方には、手前味噌も良い所ですけど自信を持って自著をおすすめします!

独習Python入門――1日でプログラミングに強くなる!

独習Python入門――1日でプログラミングに強くなる!

SQLを学習できるWebサービスを作りました。