『SOFT SKILLS』をソフトウェア開発者1年目の今読めてよかった

higeponさんがブログで絶賛されていたことで有名な『Soft Skills』の日本語版が2016/05/20に出版され、その後2016/06/01にKindle版がリリースされたのを機に早速購入して読みました。章ごとの長さが短くまとまっているおかげで読みやすく、一気に読んでしまいました。

全体を通しての感想ですが、ソフトウェア開発者として1年目の世間知らずな今だからこそ読めてよかったと思いました。ソフトウェア開発者というのは、自分次第で道を切り開いていくことのできる、可能性に満ちた職業なんだということをこの本は教えてくれたからです。

本の構成

ソフトウェア開発者の人生マニュアルという副題がついているように、この本はソフトウェア開発者向けに書かれた、ソフトウェア開発以外の部分についての著者の体験に基づいたアドバイス集となっています。キャリア、マーケティング、学習、生産性、お金、健康、精神という7つの部から構成されています。

序文からしてひきつけられた

Clean Codeなどの著者として有名なアンクル・ボブが序文を書いているのですが、その寄稿依頼の際のエピソードからしてひきつけられました。

著者は最初、序文を書いてもらうため、数十個のWordファイルで本の原稿を送ったのですが、それでは面倒だし締切日に間に合わないと、多忙なアンクル・ボブはいったん断ります。しかし、著者はそこで諦めず、出版社に掛け合い締切日を伸ばしてもらい、全体をPDFとしてまとめて送りなおします。その熱意にうたれ、アンクル・ボブは序文を書くことを引き受けます。

著者の行動力の高さを裏付ける素晴らしいエピソードだと思います。このように、この本に書かれていることは、机上の空論ではなく、著者が実践してきたことだからこそ説得力を持って響いてきます。

特に響いたアドバイ

どの章も参考になるものが多かったですが、特に僕の中で響いたものをピックアップします。

第5章 面接をハッキングするコツ

面接を受ける前に、面接する会社の開発者ブログをすべてフォローし、コメントを残していくというハックが書かれていました。本番の前に外堀を埋めてしまうというやり方で、したたかではあるけれども非常に効果的だなと思いました。

第9章 出世階段の上り方

ほかに誰もやりたがらないものを引き受けることや、何をしたかのサマリーを「週報」として上司に送る、といったアドバイスが書かれています。後者は上司に存在をアピールできるだけでなく、人事考課でも役立つ資料となると書かれており、なるほどと思いました。

また、この章を読んでいて、ほぼ日での厚切りジェイソンの出世がしたかったという話を思い出しました。階段を駆け上っていくというゲームのプレイヤーになるかならないか、そこを選ぶのは個人の選択ですが、どうせ同じ年月を働くのであれば上を目指していきたいと思いました。

第29章 ステップ1~6:1度限りのステップ

ステップを10段階においた、著者が実践している学習方法が書かれてあります。この学習方法については、別のブログ記事で紹介していますので、興味があればご覧ください。

第32章 弟子をとる:ヨーダになる

他人に教えるためにはその人より1歩先まで進んでいればいいと書かれています。

人に教えるとなると、間違いがあってはならないと思い、尻込みしてしまいがちですが、教えることによって自分の学習にも役立つのだということが説かれています。

第38章 ポモドーロテクニック

ポモドーロテクニックは、集中のためのテクニックとして捉えがちですが、1ポモドーロ (25分) を単位とすることによって作業量の見積もりとトラッキングのためのツールとして真価を発揮するということが書かれています。

ポモドーロテクニックは、何度か試してみたことはあるものの効果を実感できなかったので、そういう考え方をするのかと眼から鱗でした。

最後に

解説でまつもとゆきひろさんが書かれているように、アメリカと日本でソフトウェア開発者の待遇の違いが大きくあることもあり、この本に書いてあることを全て鵜呑みにしてはならないことは事実です。著者が成功した不動産投資の話なんかも生存バイアスがけっこうかかってる感じがあります。ただ、この本に書かれていることが全く通用しないかというとそうではないと思います。

もし僕と同じようにまだ経験の浅いソフトウェア開発者たちがこの本に書かれていることを実践していけば、日本のソフトウェア業界も変わっていき、ソフトウェア開発者という職業がもっと羨望の目を持って見られるような明るい未来を作ることもあながち誇大妄想ではないのでは、などと思いました。

SOFT SKILLS ソフトウェア開発者の人生マニュアル

SOFT SKILLS ソフトウェア開発者の人生マニュアル

中卒程度の学力でもTOEIC初受験で960を取れたという少し変わった話

