のぶログ

若手WEBエンジニアの「のぶ」が、エンジニア的なことや日々思ったことを書いていくブログ。

行動するといいことがあるぞという話

最近わけあって、起業したてのベンチャーをエンジニアとして手伝い始めています。

 

きっかけは、ちょっとした自分の行動だけだったので、何かしたいと思うことがあるなら行動したほうがいいのではと思ったので書いておこうと思います。

 

きっかけはサンカクというサービスで今いる企業以外に飛び込んでみようと思い登録したこと。

 

現状の仕事だけだとどうしても視野が狭くなってしまうのが問題だなぁと感じていたので、まずは気軽に外とのかかわりを持ってみようと思い登録してみました。

 

 

そこで興味が出たのが、ある社会的に意義のありそうな事業のディスカッション。

 

社会問題を事業にするという観点に面白みを感じて、まずはこのディスカッションに応募してみました。

 

すると開催者から、別件ですが面白い案件があるので、それも見てみませんかとのおさそい。

 

最初は「う~ん、どうだろう・・・」という感じでしたが、まぁいったん見てみるだけ見てみよう!と半ば勢いでOKすることに。

(そのときの日程調整が、明日あいてます?→はい!という超スピードでした笑)

 

そんなこんなで、最初に参加しようとしたディスカッションとは別の事業のエンジニアとして2枚目の名刺を手に入れ、今鋭意アプリ製作中という状態です。

 

 

自分がとった行動は「サンカクに登録した」「ディスカッションに応募した」、たったこれだけでしたが、この行動が起業したてのベンチャー企業を手伝うという(自分にとっては)とても大きい結果につながりました。

 

以前Twitter家入一真さんやけんすうさんが以下のようなことをおっしゃっていましたが、本当に小さくても「行動すること」というのは大切だなぁ、いいことがあるなぁと感じています。

 

 

 

 

 

 

 

 

プログラミング言語の年代調べてみた話

自分が思っていたことと事実が意外にも異なるということがよくありますが、今秋はそんなことがあったので、ブログにしてみました。

 

きっかけはTwitter

 

ボーっとTwitterを見ていたらこんなツイートを発見しました。

 

 

確かになんとなくPythonのほうが新しくて人気の言語ってイメージだな!でもJavaのほうが新しいのか、なんか不思議だなぁと感じました。

 

そこでふと「あれ、ほかの言語もしかしたらこういう勘違いあるんじゃないかな?」

と思い、プログラミング言語のできた年代を調べてみようと思いました。

 

すると早速Wikipediaのこんな記事が!

プログラミング言語年表 - Wikipedia

 

詳しすぎてびびります・・・

 

かなり詳しくて、正直分かりづらいなぁとも思ったので、今回は以下の記事を参考に、10個の言語の年代を調べて比較してみました。

プログラマー年収ランキング2017!言語別、第1位はScalaの626万円 | みんなのスタンバイ

 

言語別の年収、気になりますもんね笑

 

 

ということで最初は年収ランキング第1位Scalaです。

Scala - Wikipedia

Javaを業務で使っている私にとっては、ランキングもあいまって勉強しようかと思っている言語NO.1です笑

 

 

そんなScalaは2001年に設計され、その後2003年~2004年ごろにリリースされたとのこと。

 

2004年にJavaプラットフォーム上にリリースされたとのことなので、

2004年が正式リリースということでしょうか。

あまり使っている人が多くないイメージですが、以外にも14年近い歴史があるようですね。

 

 

 

お次は年収ランキング第2位Python

Python - Wikipedia

 

先ほどすでに書いてしまっていますが、1991年に最初のPythonができたそうです。

その後、2000年に2.x系、2008年に3.x系が発表されたとのこと。

 

 

もしかしたら、2.x、3.xのイメージなどから新しい言語というイメージがあるのかもしれないですね。

 

ここら辺は、Python3.0がリリースされて一気に広まったなどの記事がないか、今度調べてみたいなと思います。

 

 

続きましてKotlin。

Kotlin - Wikipedia

 

Androidで使うらしい、JavaVM上で動くらしいということで、再びJava利用者の筆者が勉強したいと思っている言語です笑

(とは言ったものの、その程度に知識しかなかったので、いい機会でした。)

 

 

