We love MLP

技術を習得したら、忘れずにメモを書く場所

エンジニアとしてのレベルアップに向けて

みなさん、こんにちは。今新宿の百貨店にあるカフェで、外を見ながらブログを執筆しています。 GWですが、外が非常に明るく、気持ちも良いですね。

すごいエンジニアとは?

すごいエンジニアって、どんなことを想像しますか? 技術の習得とかやる事が早かったり、LTなどの発表がうまかったり、メンタリングが上手で人から好かれていたりとか、色々あると思います。すごいエンジニアになるためにどんな事が出来るでしょうか? 色々考えたことをメモしようと思い、記事にしました。

強いエンジニアは、やる事が早い。

エンジニアの中でも、生産性に焦点をおくとすごい差が生まれていたりします。 一方で500万で12時間労働するSEと、1日最短4時間労働で1000万円近くを稼いでしまうエンジニアもいます。 その差はもちろん、生産性の差が一番に関係しているのではないでしょうか。 やる事が早いエンジニアを見ていると、学習の仕方やコード速度についても様々に気づく点があります。 その一つが、記憶のアウトソーシングを適切に利用しているという点でしょうか。

コードを書くのにGoogleを使わない

強いエンジニアは、コードを書く際に必要な知識はほぼ暗記しているように見受けます。コードを書く際も、まさに思考の速度でコードを作成することで、暗記していないエンジニアとは比較にならないほどの速度でコードをプロットしていきます。逆にいちいちGoogleに聞きながらコードを書いている人は、Google下駄を履くといった表現をしたりします。 いちいち書くたびにドキュメントを確認するので、プロット速度が非常に落ちる訳です。勿体無いですね。 

だが、出来る人は全暗記しているわけではない。

こうした、強いエンジニアに共通しているのが、しっかり記録をつけるということだったりします。ドキュメントのように「忘れても大丈夫」なことは暗記しますが、自分が経験したから得られたことなどについては暗記などせず、ブログであったり、Qiitaであったりと記録することを大切にしている印象があります。 普段必要になる知識は暗記し、経験は記憶のアウトソーシングとして、記事を書いてさらに共有を行う。 これを習慣づけていると強いエンジニアと言えますね。

強いエンジニアになりたい

やはり仕事をする上で、報酬は高いほうがいいのは明確ですよね。 いい報酬をもらうエンジニアは、それなりにいい仕事をしています。 私はまだガッツリとフルタイムで働いたことはないですが、出来ることなら強いエンジニアとして活躍したいですよね。 最近、「エンジニアリング組織論への招待」という本を読んでいるのですが、良いエンジニアとは何か?エンジニアが扱う仕事とは何か?という視点で仕事について記述されていて、目から鱗がポロポロ落ちる思いで読み進めるたびに衝撃を受けています。 今度は、この本をまとめた内容を記事にしたいと思いますので、よろしくお願いします。 

自分の思考体力を伸ばすために

こんにちは。ここは、自分の社会との唯一のコミュニケーション窓口になってしまったので、ここにメモします。

成果を出すのは、持久走だ。

思考体力って言葉がありますが、検索しても限界を伸ばすとかばかりがネット上や本を駆け巡っている現状がありますよね。自分は思考体力を伸ばすことは、その分温存できる環境を作ったりメソッドを開発したりということの方に主眼を置いた方が良いという気がします。 

この超競争社会の中で、自分のキャリアを育てるということはマラソンの持久走に似ています。 マラソンでは持続して走り続ける為には必ずそのマネジメントが最重要になると聞きます。それをしないとすぐに足をつったり、故障に繋がるからです。 常に取捨選択をし続けている現代社会では、マラソンのように思考体力を削りながら進んでいるため、やはりそのようなマネジメントが思考力の維持を考えれば最重要になると考えています。 