もう4年前の話ですが、タイトルの通り、TOEICの初受験でいきなり960点を取れたという話をします。

まず最初にお断りしておきますが、TOEICで高得点を目指したいという方に参考になるような記事ではないかもしれません。非常にレアケースであると思いますし、短期間で一気にスコアアップというような方法を取ったわけではありません。また、TOEICの試験自体、本日2016年5月29日実施回より問題形式が変わってしまいました。

ただ、英語力を身につけるための方法として幾らか参考になる部分もあると思いますし、TOIEC対策記事としてではなく、ハイスコアを取れたまでの過程を含めた一つの物語として読んでいただけたらと思います。

前提となる学力

タイトルに中卒程度の学力と書いたので、まずはそこから説明します。

僕は中学時代まではそれなりに勉強を頑張っていて、県内トップ高校を受ければ通るであろうと言われていました。しかし高校受験を目前に勉強が嫌になってしまい不登校になります。なんとか復帰したあと、レベルを下げて入った高校は周囲に馴染めず1年生時にすぐに中退してしまいます。高校に入ってからは勉強に全く力を入れなかったので、学力的には中卒程度と言って間違いはないと思います。

長かった引きこもり時代…海外ゲームを遊びつくす

高校を中退してからは文字通り家に引きこもって、海外PCゲームを英語音声・英語字幕で遊びまくるようになりました。海外ゲームを遊ぶようになったきっかけが何だったか正確には覚えていませんが、たしか国産の無料ゲームを遊んでいた時に、そのゲームのプレイヤーが集まるチャットルームでそういうゲームがあると知ったのがきっかけだったと思います。中学時代は特に英語が好きというわけでもなかったので、相当遊ぶゲームに飢えていたのだと思います。それからはジャンルを問わず猿のように遊ぶようになりました。

中卒程度の語彙しかないので当然分からない単語だらけですが、ゲームの映像や文脈から意味を推測したりすることはできました。特に繰り返し出てくる単語については自然と染み付いていきました。そのためゲームを遊びながら辞書を引くということはあまりやりませんでした。無理に覚えようとせず、あくまで楽しみながら覚えていったのです。

多読という有名な英語勉強方法がありますが、今考えてみればそれに近いことをやっていたのかもしれません。多読ならぬ多ゲームだったわけですが。

そして、ここが重要なポイントなのですが、ゲームをただ遊ぶだけじゃなく、海外のコミュニティやニュースサイトのチェックもしていました。これによりユーザー同士で交わされる生きた英語を学ぶことができました。フォーラムやチャットで他のユーザーと拙い文章でやりとりなどもしていました。

この引きこもり期間が10年近く続きました。10年とさらっと書きましたが、この長い期間も肝だと思うので、あまり触れたくない部分ではありますが、隠さないことにしました。何かを1万時間続ければ誰でも達人になれるという説もありますが、あながち嘘ではないかもしれません。

そしてTOEIC受験

色々あって引きこもりを脱出できたあと、TOEICなる試験があると知り、その頃には英語が好きになっていたので、自分の英語力がどんなものか確かめてみたかったので、受けてみることにしました。

小手調べに公式問題集を買って模擬試験をやってみると、720-825のスコアレンジを取ることができました。自分でも驚きましたが、対策すれば860ぐらいいけるんじゃないかと思うことができました。この模試をやったのが2012年02月18日でした。

そこからはTOEIC用に次々と書籍を買っていきました。

まずは「TOEICテスト280点だった私が半年で800点、3年で同時通訳者になれた42のルール」というサクセスストーリー本を読みました。どうやったら280点取れるのかとツッコむ人もいますが、好きなことを仕事にしたいと思う著者の努力する姿勢に勇気づけられる本でした。

そのあとは「新TOEICテスト スコアアップ135のヒント」というTOEIC全般の対策本を読んだあと、自分の苦手な文法や単語を重点的に強化しました。具体的には「TOEIC TEST 英文法 出るとこだけ!」という文法本と、「特急シリーズ」と呼ばれる一連の本を使いました。特に特急シリーズのうち、「金のフレーズ」はよくまとまっていて重宝しました。
(前述した通り、問題形式が変わったことでこれらの本の現行版は新試験に役に立たない恐れがあるためリンクは貼りませんが、改訂版が出るものもあるでしょうから参考に紹介だけしておきます)

他にもモチベーションを上げるために英語上達完全マップ20歳を過ぎてから英語を学ぼうと決めた人たちへといった英語勉強法の書いてあるサイトを読んだりしました。

また、ESL PodcastやCNN Student Newsを購読したりもしました。