Kotlinはロシアのサンクトペテルブルグにあるジェットブレインズ社の研究所で、2011年に発表されたそうです。

 

まだ6年程度しかたっていない、かなり若い言語なんですね。

 

それにもかかわらずAndroidの言語に採用されているので、なんだか飛び級している天才小学生のような存在ですね。

 

 

 

お次はSwiftです。

Swift (プログラミング言語) - Wikipedia

 

こちらはかなりお馴染み、iPhoneアプリを作るならSwiftですね。

(使ったことがないのでそれくらいしか言うことがないですが・・・)

 

調べてみたところLinuxでも利用できるので、意外と汎用性が高いのかもしれないですね。これについてもまた別で調べてみたいです。

 

さて、そんなSwiftは2010年に開発が始まり2014年に発表された、まだ3歳くらいの幼子です。それでもこれだけ名前を聞くのはやはりアップルということでしょうか。

 

 

 

 

さてお次はRubyです。

Ruby - Wikipedia

 

Ruby on Railsなどの名前でこちらもとても人気ですね。

 

日本人のMatzことまつもとひろゆき氏が開発したためかもあるかもしれないですね。

 

このRuby、とても人気ですが、意外にも1993年にうまれ、1994年に発表されたとのこと。

 

PythonRubyは人気の言語のため、新しいものかと思っていたのですが、20年以上前に発表されていて、Javaより年上なんですね。

 

 

それぞれの言語にいろいろな特性があって面白いですね。

 

プログラミング言語の擬人化したら人気が出るんじゃないでしょうか。

 

 

それでは、かなり長くなってきたので、続きはまた後日書こうと思います!

 

ブロックチェーンの話題についていけるようにビットコインを購入してみた話

ビットコインがはやっていますね。

 

100万円超えたとか1万ドル超えたとかそういう話題が、ビットコインを持っていない自分も耳にするくらいですから、かなりはやっているのでしょう。

 

 

 

少し前から、エンジニアならブロックチェーンについて知っておいたほうがいいだろうと思って興味あったんですが、なかなか勉強できておらず・・・

 

 

 

ということで、お金がかかれば勉強もかなり気合が入るはず!とビットコインを購入してみました!

 

 

とはいうものの、どこから手を付けていいものか・・・

 

とりあえず「ビットコイン 買い方」でグクってみることに。

 

そこでビットコインは、買うためのアプリがあるらしいことが分かりました。

 

その中でなんとなく名前聞いたことがあったCoinCheckに取り合えず登録することに

 

 

その後の流れは、株トレードアプリとほとんど同じ感じ。

というよりは株アプリよりもかなり手続きが楽でびっくりしました。

 

そしてチャートがおしゃれ!きれい!

 

株アプリだとかなり見づらくて使い方もわかりづらいので、ここに結構感動しました笑

 

その後いろいろと本人確認ができたりしたら講座が開設され、そこに入金したらトレード開始。

 

まずは貯金していた10万円でビットコインを購入しました。

 

さてさて10万円が人質にとられたので、これで勉強する気合が入るはず・・・!

 


と言いつつ結局、チャートばっかり見ていてほとんど勉強ができていないので、今後ブロックチェーンについて勉強したことをブログでアウトプットしていかねばと思います。

 

将棋のチャンク式学習法がプログラミングでも役に立ちそうだなと思った話

プログラミングをはじめた初期の頃、正直この一行が何を意味しているのかをよくよく見ながら読んで、書くにしてもこれはどう書くんだ・・・?なぜEclipseは赤いんだ・・・?

とりあえずEclipseの言う通りにエラー直そう・・・なんかほかのところでエラーでた・・・あぁもう良く分からない!

 

みたいなことがよくありました。

 

今になって思うと、Eclipseの便利機能の超絶無駄遣い。

でもあの頃はこれでも分からないなりにがんばっていたんだなぁと思います。

 

 

そんな若かりし自分に、この勉強法よさそうだよとお勧めできそうなものがたまたま見ていた将棋番組で紹介されていたので、ブログに書いておこうと思います。

 

その勉強法は、「チャンク式勉強法」というものです。

 

こちらの将棋フォーカスで放送されていました。

cgi2.nhk.or.jp