また、決して短距離走的に短い距離を走ればすぐに考えればでてくるようなものではなく、持久走のように長く積み重ねた研究ほどマネタイズに成功していることからも、これは自分の収入に直結する非常に重要な問題だと分かるでしょう。 ですので、自分の思考体力をある程度伸ばした上で、どう走るのかという部分で自分の限界と向き合わなければいけないのかが、成功となる大きな要因となるのではないでしょうか。 まぁ結局、体力をどう増やすかよりも、どこまで走ったかが重要な気がします。

思考をアウトソーシングするということ

考えるの疲れた??ならアウトソーシングをしましょう! 考えることにアウトソーシングなんてあるんですか。という疑問がありますが、完全に未知の領域などに突っ込んでいく以外なら、問題の答えを考えたことのある人っていくらでも居ますよね。 そうなんです。自分以外の人が通った道ならアウトソーシングが可能で、本や論文がそのソリューションになります。 余計な疑問に対して大切な自分の思考体力を使う余裕なんか現代にはないんです。100km先のマラソン会場に徒歩でくる人がいますか?いないでしょう。少なくとも結果を出したいならそうはしないはずです。

しっかりコースを知ろう

コースを知らなくてもマラソンはできます。 だけれどもコースを知っていればこそのこともありますよね。 もちろん、人生なんてルール知らずのマラソン大会ですから、コースだって自分で決めなければならない。 それならゴールを最初から最短距離で目指すやり方をした方がいいでしょう? つまり、逆算の方程式こそが最もスピードが出せるコースの決め方になります。 ゴールをまず最初に決め、それを行うためにこれをしてあれをして・・・と行えば、自ずと一般的に知られた最適解のコース取りをすることができます。 

別のエントリでも書きますが、自分が考える最適解は他の人の最適解よりレベルが低いことが大半ですので、キャリアなどよく知られたことならなるべくアウトソーシングしてコース決めした方がいいです。 そうでないと人生のパラメータ次元は非常に高いので、手に負えないことが殆どです。

大切なのは無理しないこと。

早く走ろうとして無理をして常に全力で走ろうとする人がいます。(まさに自分なわけですが。) これはマラソンと同じことが言えて、そんなことをすると足をつります、しかしそれを放置していると肉離れとかに発展するのと同じで、こうなると自分の思考も飛躍しすぎたり、異常なほど非論理的思考に傾倒してしまったりします。 そうなると、不安に対し適切なマネジメントができないと言ったことが起こり、自分のキャリアを失ったりするわけです。 

短期的な速さより、長期的な走行距離が人生では重要です。 もちろん、決められた期日までに成果物を提出するために頑張ることがあっても、長期的な走行距離にプラスになるのかどうかをしっかり見極めて走って行きたいですね。

ありがとうございました。

Python : any(),all() とリスト内包表記のコンボパターン

こんにちは。みなさん元気でしょうか。最近いいところに就職しろと夢の中や、周囲の声がやまないです。(あまり興味ないので、そういう圧は疲れます)

any,allとリスト内包表記のコンボが強い

最近、HackerRankの方にはまってしまい、問題を解くのが面白く、議論も活発なので、そこで遊んでいます。今回は、Pythonでの問題で新しい発見をしたので、こちらにメモ。

まず、any()とかall()とか何よ。

リストのようなイテレータを差し込むと、その中のTrue-Falseを全部読んで、

どれか1つがTrueならTrue→any() 要素全てがTrueなら、True→all()

という具合です。

listA=list(map(int,"1 2 3 4 5 -9".split()))
#listA = [1 2 3 4 5 -9]
any(listA) #True
all(listA) #True
li.append(0)
any(listA) #True
all(listA) #False

こんな感じ。intならどれか一つが0ならFalse扱いだし、それ以外はTrueと言った具合。

リスト内包表記にしたらどう強いんだ??

まずリスト内包表記ってのは、下記のように書くことを言います

listA = list(map(int,"1 2 3 4 5".split()))
#listA = [1 2 3 4 5]
listB = [ num for num in listA ] 
#listB = [1 2 3 4 5]