こうした対策をした結果、2012年05月27日の初受験でいきなり960点を取ることができました。模試をやってみてから3ヶ月余りです。試験中の手応えもよかったので、もしかしたら900超えもあるかもとは思っていましたが、結果発表時は驚いたものです。

TOEICで計れる英語力

ちょっと脱線してしまいますが、TOEICで英語力が評価できるかというと僕は懐疑的です。ある程度の指標にはなると思いますが、僕の場合、洋画など字幕なしではよくて7割程度しか聞き取れません(俳優たちはTOIECのロボット音声みたいな会話をしてくれません)し、書く話すに関してはボロボロです。

ただ、読み聞きに関してはそれなりにできるので、それだけで世界がぐんと広がることは確かです。例えばCourseraUdacityといったMOOCと呼ばれるサイトで世界トップレベルの講座を受講できたり、翻訳されていない海外のドキュメントや技術書を読めたり、非常に評判のよいギターのオンラインレッスンサイトで学べたり、といったことができます。

好きなものから英語を学ぶ

ぐだぐだと書いてきましたが、一番言いたいことは、自分の好きなもので英語を学んだ方が楽しくもあるし、一番身につきやすいんじゃないかということです。

僕の場合、それがゲームだったわけですが、好きなものであればなんでもいいと思います。

映画でもいいし、音楽でもいいし、プログラミングでも何でもいいです。関心があるところにコミュニティはあります。今はインターネットがある時代なので、どんどんそういったコミュニティに参加していけます。例えば僕が利用しているredditなんかは話題ごとに場所が用意されていておすすめのサイトです。

大事なのは勉強のための勉強をするのではなく、それを実際に活かすことだと思います。ベースさえしっかり作れれば、TOEICの点数も少しの対策であとからついてくるものだと思います。

最後に

自分語りの多い文章になってしまいましたが、あまり例を見ない話なので少しは面白くあるかなと思い書いてみました。ゲーム脳とか言われますけどゲームも役に立つことだってあるんだよという一例でもあるかなと思います。

ここまで読んでいただきありがとうございました。

プログラマーとして社会人になったけど高校数学を1から独学している

この春からプログラマーとして働くようになりました。今まで色々と開発系の勉強を中心にしていましたが、最近はもっぱら高校数学を独学しています。

勉強しようと思ったきっかけ、教材として使っている『長岡の教科書』の紹介について書いていきます。

勉強しようと思ったきっかけ

まず前提として、僕は高校を中退しています。空白期間を経て情報系の専門学校に入ったのですが、その際に取った高認も、英語だけを受験して取得したという経緯もあり、高校以降の勉強の知識がごっそり抜けてしまっています。
その後、専門学校に入ってから基本情報技術者試験を受験することになったのですが、そこで出てきた集合や対数、数列といった知識が全くないため(Σってなに状態)、数学の知識の欠如を感じたものです。

なんとなく数学コンプレックスを抱えたまま過ごしている折に、2014年10月発売のWEB+DB PRESS Vol.83のインタビューにて、宮川達彦さんが「数学、コンピュータサイエンスの基礎を学ぶことは大事。基礎がしっかりしている人のほうが伸びがいい」とおっしゃっているのを見て、Rebuildファンボーイとして、「やっぱ数学勉強せねばならんな」と思わされました。(最近のRebuild 132でも数学の話題があったりしましたね)

また、日進月歩で進化・衰退を繰り返していくライブラリやフレームワーク、言語などをキャッチアップしながら勉強するよりは、長い年月を経て確立された学問である数学を学んだほうが、遠回りに見えて案外時間を投資する価値がもっとあるのではないかと思いました。
数学なんて四則演算さえできてればプログラマーとして十分だと言う人もいますが、このまま数学コンプレックスを抱えたまま生きていくのも嫌なので、独学してしまおうと思い勉強に至っています。

教材は『長岡の教科書』

「知の巨人」とも呼ばれる元外交官の佐藤優さんは、『読書の技法』という著書の中で、基礎知識を身につける教材として教科書を勧めています。そういったこともあり、数学を学ぶ教材として教科書を選ぶことにしました。ただ、教科書というのは授業で使われることを前提としてあるため無味乾燥になっており、独学に単体で使うには不向きともいえます。

そこを補ってくれるのが僕が利用している、明治大学理工学部特任教授の長岡亮介先生による『長岡の教科書』です。

【音声DVD-ROM付】長岡の教科書 数学I+A 全解説

【音声DVD-ROM付】長岡の教科書 数学I+A 全解説

この本は、検定教科書にプラスして、音声講義と問題の解答&解説がついています。