簡単に説明すると、盤面を4分割して定石を覚えようというもの。

 

 

ちょっと調べてみたところ、ここのサイトが分かりやすそうでした。

 

 

こういう学習方法を、デザインパターンなどに適用できないかなぁ。

 

特に人間なかなか一気にたくさんのことを処理するのはできないので、全体をまず俯瞰して、その後分割していくというような方法で体系を学ぶ、それを覚えたら自分で再現する、というサイクルでだんだんと学習していくのいいのかなぁと思いました。

 

ただ、書いていて「俯瞰して仕組みを理解する」方が重要な気がしてきたので、それはまた別の機会に調べて書こうかなと思います。

若手エンジニアが技術力を上げるために気をつけている小さな取り組みの話

エンジニアになって1年弱、さてさて今の案件どうすればもっと技術力向上できるだろうか?そもそもぜんぜん技術力上がってなくね?開発スピードも遅いしやばくない?と感じていました。

 

確かにオブジェクト指向の本読んでみたり、デザインパターンの本を読んでみたりということはしているんですが、やはり実践してコーディングしないとなかなか身につかないよなぁという実感がありました。

 

そして、機能追加案件がメインのため、既存のコードを読んで理解することも非常に遅い。

 

 

 

これはちょっとよくないなぁと感じたので、試行錯誤して以下の2点を解決するために取り組んだちょっとした取り組みを紹介します。

・開発スキルを向上させる

・既存のコードの理解度を上げる

 

ちなみに1点目はあいまいな言葉ですが、一応「自由にいろいろな機能を作ることができるようになる」というのをまずは技術力・開発スキルと定義しています。

 

そのためにやったのはズバリ、リファクタリングです。

 

特に2つ目については10年以上前のソースもあるため、読み込むのが非常に大変でした。

2万行あるクラス、300行くらいのメソッド、何ができるのかわからないUtilsクラス、詳細を見てみると深いインデントのif文、その条件が良く分からない変数tmpが10以下だったり、そのif文の中身が100行くらいある、などなど不満を言えば正直キリはありませんでした。

 

 

ただ、これは自分の技術力を上げるためのいい題材だと考え、このあまりいいとは言えないソースコードを案件のたびにリファクタリングをしてから行うと自分に課しました。

 

 

具体的なやり方はこんな感じ

・良く分からない変数名を、適切な名前に変更する。(例:tmp、strなど)

・ちょっと長いif文の判定文をis○○などに変更する。(例:if(a<10 || b=null){~}など)

・何かしらひとまとまりの部分をメソッドに抽出する。

 

 

 

一つ目は最初からいろいろ変更すると怖いので、まずなにをしているのかわからない変数を、少しでも分かるようなものに変更してあげます。

tmp見たいな、一時保存のものでも、何を保存しているのか(たとえばチャットのメッセージを一時的に保存して、なにかしら処理を加えてあげるためのものだな、など)が分かってきたら、たとえばtempMessageみたいにしてあげます。

 

 

変数の役割をつけていってあげると、処理の流れがだんだん分かってきます。

上の例で言うとチャットのメッセージが入るのかが分かるために、その周辺の処理や呼び出し元を読んだりもします。

 

そしてだんだん流れが分かってきたら2点目の条件式をメソッドに抽出します。

こちらも、この条件はどういう意味かな?ということを考えると結構頭を使うし、その処理が何してるんだっけということの整理にもなります。

 

 

 

そして最後にするのは、ひとまとまりであろう処理をメソッドに抽出する作業です。

 

だんだん処理の意味が分かってきたら、その処理にはいくつかブロックのようなものがあるように見えてきます。

この15行は○○をするためにやっていることだな、というように見えてきたら、その○○をするというメソッド名を作って、そこにごそっと処理を移動してあげます。

(本来はこれをする前にテストコードを書いておくのが正しいのでしょうが、まだ導入できていないので本当はあまりよくないんだろうなと思いつつ・・・

あと、本来はこのメソッドどこにあるべき?というところもやってあげないといけないんでしょうけど、ちょっとそこまでいくと結構な時間かかるので、そういうのは相談してからしています。)

 

こうしていくことで、処理の流れを追うことができて、そのうえできることが増えていくというそんな小さな取り組みでした。