ここでのlistBへの代入はlistB = listA[:]ってしてるのと変わんないんですけども、ここで一番いいことは、numに対してちょっかいを出せるという所にあります。

listA = list(map(int,"1 2 3 4 5".split()))
#listA = [1 2 3 4 5]
listB = [ num*2 for num in listA ] 
#listB = [2 4 6 8 10]
listC = [ num%2 for num in listA ]
#listC = [1 0 1 0 1]

つまり、ここの部分に条件式を与えてしまえば・・・

listA = list(map(int,"1 2 -1 0".split()))
#listA = [1 2 -1 0]
listB = [ num % 2 == 0 for num in listA ]
#listB = [ False True False True ]
listC = [ num > 0 for num in list A ]
#listC = [ True True False False ]

という具合です。競プロだと、このany()all()とリストのコンボを使うと早く問題を解けるパターンがあるので、覚えておきたいですね。

使用例を書きたかったんですけど、HackerRankのPythonでAnyAllの問題を探せば問題出てきますので、ぜひ解いてみてください。

今日はこの辺で。

このブログを設立する経緯と目的。

こんにちは。3月31日ということで、そろそろ桜に葉っぱがワシワシついてくる頃です。なのに何でこんなに寒いのか・・・。 今回は、なぜ私がはてなブログに投稿することになったのかの経緯や、目標などを書いてスッキリさせたいと思います。

自分について

自分はDeep Learningについての研究を追っかけてるADHD患者です。

最近、心の病(+過労で内臓も)患ってしまい、一時期本当に苦しかった環境にいました。

かといって、鬱の原因と呼べるような、怒鳴られたり、殴られたりしていたわけではなくて、週6で掛け持ちインターンをしていたというくらいでしょうか。 

全く休めない日々の中で、気付いたら寝たきりの生活になっていました。

怖いですね。心の病気だと自覚はあるものの、ある種自分の中ではもっと出来るはずなのに、もっと頑張れるはずだと絶対考えてしまいます。今でも思う時があるので、そこは気を付けたいですね。

でも、最近の医療ってすごいですね。昔の嫌な記憶を頭の中で永遠と流されて、その度に泣き叫んでいたのが、ある薬を飲むとピタッと止まるようになります。 ネットの書き込みでも見かけるので、嫌な事を思い出すとワーッ!と叫びたくなる or 叫んでしまうという人はいるかと思いますが、まさかこれが治せるとは・・・恐れ入りました。 血流とセロトニンが原因とのことなので、それを直せばよいそうです。

現在はハード面で少し懸念点がありますが、ラーメン禁止にすれば治るとのことなので、体重を落とすのと同時にしっかり治療していきたいと考えています。

はてブロを始めた経緯と目的

もともと、はてブロは自分のキャリアの為、やろうやろうと思いつつ、時間が全くない関係でできていませんでした。

現在、体調不良で寝込んでいて、Twitterもやるとかなり疲弊するので自粛していると、相当な時間が余ってしまい、自分の体力が疲れず集中して何かができる事ないかなーと考えたのが、はてブロでした。 ブログだから相手の反応気にしなくて良いし、ゆっくり思いつきながら書いているので、そこまで疲れませんでした。

また、自分の体験や、知識をまとめるということは、自己紹介に使えますし、やはり便利ですね。 ゆっくりと、自分のペースで書いていこうと思います。

このブログで書くこと

IT系知識をメインに共有して行きたいと考えています。あとDeep Learningとかもここに書き込めたら良さそうなので、わかったことを書いて行きます。

(追記:4月15日)

まさかこの記事を見てスターつけてくれる人が居たとは・・・。 表現もちょっとナチュラルなものにしました。 現在は体調も回復して、仕事もできるようになっています。 