まず、音声講義ですが、独学者にとっては最低限のことしか書かれていない教科書に彩りを添えてくれるため一番ありがたい要素でしょう。 例えば有理数無理数の単元の音声講義では、1/3 = 0.333… であるので、両辺に3をかけると、1 = 0.999… となるといった面白い話が聞けます。
また、「不等式を解く」ということには根底には論理が隠れている、つまり同値変形に過ぎないといった、数学を独立した単元ごとに考えるのでなく、数学全体として考えることの大切さが繰り返し説かれています。

解答&解説については、教科書を単体で買うとついてこないため非常にありがたいです。ただ、音声講義に比べると解説はあっさりとしたものとなっており、途中の計算過程などが省かれていて理解に苦しむものがあったりしており、そこは少し不満かもしれません。

目標

漫然と勉強しても知識の定着を確認できないので、数検を目標に据えて勉強しています。年に3回実施されているため、焦らずに勉強が追いついてきた段階で受けていこうと思っています。

最後に…勉強仲間募集しています

Studyplusというサイトにて勉強の記録をつけています。同じようにプログラマーで数学を勉強されている仲間を募集しています。よかったらフレンド登録をお願いします。

【音声DVD-ROM付】長岡の教科書 数学I+A 全解説

【音声DVD-ROM付】長岡の教科書 数学I+A 全解説

【音声DVD-ROM付】長岡の教科書 数学II+B 全解説

【音声DVD-ROM付】長岡の教科書 数学II+B 全解説

競技プログラミングに参加するためにC++の勉強を始めた

久々の投稿です。 表題の通り、競技プログラミングに参加するためにC++の勉強を始めました。

始めたきっかけは色々あるのですが、主な理由としてモバイルアプリ開発に行き詰まったことが挙げられます。

モバイルアプリ開発の難しさ

行き詰まった原因として、AndroidiOSアプリ開発を目標に勉強をしてきたのですが、それを活かすためのアプリのアイデアが自分の貧弱な想像力では湧かなかったというのがあります。
さらに、AndroidiOSとも、目まぐるしく開発環境や仕様などが変わっていくので(特にiOSSwiftの関係で顕著)、ある程度落ち着くのを待ってから取りかかった方がいいのではないかと思いました。

アルゴリズムとデータ構造は普遍的

その点、アルゴリズムとデータ構造を実践しながら学べる競技プログラミングは、課題というものが出題者から与えられる上、普遍的であり、プログラミング力を鍛えるにあたって地となり肉となってくれるものであると考え、勉強を始めようと思いました。

なぜC++

Javaが使えるならそれでいいんじゃないかという見方もあると思いますが、C++を新たに学ぼうと思った理由は、単純に新しい言語を触ってみたかったという欲求と、AtCoderの上位提出を見てみるとC++がほとんどを占めていること、今年出た『プログラミングコンテスト攻略のためのアルゴリズムとデータ構造』というAOJの問題を解きながらアルゴリズムとデータ構造を覚える本で使われているのがC/C++だったためです。
特にこの本は競技プログラミング攻略のバイブルとも言える『プログラミングコンテストチャレンジブック』への橋渡しをしてくれそうなので興味をそそられました。

プログラミングコンテスト攻略のためのアルゴリズムとデータ構造

プログラミングコンテスト攻略のためのアルゴリズムとデータ構造

予定している勉強の進め方

最初に取りかかっている書籍は『Accelerated C++』という本で、他の言語の経験がある人にとってC++を学ぶ一番の近道との評判だったので選びました。
ただこの本はけっこう古い本なので、これを読んだあとに『A Tour of C++』というC++11対応の、C++作者自身による短いクイックガイドを読んでから、『プログラミングコンテスト攻略のためのアルゴリズムとデータ構造』に進もうと思っています。

Accelerated C++: Practical Programming by Example (C++ In-Depth Series)

Accelerated C++: Practical Programming by Example (C++ In-Depth Series)

A Tour of C++ (C++ In-Depth Series)

A Tour of C++ (C++ In-Depth Series)

初めてAndroidアプリをGoogle Playに公開しました

去年の2月ごろからAndroidアプリ開発の勉強を始めて、今日ようやくGoogle Playにアプリを公開することができました。何個か作ったアプリはあったのですが、公開するには地味すぎたり、作りかけで終わってしまったりしたので、今回は公開するまで完成させると決めて作りました。

こちらのアプリになります。
Book Quotes - 本の引用登録・閲覧アプリ 4.0.3 以上
カテゴリ: 書籍&文献
Google Playで詳細を見る

どんなアプリか

