プログラマーとしての十余年を振り返る。経験年数と35歳限界説。
プログラマーとして仕事を始めて十余年の歳月が過ぎました。
ここらで少し立ち止まって、過去を振り返り、これからどうしていくかという事を考え、それをアウトプットする時間を少しずつ作っていってみようと思います。
これはその記事の1つ目です。
プログラマーの経験年数と実力の関係
「プログラマー暦十年」と聞くと、とても長く思えます。
プログラマーとしてはベテランと言っても良いかもしれません。
しかし、プログラマーの実力というのは経験年数とはあまり関係が無いともいわれています。
「コードコンプリート」という本では、プログラマーの経験年数が2年を超えると年数による実力の差はほぼ無くなるといった事が書いてあったりもします。
私自身、それを実感しています。
若い人の方が最新の技術に詳しい事も多いですし、頭の回転も速いし、物事を覚えるのも早いでしょう。
ITの世界は変化が非常に激しいものです。
新しい技術はどんどん出てきて、それがすぐに古くなります。
長く使われる技術もありますが、それらも全く変化が無いわけではなく、新たな機能が追加されたりとどんどん変化していきます。
Javaというプログラミング言語は20年使われていますが、時代のトレンドを取り入れながら、バージョン9まで公開されています。(2017年時点)
プログラミング言語自体も新しい物がどんどん登場し、あまり流行らない物もありますが、Rubyのようにいっきに人気の言語になったものもあります。
変化の激しい業界の中で、プログラマーとして活躍し続ける為には「昔取ったキネ塚」に頼ってばかりではいられません。
常に新しい知識や技術を吸収し続ける必要があります。
プログラマー35歳限界説
プログラマーには、かの有名な「35歳限界説」というものがあります。
若い頃は、モノづくりが好きであったり、プログラミングが好きという理由でITエンジニアを目指す人も多いと思います。
そして、さしたる疑問も抱かず、なんとなくプログラマーというものをずっと続けられるものだと思う人もまた、多いのではないかと思います。
私もそんな一人でした。
しかし年齢を重ねるごとに、2つの主な理由により「35歳限界説」がこれだけ有名になった理由を思い知っていく事になります。
1つ目の理由は、日本社会における「周囲の目」が影響しています。
簡単に言うと、30代半ばになると管理職やプロジェクトマネジメントの役割が周囲から期待されるようになるという事です。
ITエンジニアにおける「キャリアアップ」とは、プログラマーから管理職へジョブチェンジする事と同義に語られる場合がとても多いです。
私自身、20代後半から30代前半にかけてはプログラムをガリガリ書いているだけでほとんど文句も言われずに評価されていたのが、ある年から突然マネジメントを期待されるように、非常に戸惑いました。
自分としてはまだまだ現場でコード書くぞと思っていても、周囲からの期待とズレていると仕事もやりずらいというもの。
この期待に応えようとする者は、やがて「プログラマーだった者」へと変わっていってしまうのです。
2つ目の理由は、単純に時代の流れについていけなくなるパターン。
前述したように、IT業界というのは変化がとても激しいです。
プログラミング言語だけでなく、開発の手法や用いるツールもどんどん新しい物が出てきます。
若い人が自由自在にツールを使いこなすなかで、それについていけない人も多いです。
このため、派遣のエンジニアなども年齢を重ねるにつれて受け入れてもらえる現場が限られるようになり、仕事が減ってしまうという事もあるようです。
最新の技術を用いた開発などは若い人に任せ、長年の社会人経験を活かせる仕事、すなわちプロジェクト管理やディレクション、コンサルティングなどで活躍していく人も多いです。
世の中ではプログラマーから管理業務へ移っていく事を「キャリアアップ」と呼び、給料も上がったりします。
それに対して、私としては「ちょっと違うんじゃないかなぁ…」と思ったりします。
本当はプログラミングが好きで、35歳を超えようとも、ずっとやっていたいという人も多いはず。
それが出来なくなる事がキャリアアップと呼べるのか?という点で疑問を感じます。
歳を重ねてもやりたい事が続けられる世の中になるにはどうしたら良いか。これからも少し考えていきたいと思っています。
今回は以上です。
今後は「良いプログラマーとは何か」「なぜプログラミングは楽しいのか」「プロフェッショナルとは何か」という所について考えていこうと思います。
「35歳限界説」についても、引き続き考えていきたいです。
Elixir:エリクサー~Enumモジュールのメモ
ElixirのEnumモジュールの関数などをメモしていく。
マニュアル等見ればいいけど自分が覚える用に。
随時更新していきます。
Enum.map()
Enumの各要素に関数を適用して変換する。
iex> Enum.map([1,2,3,4,5], &(&1*2))
[2, 4, 6, 8, 10]
Enum.to_list()
渡された値をリストに変換する。
iex()> Enum.to_list(1..5)
[1, 2, 3, 4, 5]
Enum.with_index()
Enumの各要素にインデックスをつけてタプルを返す。
iex> Enum.with_index([1,2,3,4,5])
[{1, 0}, {2, 1}, {3, 2}, {4, 3}, {5, 4}]
第2引数でインデックスの開始を指定できる。
iex> Enum.with_index([1,2,3,4,5],2)
[{1, 2}, {2, 3}, {3, 4}, {4, 5}, {5, 6}]
gitでよく使うコマンドまとめ(自分用)
自分的にgitでよくつかうコマンドをまとめておこうと思います。
- ローカルリポジトリを作る
- リモートリポジトリをクローンする
- ブランチ切り替え
- ブランチを強制削除
- ファイルを指定せずに変更を自動検出してコミット
- ファイルを複数指定して、コメントをタイトルと本文に分けてコミット
- ブランチをプッシュ
- ファイルの変更を無視する
- コミット内容を確認する
ローカルリポジトリを作る
$ git init
リモートリポジトリをクローンする
$ git clone リポジトリのURL
ブランチ切り替え
$ git checkout ブランチ名
ブランチを強制削除
$ git branch -D ブランチ名
コミットしてない変更があっても無視して削除する。
ファイルを指定せずに変更を自動検出してコミット
$ git commit -m "コメント" -a
変なファイルが混ざると面倒なので、直前にgit statusで変更を確認をして、自動検出で間違いなく大丈夫な時に使います。
ファイルを複数指定して、コメントをタイトルと本文に分けてコミット
$ git commit -m "コミットタイトル" -m "コミットコメント" -- ファイルパス1 ファイルパス1
コメントは二つ指定すると、1個目がタイトル、2個目がコメント(ディスクリプション)になる。
ファイルを複数しているする時はスペースで区切って複数指定する。
ブランチをプッシュ
$ git push origin ブランチ名:ブランチ名
または
$ git push origin ブランチ名
ファイルの変更を無視する
$ git update-index --assume-unchanged ファイル名
コミット内容を確認する
$ git log -p -1
Elixir:エリクサー ~マルチコアプロセッサを有効利用するのに適した関数型言語(プログラミング言語を知る企画)
プログラミング言語、Elixir(エリクサー)の特徴をまとめます。
この記事は以下の企画を元に作成しています。
特徴
Elixirは、マルチコアプロセッサを効率的に使うための並列処理を簡単に実装できるという特徴がある。
CPUのコア数が増えるほど力を発揮する。
資源を節約し、高速に応答するプログラムを実装できるようになることが一番の強みです。
パターンマッチ
「=」は「代入」ではなく、「パターンマッチ」や「表明」と呼ぶ。
「右辺と左辺が同じになるようにする」という意味を持つ。
Cやそれに似た言語を触ってきた者としては、なんとも戸惑う設定である。
代入でいいじゃん…と思ってしまうのは私だけ?
コード例:nの階乗
nの階乗を求めるプログラムは以下のように定義できる。
factorial.exs
defmodule Factorial do
def of(0), do: 1
def of(n), do: n * of(n-1)
end
モジュール内のof()関数の引数に上から順番にパターンマッチしたものを実行していくというスタイル。これで再帰処理になる。
of()の引数が0になったら再帰呼び出しが無くなり、処理は終了する。
コードがとてもシンプルですね。
実行は以下のようにする。
iex(1)> c "factorial.exs"
[Factorial]
iex(2)> Factorial.of(0)
1
iex(3)> Factorial.of(4)
24
iex(4)> Factorial.of(10)
3628800
ぼちぼち追記していきます。
船橋フェイス「ドトールコーヒーショップ」ミラノサンドとコーヒーを頂きました
船橋フェイスビルのレストランを制覇する企画。14個目の記事は1階のコーヒーショップ「ドトールコーヒーショップです」です。
↓当ブログの企画記事。
船橋フェイスのレストランを制覇しよう! - 船橋在住エンジニアのブログ
ドトールに関しては、わざわざ説明する必要もない、全国展開している有名コーヒーショップですね。
船橋市には7店舗が存在するようです。(ドトール公式サイトには8店舗となっていましたが、東武船橋店は2017年現在は存在していません)
このドトールでは無料のWifiが2つ入るようになっています。
1つはフェイスや東部デパートなど船橋駅を中心に使える「船橋Wifi」。
もう一つが「Wi2 300」です。
「船橋Wifi」はWifi接続語、メールアドレスを登録すればだれでも使う事ができます。30分で切断されますが、すぐに再接続する事が可能です。
「Wi2 300」はゲストコードが使えるエリアになっていて、Wifiに接続して表示されたWebページに記載されているメールアドレスにからメールを送り、返信されたメールに記載されたゲストコードをWebページ上で入力する事で利用できるようになります。
船橋Wifiは店舗の奥側(道路と反対側)に座ると繋がりにくくなるので要注意です。
奥側に電源が取れる席が数席あり、パソコンを開いて作業している人や勉強している人でいつも混雑している印象です。
食事を軽く済ませたい時、小腹がすいた時に良いですね。
もちろんコーヒーだけの利用もよくします。
食事目的より、読書やパソコン作業したい時に使う事が多いですね。
お昼の混雑する時間帯は、勉強などで長時間利用をしているとお店の人に注意されます。
節度を持って利用しましょう。
簡単ですが、以上です。
【企画】いろいろなプログラミング言語の特徴を知ろう!
最近は船橋フェイスの飲食店の記事しか書いていませんでしたが、
そろそろエンジニア(プログラマー)っぽい記事も作っていこうと思います。
エンジニアっぽい記事の企画第一弾として、プログラミング言語をテーマにしようと思います。
なぜプログラミング言語か
プログラミング言語いうと、今時(2017年時点)のおじさん世代としては昔から馴染みのあるCとかJavaが定番だったり、若者はRubyとかが好きなのかなーという印象ですね。
ぐぐってみると、人気のプログラミング言語や、収入の多いプログラミング言語などの情報が出てきます。世界を見渡すとPythonやJavaScriptの人気が高まっているような感じがします。
Web開発ではPHPが幅広く使われているし、銀行の古いシステム等ではCOBOLが使われているなど、業種やサービスによって使われる言語の特徴があります。
新しい言語もどんどん現れていますし、昔は使われていたけど今は廃れてしまったという物もあります。
何か新しいサービスを開発したり、古いシステムを作り変える際などには適切な言語を選ぶ必要がありますが、そのためには様々な言語の特徴、メリットやデメリットを知っておくことが必要とされます。
また、さまざまな言語の仕様やライブラリ、設計思想を知る事で、これを応用してほかの言語を使った開発にも活かせるという場面が出てくるという考え方もできます。
良いエンジニアを目指すためにも、様々なプログラミング言語の本を最低1冊は読んでおいて、特徴を知るようにしていきたいと思います。
調べるプログラミング言語
現在存在するプログラミング言語の数は、マイナーな物も含めると数百種類はあるとされています。
少し前は700種類というデータを本で見ましたが、今は1000ぐらい行ってるかもしれません。
そんなに増やしてどーすんだってペースで増えています。
これらを全て把握する事は到底無理なので、実際のビジネスでも使われていたり、本が出ているような主要な言語にしぼって特徴を把握していこうと思います。
そのリストは以下のものとします。一言特徴とレビュー記事へのリンクを随時追加していきます。アルファベット順に並べています。
- Ada … 「エイダ」と読む。1979年、米国防総省のプロジェクトによって産まれ、兵器開発等に主に用いられたという。
- ALGOL … 「アルゴル」と読む。1950年頃に開発された。構文のネストを始めて可能にした言語らしい。
- AWK …「オーク」と読む。テキストファイルなどのデータ処理に主に用いられる。LINUXのワンライナーとしてよく使われている気がする。
- Bash …「バッシュ」。コマンド等をファイルから読み込んで実行するシェルの一種。
- BASIC …「ベーシック」。1970年代以降、プログラミング初心者用の言語として広く使われた。Visula Basicに影響が残っている。
- C … コンパイル型言語の代表。早い。
- C# … マイクロソフトがC/C++を改良して作った言語。文法規則が厳しかったり、明示的なメモリ解放を排してガーベジコレクションに統一するなど、安全な仕様になっている。
- C++ … Cにオブジェクト指向の概念を導入したもの。
- COBOL
- Common LISP
- Delphi
- Elixir … [レビュー記事]「エリクサー」と読む。マルチコアCPUで効率的に使い、並行処理を簡単に行う機能が備わっている。
- FORTRAN
- Go
- Hack … PHPからの派生言語。VM上で動作する。Facebookが開発した。
- Java … VM上で動作するオブジェクト指向型言語。
- JavaScript … 主にブラウザ等で動作するスクリプト言語。
- LISP
- Lua
- Objectiv-C
- Pascal
- Perl … 構文糖衣が多い事で有名なインタプリタ。
- PHP … Web開発によく使われる。
- Python … 字下げでネスト構造を表すことが出来るスクリプト言語。
- R … 統計解析に使われる言語。型の種類が独特。
- Ruby … Ruby On Railsを用いてWeb開発で使われる事が多い。
- Scala … JavaVMで動作し、Javaのライブラリが使える。
- Smalltalk
- Swift … iPhoneアプリの開発に使う。
- VBScript
じゃっかん古い言語も混ざっていますが、個人的に興味があるものを含めています。
なんとなく興味のあるものから調べていきながら、その先は言語ごとの比較等もやっていきたいと思っています。
記事を追加したり、編集した時には、変更履歴も追記していこうと思います。
まずは、以上です。
変更履歴
- 2017/10/15 当記事作成
- 2017/10/24 Elixir記事追加
船橋フェイス「椿屋カフェ」ハヤシライスとシフォンケーキとコーヒーを頂きました
船橋フェイスビルのレストランを制覇する企画。13個目の記事は3階の喫茶店「椿屋カフェ」です。
↓当ブログの企画記事。
船橋フェイスのレストランを制覇しよう! - 船橋在住エンジニアのブログ
椿屋カフェは「東和フードサービス株式会社」が展開するチェーン店で、東京都内を中心に店舗を展開しています。
とても個性的な喫茶店となっていて、コンセプトは「脱日常」とうたっています。
店内の内装・インテリアは「銀座の古き良き洋館」「大正時代」をモチーフにしているそうです。
ウエイター、ウエイトレスさんの服装も、執事やメイド風といったいで立ち。これを目当てに来店するお客さんもけっこう居るのではないかと個人的には思っています。
コーヒーも本格的なサイフォンコーヒーで、注文すると席でカップにコーヒーを注いでくれます。
店構えは落ち着いた雰囲気。大人な感じです。
この日はハヤシライスとコーヒー、ケーキのセットを注文。1530円です。
綺麗に盛りつけられたハヤシライス。器も上品。
懐かしい味です。
食後のコーヒーとシフォンケーキ。
コーヒーはサイフォンコーヒーを席でそそいでくれます。
シフォンケーキは紅茶のシフォン。香りも楽しめますね。
コーヒーをゆっくりと楽しんで、読書などしながらついつい長居してしまいました。
ちょっとした非日常感を堪能できる、貴重なお店です。
簡単ですが、以上です。