ただ、「季節性うつ」っぽいらしいので、来年かお仕事始めた再来年の3月下旬〜4上旬に非常に気をつけるようになります。ですが、予測できるなら対策も打てるので、有給を集めたり、3月上旬に終わらせたりと色々な事はできるかと思います。 特に、季節性うつに関しては日照時間が鍵を握っているということが示されているので、日サロとまでは行きませんが、海に行ったりキャンプを楽しんだりと、日に当たりまくる生活に現在シフトさせていて、これから心の体調も安定してくるかと考えています。 ハードウェア面も、完全野菜中心生活で、糖分は制限、運動でかなり良くなりましたね。(そりゃそうだろ) ほんと、身体は正直すぎるほどに答えてくれます。

また、自分のマネジメントについても、気付いたこと、本で学んだことなどを積極的にここに示していけたらと考えています。よろしくお願い致します。☺️

何もないVimからdein.vim導入するまでの道しるべ

こんにちは。 毎回初期設定をするたびにdein.vimの導入で毎回忘れる部分があり、メモをします。

この記事で何がわかる?

  • 何もないvimプラグインが使える状態にする
  • dein.vim導入 ということがわかります。トータルで扱う記事はあまり見ない気がします。 Vim

vimをどうやっていじる?

vimをいじるには、~/.vimrcを作成し、編集することでvim起動時に設定を毎回読んでくれます。 実際にどのような内容になるかは、以下のQiita記事を見るのがいいでしょう。

qiita.com

それぞれの設定内容を確認したい場合、以下のQiita記事が参考になります。

qiita.com

前者のQiita記事のものを借りていますが、使いやすく常に使用しています。

dein.vimを導入する。

まずdein.vimとは何ですか?というと、パッケージマネージャと考えたほうがいいでしょう。pipとかbrewとかほどではありませんが、ベクトルは同じです。 下記のGithubページがマスターになります。

github.com

基本的には、このサイトのREADMEにある通り導入すれば良いのですが、オリジナルのディレクトリを入力する部分がややこしいかと思いますので、こちらでも解説します。(食い違う部分があれば、基本は本家の方をご参照ください。)

まず、下記のようにコードを入力しましょう。

$ curl https://raw.githubusercontent.com/Shougo/dein.vim/master/bin/installer.sh > installer.sh
$ sh ./installer.sh ~/.cache/dein/

1行目はGithubの中からインストーラをダウンロードしています。

2行目は任意の場所にgit cloneするものになっています。本家では、ディレクトリの指定がありませんが、こちらにインストールするのが恒例らしいので、こちらにどうぞ。

基本的にはどこでも大丈夫でしょうが、作者曰く、.vimがつくディレクトリだけは、仕様上困ることがあるので、そこだけは気をつけましょう。

実行できたら、以下のコードをvimrcの最後に追記しましょう。

if &compatible
  set nocompatible
endif
set runtimepath+=~/.cache/dein/repos/github.com/Shougo/dein.vim

if dein#load_state('~/.cache/')
  call dein#begin('~/.cache/')

  call dein#add('~/.cache/dein/repos/github.com/Shougo/dein.vim')
  call dein#add('Shougo/deoplete.nvim')

  call dein#end()
  call dein#save_state()
endif

filetype plugin indent on
syntax enable

Github上での、path to dein.vim directory とは、dein.vimのインストールされている場所を示し、まずここを読んでdeinを読むことが必要になるため、使用します。

path to plugin base path directory には、今後リポジトリを保存しておく場所を記しておく必要があります。適当に~/.cacheに設定をしてあります。(実際は~/.cacheにリポジトリをCloneしていくことになるので、repoファイルにプラグインが保存されていきます。ので大丈夫だと思う) ここは' 'で囲う。

追記が終わったら、保存し、:call dein#install()することで、dein.vimとこの場合だとdeoplete.nvimが保存されます。

また、'Shougo/deoplete.nvim'のように、ユーザ/リポジトリ名で様々なパッケージをインストールできます。

これで、dein.vimのインストールは完了になります。 ColorSchemeなどを設定するリポジトリなどを入れれば、Good。

実際のプラグインなどについては、また後日に。