アプリの内容としては、気に入った本の引用を登録して閲覧するアプリになっています。登録した引用のなかからランダムに表示するというものをメイン画面にもってきました。こうすることで、登録してしばらく経ったあと、思いがけない引用との出会いがあるかもしれないと思ったからです。このへんのランダム表示は、がみさん(id:shgam)のWebアプリにインスパイアされてます。

機能的にはシンプルなアプリですが、Web APIJSONの使い方や、Content Providerの使い方、GridViewなど、作っていて勉強になるものでした。

改善点

ただ、デザイン面はMaterial Designなど全く考慮せず、標準Widgetのみで構成しており非常に簡素になってしまっているので、そのへんは今後どうにかしていきたいところです。Nexus 7をメインに開発したので、スマホでどう映るかあまりテストしておらず、レスポンシブにもなっていないのも反省点です。

他にはメイン画面で画面を回転すると引用が更新されてしまうという点が解決できませんでした。setRetainInstance(true)とか使ってみたのですが、ダメでした。FragmentPagerAdapterの挙動をよく理解していないからかもしれないです。

今後

今度としては、やはりもっといいアイデアのアプリを作りたいです。このアプリのアイデアを友人に話したところ、「Kindleのハイライトでいいじゃん」と言われて何も言い返せませんでした。一応引用を手入力する手間がある分、記憶に残りやすいという利点はあると思いますがちょっと苦しいです。
そういうところもあって、すごいアイデア生み出したい、ということで、『アイデアのつくり方』を読んだりしてみています。

アイデアのつくり方

アイデアのつくり方

あとは、DB周りが面倒くさすぎるので、次はO/R Mapperを使ってみたいです。Active Androidあたりが主流になるのでしょうか。

そして、せっかくAndroidオープンソースなんだし、もっとソースコードを読めるようになりたいです。ライブラリのコードなんかも読みながら勉強していきたいところです。

参考文献

最後に、このアプリを作るにあたって特に参考にしたもののリストを載せておきます。

Udacity: Developing Android Apps ファーストインプレッション

昨日から公開されている、UdacityGoogleが提携して作ったコース、How To Develop Android Appsを、Lesson 4aを終えたところまで進めました。内容的には、Sunshineという天気アプリを作りながらAndroidについて学んでいく、プログラミング経験者向けのある程度上級者向けコースとなっています。

ここまで進めてみての印象を箇条書きで書いてみます。

良い点

  • Googlerが講師なので安心。
  • 使うIDEAndroid Studio
  • Udacityのコース全般に言えることなのだけど、理論と実践のバランスが良い。

悪い点

  • コードを伴うクイズのほとんどは、指示されたことができたかどうかの確認だけ。他のコースのようにブラウザ上のIDEに直接打ち込んで正解かどうか判定するものが少ない。
  • これを書いている時点で字幕がついてないので辛い。

Web APIの使い方やJSONの扱い方の他、テストについても触れており、随所にTipsも盛り込まれていて、実践的に作りながら学べていい感じです。

他にUXにフォーカスしたUX Design for Mobile Developersも開講しているので、こちらも受講してみようと思います。

Smashing Android UIを読了

iOSアプリ開発に手を出してみて感じたのは、やはりAndroidと比べてどちらが難しいとか簡単とかいうところは無く、どちらも細部までいじろうとすると難しいということでした。特にデータベースの扱いや並行処理なんかは共通して面倒が多い部分に感じました。これは何もモバイルアプリ開発に限ったことではないと思いますが。とにかく、どちらが楽ってことは無いということが分かっただけでもiOSを触ってみてよかったと思います。

というわけで結局Androidアプリ開発に舞い戻ってきました。まずは途中まで読んでいたSmashing Android UIを最後まで読むことにしました。

この本はAndroid UI Patternsを運営しているJuhani Lehtimäki氏によるもので、第1部がユーザーゴールやペルソナといったUXを高めるための手法やコーディングを始める前のツールや考え方、第2部がAndroidプラットフォームの機能とUIコンポーネント、第3部がAndroidでのスケーラブルなデザイン、第4部がアンチパターンも含めたAndroidのUIデザインパターンという構成になっています。

ポップアップは原則として使わないといった、ユーザー視点から見ることの重要さが繰り返し強調されています。
よくiOSのデザインをAndroidにそのまま持ち込んじゃいけないと言われますが、その理由として、ユーザーが複数のスマートフォンを所有していることは滅多にないからと書かれていてなるほどと納得しました。

各章ごとにちょうどいい長さでよくまとまっていて、Google公式のDesignガイドを読む前にこれを読んでおくと全体像が見えていいんじゃないかと思います。

Smashing Android UI レスポンシブUIとデザインパターン

Smashing Android UI レスポンシブUIとデザインパターン