Pythonの勉強

Python入門にあたってメモした。

モジュール

import random

モジュールのインポート

import random, math

複数インポート

[my_module.py]

def func(v):

    return v * 2;

 

[main.py]

import my_module

print(my_module.func(1))

モジュールの作成

from random import randint, choice

randint(0, 10)

モジュールの一部読み込み
randomからrandint, choiceを読み込む

import random as rd

rdという別名でrandomを読み込む

 

モジュールパスを追加: PYTHONPATH 変数に追加

 

演算

代入

a, b, c = 1, 2, 3

a == 1
b == 2
c == 3

d = (1, 2)

e, f = d

e == 1
f == 2

p = (1, (10, 100))
q, (r, s) = p

q == 1
r == 10
s == 100

 

割り算

/

小数型で計算

//

整数型で計算

divmod(a, b)

商と剰余を計算

(a//b, a%b)

 

べき乗

**

べき乗を計算

pow(a, b, c)

a ^ b % c

 

データ型

type(a)

データ型を取得

 

リテラル

b'0000'

バイト型

 

端数処理

round(a, b)

aを小数b桁未満を丸める
※偶数側に丸められる
 2.5 → 2
 1.5 → 2

 

基数変換

bin(b)

2進数で表示(0b111)

hex(x)

16進数で表示(0xfff)

oct(o)

8進数で表示(0o777)

 

入出力

入力

出力

print('string')

string

print(1, 2, 3.5)

1 2 3.5

print(1, 2, 3, sep='/')

1/2/3

print('string'+'string')

stringstring

print('文字列{}string{}'.format(a, b))

文字列astringb

 

Input('プロンプト')

プロンプト (入力)

 

ファイル入出力

f = open(ファイル名, 'r')

data = f.readline()

print(data)

F.close

ファイルを開いて行を読んで閉じる

with open(ファイル名, 'r') as f

    data = f.readline()

    print(data)

ファイルを開き、行を読んで、自動的に閉じる

with open('sample.txt', 'w') as f

    f.write('test\n')

書き込み

with open('sample.txt', 'r') as f

    data = f.readline()

    line = data.strip()

行を読んで、改行文字等を除去(strip())

with open('sample.txt', 'r') as f

    for line in f:

        print(line.strip())

行ごとに読み込んで出力

with open('sample.txt', 'r') as f

    lines = f.readlines()

    または

    lines = list(f)

全ての行をリストとして読み込み

with open('sample.dat', 'rb') as f

    f.tell()

ファイルポインタ位置を取得

with open('sample.dat', 'rb') as f

    f.seek(x)

ファイルポインタをxに移動

with open('sample.dat', 'rb') as f

    f.read(2)

2バイト読み込み

Import pickle

sample_num = 100

with open('sample.pkl', 'wb') as f

    pickle.dump(sample_num, f)

オブジェクトの書き込み

Import pickle

with open('sample.pkl', 'rb') as f

    load_num =  pickle.load(f)

オブジェクトの読み込み

 

オープンモード

'r'

読み込み

'w'

書き出し

'a'

追記

'r+'

読み書き両用

'rb'

バイナリ読み込み

'wb'

バイナリ書き出し

'r+b'

バイナリ読み書き両用

 

制御文

if文

if 条件式:

    真だった場合の処理

elif 条件式:

    真だった場合の処理

else 条件式:

    偽だった場合の処理

一般的なif文

if 値 in リスト:

    真だった場合の処理

値がリストに入っているかの確認

if a and b:

And

if a or b:

Or

if not a:

Not

a = None

if a is None:

Noneの判定(Nullみたいなもの)

 

三項演算子

'Trueの場合’ if (条件) else 'Falseの場合'

条件によって異なる値を選択する

 

for文

for i in リスト:
    繰り返す処理

繰り返し

※リストでなくてもiterableすべて可能

 (例えば文字列)

for i in range([m,]n):

    繰り返す処理

mからn-1で繰り返し

    pass

何もしない

 

イテレータ

Iter(iterable)

イテレーターの取得

next(iterator)

次の要素を取得

 

クラス

class MyClass:

    member = 0

 

    def __init__(self,  arg1, arg2)

        初期化処理

 

    def method(self):

        return 'aaa'

 

    def get_member(self)

        return self.member

   

obj = MyClass(arg1, arg2)

コンストラクタは__init__

メソッドには第一引数 self が必ず付く

class MyClass:

    member = 0

 

MyClass.member = 100

クラス変数

   クラスで共通の値

class MyClass:

 

    def __init__(self)

        self.member = 100

 

obj = MyClass()

obj.member = 1000

インスタンス変数

    インスタンスごとの値

class MyClass:

 

    def __init__(self)

        self.__member = 100

プライベートなメンバーを作成する
(アンダースコア2つでクラス外から参照できなくなる)

class MyClassBase;

    member = 'base'

 

    def func(self):

        print(self.member)

 

Class MyClass(MyClassBase):

    member = 'sub'

クラスの継承

クラス変数も、メソッドも同名のもので上書きし、独自の処理に変更できる。

super().func()

スーパークラスのメソッドを呼び出す

MyClass(MyClassBase, OtherClass):

    member = 'sub'

多重継承

 

関数

関数の使い方

arg_vals = [1, 2, 3]

print(*arg_vals)

1, 2, 3
(引数をまとめて渡す)

 

関数

def func_a(a, b, c):

    ~

関数定義

def func_a(a = 1, b = 2, c = 3):

    ~

デフォルト引数

def func_a(a = 1, b = 2, c = 3):

    ~

 

func_a(2, c = 5);

キーワード引数の指定

a == 2
b == 2
c == 5

def func_a(*args):

    ~

 

func_a(1, 2, 3)

args == (1, 2, 3)
※ タプル

def func_a(**kwargs):

    ~

 

func_a(a=1, b=2, c=3)

kwargs = {'a': 1, 'b': 2, 'c': 3}

args = [1, 2, 3, '4']

func_a(*args)

func_a(1, 2, 3, '4') と同じ挙動

kwargs = {'a': 1, 'b': 2, 'c': 3}
func_a(**args)

func_a(a=1, b=2, c=3) と同じ挙動

def outer(a):

    def inner(b, c):

        return b * c

    return inner(a, 10)

関数内関数

def outer(a):

    run_cnt = 0

    def inner(b, c):

        nonlocal run_cnt

        run_cnt += 1

        return b * c

    return inner(a, 10)

関数内関数から、外側の関数内の変数を操作する。

 

関数オブジェクト

a = sum ※sumは組み込み関数

a([1, 2, 3])

sum([1, 2, 3]) と同じ挙動

a = lambda x: x ** 2

2乗するラムダ式

map(func_a, list)

listの各要素をfunc_aに渡して実行する

戻り値は、各要素のfunc_aの戻り値のリスト

filter(func_a, list)

listの各要素をfunc_a(Bool型)で判定し、
真となった要素のリストを返す

list = [(1, 'a'), (2, 'z'), (3, 'n')]
list.sort(key= lambda x: x[1])

[1]の要素をキーとしてソートする。
元のlistが改変される

list = [(1, 'a'), (2, 'z'), (3, 'n')]
sorted(list, key= lambda x: x[1])

[1]の要素をキーとしてソートする。
元のlistは改変されない

 

スコープ

関数外での変数使用

グローバル変数

関数内での変数使用

ローカル変数

関数内で

global 変数名

して、使用

グローバル変数
(関数外の定義を上書き)

 

データ構造

リスト

リストの操作

len(x)

リストの長さを取得

list(range(3))

[0, 1, 2]

list(range(2, 11, 2)

[2, 4, 6, 8, 10]

list(range(9, 0, -2)

[9, 7, 5, 3, 1]

list1.append(x)

アイテムを追加

list1.extend(x)

別のリストを連結

list1.insert(n, x)

アイテムを挿入

list1.remove(n)

アイテムを削除

list1.pop(n)

アイテムを取得するとともに削除

list1.sort()

ソート

list1.sort(reverse=True)

逆順ソート(list1に影響)

sorted(list1)

ソートされたリストを取得

list1.reverse()

逆順にする(list1に影響)

reversed(list1)

逆順のリストを取得

list1.clear()

クリア

list1.index(x)

値がxの要素のインデックスを検索

list1.count(x)

値がxの要素をカウント

list1.copy()

コピーを返す(浅いコピー)

del list[x]

x番目を削除

del list[m:n]

m~n-1番目を削除

del list

すべて削除(要素ではなくリストが削除される)

 

リスト内包表記

[1, 2, 3, 4, 5]

リストの生成

[2 * x for x in list]

list内の要素xに対し 2 * x したもののリスト

[I * j for i in range(1, 3) for j in range(1, 10) ]

iとjそれぞれの組み合わせで演算したもののリスト

[[j * 4 + i for i in range(1, 5)] for j in range(2)]

[[1, 2, 3, 4], [5, 6, 7, 8]]

[xを使った値 for x in リスト if xを使った条件]

[x + 1 for x in range(10) if x % 2 == 0]

元となるリストに対し、条件に合致した要素を使って

値を計算し、リストを作成する。
[1, 3, 5, 7, 9]

list_1 = ~~~

[i for i in range(len(list_1)) if list_1[i]を使った条件]

条件に合ったインデックスのリストを取得
リストの長さのインデックスのリストを作成し、

forで反復処理している

[真の値 if xの条件 else 偽の値 for x in リスト]

リスト内の値に対し、条件によって異なる値を持つ

リストを作成する

 

添え字

list1[x]

x番目の要素

list1[-x]

後ろからx番目の要素

list1[m:n]

mからn-1番目までを切り出す

list1[m:n:x]

mからn-1番目までをx間隔で切り出す

上記指定 = [x]

上記指定の要素を置き換える

上記指定 = [x, y, z]

上記指定の要素を異なる要素数で置き換える

 

ループ

for index, value in enumerate(list1):

ループ内でインデックスを使用する

 

タプル

リストに似ているが、要素の一部を変更不能(イミュータブル)

(1, 2, 3, 4, 5)

1, 2, 3, 4, 5

生成

(1,)

1要素での生成

a, b, c, d, e = (f, g, h, i, j)

タプルのアンパック

a == f
b == g
c == h
d == i
e == j

tuple[n]

n番目の要素

 

集合

重複しない要素のセット

順序が不定

{'a', 'b', 'c'}

生成

{'a', 'b', 'c', 'c'}

重複はまとめられる
{'a', 'b', 'c'}

set('abc')

文字列から一文字ごとの集合を生成
{'a', 'b', 'c'}

set.add(a)

aを追加

set.remove(b)

bを削除

set.pop()

値を取り出して削除(取り出す値は不定

{リスト内包表記}

リスト内包表記による生成

{frozenset({jとiの式 for j in リスト}) for I in リスト2}

集合を要素として持つ集合の生成
要素はHashableである必要があるため、

frozensetを使用する。
frozensetはイミュータブル。

 

集合演算

set_a = set('abc')
set_b = set('cde')

set_a - set_b

差集合
{'a', 'b'}

set_a | set_b

和集合

{'a', 'b', 'c', 'd', 'e'}

set_a & set_b

積集合
{'c'}

set_a ^ set_b

排他的論理和
{'a', 'b', 'd', 'e'}

 

集合の比較

set_a = set('abc')
set_b = set('abc')

set_a == set_b

完全一致の判定

True

 

set_a = set('abc')
set_b = set('de')
set_a.isdisjoint(set_b)

完全不一致(一つも一致要素がない)の判定
True

set_a = set('abc')
set_b = set('bc')

 

set_b <= set_a

または
set_b.issubset(set_a)

部分集合の判定

True

set_a = set('abc')
set_b = set('bc')

 

set_a >= set_b

または
set_a.issuperset(set_b)

上位集合の判定

True

 

辞書

{1: 'a', 2:'b', 3:'c'}

生成

keys = [1, 2, 3]
values = ['a', 'b', 'c']

dict_a = dict(zip(keys, values))

生成

{1: 'a', 2:'b', 3:'c'}

{キーの式:値の式 for x in リスト}

内包表記による辞書の生成

{(キーとなるタプル):値の式 for x in リスト}

タプルをキーとする辞書の生成

main_ids = [100, 200, 300]

sub_ids = [1, 2, 3]

values = ['a', 'b', 'c']

dict_a = {(main_id, sub_id): value for main_id, sub_id, value in zip(main_ids, sub_ids, values)}

タプルをキーとする辞書の生成

{(100, 1): 'a', (200, 2): 'b', (300, 3): 'c'}

kuku = {y:{x:x*y for x in range(1, 10)} for y in range(1, 10)}

ネストした辞書の生成

dict_a[n]

キーnの要素を参照
なければエラー

dict_a.get(n)

キーnの要素を取得
なければNoneが返される

dict_a[n] = val

キーnとしてvalを追加

key in dict_a

keyがキーとして含まれているか確認
含まれていればTrue

del dict_a(key)

キーがkeyの要素を削除

dict_a.pop(key)

キーがkeyの要素を取り出したうえで削除

dict_a.clear()

全要素をクリア

for x in dict_a:

または
for x in dict_a.keys():

ループ内で1要素ずつ取り出し、xにキーが格納される

for x in dict_a.values():

ループ内で1要素ずつ取り出し、xに値が格納される

for key, x in dict_a.items():

ループ内で1要素ずつ取り出し、keyにキー、xに値が格納される

sorted(dict_a.items(), key=lambda x:x[0])

ソートされたリストを取得
(要素はタプル)

 

例外処理

try:

    処理

except 例外の種類:

    例外処理(sys.exc_info() で例外情報を参照できる)

except (例外の種類, 例外の種類) as err:

    例外処理(複数の例外をまとめられる。as err で、例外情報を取得できる)

except:

    その他の例外処理

else:

    正常終了時の処理

finally:

    必ず実行されるクリーンアップ処理

 

例外の送出

raise Exception(エラー情報, ・・・)

 

モリー管理

ガベージコレクション

import gc

gc.collect()

明示的にガベージコレクション

import sys

sys.getsizeof(obj)

オブジェクトのバイト数を取得

 

夢ログ

ある小さな雑居ビルの1フロアにあるカフェ
そこでパーティは開催されていた。
狭くて寒い階段を上り、店名もないドアを開いて入った。店内は隠れ家のようで、入った途端とても明るかった。
受付をしようとしたが、思い出した。私は申込みをしていない。しかも、何だか参加者がとても若い。どうやら、場違いなところに来てしまったらしい。

逃げるように、そのカフェを出た。焦りからか、脱いだ靴を履き忘れそうになった。

先程登ってきた階段は暗く寒く、しかもところどころ水漏れして水たまりができていた。
この階段は、雑居ビルのものではなく、繋がっている総合病院の階段のようだった。

不思議な形状で、10段下ったあと、踊り場で3段上がるようになっていた。上り下りを繰り返し、なかなか出口にたどり着かない。

各階のフロアに、広々とした廊下とナースステーションがある。

ふと、遠くからうめき声が聞こえていることに気づいた。上階から聞こえていて、少しずつ近づいている。

恐怖感があったので、今いる階のフロアのメインの階段から、外に抜けようと思った。
そのフロアは外来診療エリアのようだった。シンプルできれいな内装だが、外来受付は終わり、薄暗くなっている。

フロアに対して斜めの角度にエスカレーターがある。そこを目指すが、この病院はかなり広いらしく、なかなかたどり着かない。

うめき声がいつの間にか大きくなり、広い外来エリアに響き渡っていた。

エスカレーターを降りると、シャッターの閉まった調剤薬局があり、その先は車が行き交う道路で、普通の町並みがあった。

うめき声は聞こえない。

後から知ったが、雑居ビルのカフェは病院に繋がっていない。しかし、この暗い病院に迷い込む人が、あとを絶たないらしい。


仕事納めたので、年末年始はPythonを勉強します!

「歌わない自由」~つらいときに出会った曲たち

SEKAI NO OWARI の 「プレゼント」

さっきスーパーで流れていた。この曲は、2015年のNコン(合唱コンクール)の課題曲。ちょっとした思い入れがあるもので感動してしまった。

その時のこと

2015年のNコンが行われていた頃、前職で、社歌のようなものが作られた。
社長が気に入った歌手にお願いし、数々の注文をつけて出来上がった社歌、それは「社長からのプレゼント」と表現された。

この社歌は、朝昼夕と放送で流され、イベントで歌われ、毎月の朝礼でどこかの部署が強制で歌わされていた。業務外で時間を取られながら皆練習していた。そのことに強烈な違和感を持ちながら、どうにかならないかとずっと悩んでいた。

そして自分がいる部署にも「〇月の朝礼で発表してもらいます」という声がかかった。

しばらく一人で悩み、上司と、2つ上の上司に抗議した。他の誰も文句を言っていなかったが、自分は言ってしまった。その結果、「業務としてやるのだから、それに他部署との親睦にもなるのだから、きちんと参加しなさい」と言われた。定期的に練習があった。夕方定時30分前から30分後までの1時間。定時後は一応「任意」とされているが、実質誰も帰れなかった。
自分は、その練習に数度参加し、数度さぼった。さぼった日は上司から注意された。悔しい気持ちでいっぱいだった。私はエンジニアになるつもりでここにいたが、もはやエンジニアではなかった。「エンジニアの死」だと思った。

トップダウンで、上から気に入られることが何よりの処世術であったこの職場。抗いながら「終わった」という言葉が心をよぎった。その会社で業務に携わるための技術は問題なかった。力になれる要素はいろいろあったのに、それが叶わなくなることをとても悲しく思った。

アパートで

その時から、簿記の勉強をしようとアパートを借りて一人で過ごしていた。もう、ここで資格を取らないと、会計ソフトエンジニアとして本当に死んでしまうと危機感を持ったからである。

アパートで、イベントでの合唱に駆り出された人たちのことを考えていた。おとなしくて心優しい目の前の席に座っていた人。その人は取りまとめの人のお願いに、とても断りたさそうに「しかたないですね」と答えていた。そのとりまとめの人も本当は優しい人だったのだけど、社長の要求には絶対逆らえず、板挟みで最も苦しんでいた。その勧誘を見て辛かったが、私は大人しくしていた。

そしてイベントの日、いくつものグループが同じ曲を延々と歌った。皆死んだ目で。

勧誘されているのを見たとき、一吠えしておけばよかったと、後悔した。心優しい人たちを守れたなら・・・と思った。

そんな風に思い出す中、ラジオをつけるとNコンをやっていた。

www.youtube.com

SEKAI NO OWARI「プレゼント」 - YouTube

 

 

自分のいた中学も合唱に力を入れていたから興味があった。本気で合唱に取り組んできて勝ち残った人たちの発表を聴いて、感動した。

「人生」のこと
あまりにも問題ばかり起きるから
難問解決プログラムなのかと思っていたけれど

気付いたんだ「プレゼント」みたいなものなんだって
何十年か好きに生きていい特別なプレゼント

自分にとって、その時起きていたことは、今後の働き方を左右する大きな問題だった。
だから、この歌詞が心境に重なった時、じんと来るものがあった。

今歌わされているものがやはり何か大きく間違っていること、
そして今いる場所で苦しまなくても、自由に、歌いたいときに歌いたい歌を歌える場所に行けばいいじゃないかと思った。

その後、職場のほうは、こんなに歯向かったにもかかわらず、やりがいのある仕事をさせてもらった。しかしこの件で、会社が人をどのようにみてどのように使うのかがわかってしまい、失望してしまった。やりたい仕事がある限りここで働こうともしたが、その後頑張っても昇格などの評価がなかったので結局辞めることにした。

 

椎名林檎の「ありあまる富

www.youtube.com

合唱の強制に何かを奪われている気がして、イライラしながら仕事をしているとき、ある人がこの曲を教えてくれた。

合唱の強制で心の中を「自由の死」「エンジニアの死」という言葉が何度も行きかった。魂を捨てて、「自由」をテーマにしている歌を歌わされることは、自分の中にある大切なものを奪われることだと思った。組織のシステムに組み入れられながら「自由になれ」と歌う姿はもう、"Arbeit Macht Frei!"(働けば自由になる:ユダヤ人収容所に書いてある標語)並みの皮肉なことだと感じた。

それに対し、もっと軽い気持ちで考えてもいいのではないかと言ってくれ、この曲を教えてくれた。

私の気持ちの根幹は揺らがないが、確かになと思った。何かを奪われるような焦りは必ずしもいらなかった。余裕をもった気持ちで向き合うこともできるのだと知った。
それでも、人の心の自由を奪おうとする力には、やはり断固とした態度をとりたい。

 

こんな感じで、歌うことを強制されることはつらかったけれど、そこで素敵な曲に出会い、支えられながら悩みぬいて行動できたことは、本当に価値のあることだったと思う。今は正反対の環境に身を置くことができたけれど、人生は本当に難問だらけで、様々な葛藤と向き合わなければならないので、そんなときにまた素敵な曲に出会えることを願っている。

転職しての感想

2018年9月、2012年から勤務していたソフトウェア企業から、同じくソフトウェア開発を行う企業に転職しました。

転職までの経緯

理由・経緯は以下でも書いていますが、時系列で書いてみたいと思います。
http://pgcityblog.hatenablog.com/entry/2018/08/31/131554

2012年

新卒入社した時、自分の思い描いた分野の開発ができることを期待して入社しました。

2013年、2014年

繁忙期の残業などを忙しく働いて乗り切るような毎日でした。
業務内容は言われた開発を単純に行う感じでした。

2015年:業務と関係ないことをやらされる

少し雲行きがおかしくなりました。
入社当時からチームワークを過度に重んじる空気がありましたが、これが極端になってきました。

まず「会社のイメージソングができました。なのでみんなで歌いましょう。有志のチームで、イベントで発表してもらいます。(頭数は必須)」
という話になり、まず、周囲の人が合唱チームというものに次々引き抜かれて業務を抜けるという光景を目にしました。

心に残っているのは、周囲の大事な同僚に合唱への勧誘をする、合唱の中核メンバーです。
「~~こういうわけで、どうしても参加してくれる人が必要になっちゃったんだ。」
「(いやそうに)なら仕方ないですね~」

断るのが苦手な優しい人が多かったのですが、この光景を見るのはつらかったです。
さらに、その数か月後、自分にとっても避けられない事態になってきました。

今度はこういう話が上がってきました。
「会社のイメージソングを、朝礼で順々に発表してもらいます。〇〇さんは△△チームで、××月に発表です。□□日から業務時間後に練習があります。(残業代は出ません。任意です(半強制))」

私は、もともと歌を歌うことが苦手なのですが、
それ以上に、「自由」がテーマの曲を強制で歌わされることが許せませんでした。
また、強制なのか任意なのか、そして業務なのか非業務なのか、そういったことをあいまいにして人を使おうとする会社の姿勢が問題と感じました。

私は上司に、合唱の練習には参加したくないと告げました。
「これは業務だから、参加しなければならない」と返されました。
さらに上にも伝えました。
このようなことで上司の気分を害させてしまうこと、この会社で落ち着いて成長していきたかったのに、それを許容できないほどの事態になっていることが、とても悲しく思えました。

一方で、この問題は多くの人がたびたび愚痴として話すのに、誰も、公の場で異議を唱えることはなかったのです。

ひとまず私は、歌を歌わずにその場にいるという選択をし、周囲から多少の文句を言われながらも、事態の収拾がつきました。
(とはいっても、遠い部署から文句があったらしいので、問題児扱いではあったようです)
この時点で、会社が向かいたい方向が、事業ではなく、内輪での結束に過ぎないことを確信しました。
しかし、私にはまだ、転職を決意できるほどの材料もありませんでした。

2016年、2017年 業務は高度化、しかし報酬は変わらず

これだけの問題がありながらも、少しずつ好きな業務が回ってくるようになりました。
しかしながら、評価には会社への忠誠が重視されることから、業務の割には評価もされていないように感じていました。

実際のところ評価は一段階上がっていたのですが、会社の業績が悪く、評価のメリットを感じられたことは一切ありませんでした。

報酬は変わらないが、業務は高度になってくるという状況で、転職への思いや、職務経歴書に書けるネタは着々と蓄積してきました。

2018年 転職を決意

自分も30代に入り、早めに転職をしておかなくてはという思いもありました。
2017年に一度エージェントとやり取りしたが中断したという経緯を踏まえ、今度は期限を決めて、1か月でスパッと決めようと決意しました。

5月「6月から本気出す」と決意しました。
6月、本気で活動を開始しました。
リクルートのサービスに登録し、いくつかのエージェントに会いました。
背水の陣を敷き、理由を問われながらも有休を全力で使って企業を訪問しました。

7月、本命から内定をもらいました。
8月、引継ぎが少々面倒でしたが、何とか退職手続きをでき、有休を消化しました。
9月、正直言って長すぎる休暇を過ごし、転職先に入社しました。
   おまけに、この長い休暇で極度の孤独を感じ、婚活を始めました。
   年収も上がったので、自信をもって活動できそうです。

感想

まだ日数を重ねていないですが、転職には良い面も悪い面もあり、それでも総合的にみてよかったと感じます。

慣れない仕事や、一段高いレベルの成果を求められることには厳しさも感じます。
しかし、転職しなければ得られなかった体験を、これまでには信じられないほどのペースで消化していることに気づかされます。

転職しなければ目まぐるしい変化はなく、穏やかです。
しかし、日々気付きがない仕事が、自分の人生に何かをもたらすか。
本当に求めているのは、ただ社内で承認されることだけではなく、自分の至らなさに気づかされ、嘆き、もがき苦しみながら日々を送り、その結果次々と表情を変えていく世界を見ること、変わっていく自分自身の人生を感じることなのだと考えました。

私は今まで、「今日を耐え忍び明日を待つ」ということをしていました。転職によってこれをやめ、「今」を生きていることを強く感じます。
たびたび、刹那的な生き方と対照的にとらえていましたが、「今」を真剣に生きることは、それとは違うことに気づきました。

先日「いつ転職すべきか」という話を友人と少しだけしましたが、こう答えました。

「すべては「今」だと思います。」

本当に充実した今を作れるなら、未来を考えないことにはならないと信じ、今日という人生の一コマを、大切に生きていきたいと思っています。

新卒入社で6年間勤務したパッケージソフトメーカーを退職します!!

こんにちは、P.G.CITYです。

私、この度転職することにいたしまして、ただいま人生の夏休み中でございます。

 

とあるパッケージソフトウェアを作っているメーカーで勤務していまして、2012年に新卒入社し、6年ちょっとが経過しました。

企業文化に微妙な面はありながらも、心優しいメンバーとともに業務やイベントに取り組めたこと、特にほぼ新卒採用の企業であり、多くの同期に恵まれたことが、私の人生にとってかけがえのない財産となりました。

なかなか人となじめない、引っ込み思案の私でしたが、その中でも夢中になって取り組むことができ、成長できたのは、多くの優しい同僚のおかげでした。なかなかうまくコミュニケーションが取れず迷惑をかけることもありましたが、その度にフォローしてもらったことに本当に感謝しています。

今まで働いていた会社では、技術職としてミッションをこなしてきました。保守的な組織の中でも先進的な業務に携わらせていただき、失敗を恐れずにチャレンジできる素晴らしい環境でした。

ですが、今の環境よりも新しい環境に移ってみたくなってしまいました。理由は非常に多岐にわたります。2年ほど前から少しずつ理由となる物事が重なっていき、今年の6月、大きな決断をしました。

1つ目は、開発に全く関係ない、事業とも関係ない雑多な業務でした。私はソフトウェアエンジニアですので、ソフトウェアの開発を行うことが主要な業務です。しかし、それ以外のイベントに関連する業務の比重が多く、多くの人が技術を伸ばしにくい環境になっていました。自分の部署こそある程度上司が止めていてくれていたものの、自分が指導している新人がそのような技術と関係ない業務をさせられて、技術を伸ばす時間を削られているのを見て、この企業の将来性は大丈夫なのかと、疑問を感じました。

2つ目は、事業の運営姿勢でした。様々な技術を使い、お客様に最適な解決策となるパッケージを提供する。それがお客様のビジネスに利益をもたらすという、自然な流れを実現したかったのですが、なかなか結び付かないことに悩みを抱えていました。また、企業のビジョンが経営側から見えにくく、業務拡大も目指さず、実際利益も上がりにくい状況でした。一部の部署では人材の流出が始まっており、自分たちの部署にも、どことない危機感が漂っていました。

3つ目は、給料と評価の不公平感でした。保守的な中でも先進的なことをさせていただいていましたが、給与体系は年功序列であり、何をしても年齢に応じた給料しかもらえませんでした。また、様々なところの評価で、業務の成果以外の帰属意識が重要視され、そもそも技術的に頑張っても会社自体に気に入られた人ばかりが昇進する状況で、不公平感を感じていました。

4つ目は、技術的に孤独な環境でした。近年でこそ新しい技術を取り入れるべく取り組んでいましたが、全社的に技術レベルが低く、新しいことを一生懸命に調べて取り入れようとしても、周囲の理解度が低いために、非常に孤独な闘いとなっていました。自分にとって到底届かないほどの高いレベルの人たちに、必死に食らいついていくような体験をしたかったのですが、なかなか目指せる人もいなく、何をしても手ごたえがありませんでした。

そんな感じで、転職を決意したのですが、今の仕事にも良かったことは多いです。

残業はほとんどなく、休みはしっかりとれました。しっかりとした研修、プロジェクトマネジメント体制、開発環境の構築、様々な業務のドキュメント化が行われていました。

古くからある企業ですので、基盤はしっかりしていたのです。それがかえって、ぬるま湯のような環境を作り出してしまっていたわけで、転職につながったのだと思います。

言ってみれば「卒業」です。

こんな心境です↓

でもね、会えたよ!
すてきな天使に

卒業は終わりじゃない
これからも仲間だから

放課後ティータイム 「天使にふれたよ!」 より)

ここでいう「天使」というのが、素晴らしい同期です。実は部署が違う同期も結構辞めていて、たまにある同期会が誰かの送別会になっていたりします。それでもそれぞれの場所からみんな集まってきてくれて、自分の送別会も開いてくれました。

どんなに素晴らしい転職者を集める企業でも、これほどの同期関係を築けるところは無いと思います。コミュ障の私で大して深い話もできない私でも、ここに集まれることが本当にいつもうれしいのです。これは、いつまでも大事にしたいことです。

 

次の転職先も似たような会社なのですが、すごく素敵なところです。正式にジョインするまでの間は人生の夏休みと捉えて、働きながらではなかなか時間が作れずにできなかったことを行うつもりです。クリエイティブなアイディアを出せるようにするために、色々な作品やコンテンツに触れインプットすることで、自分の中の引き出しを増やしたいとも考えています。

転職先の会社では、新しい仲間たちとともにアサインされたミッションに、できるだけ早くコミットして貢献できるよう頑張っていきたいと思います。

 

今の会社に残る同僚、上司、後輩に気がかりなことはあります。今はひとまず大丈夫でも、個人の将来、組織の将来、深く考えると心配になります。私は転職という道を選んだのですが、何か抜本的な改革が行われ、また会社が元気になってくれれば、私もうれしいです。今の会社に関わる人、辞めていった人、それぞれの幸せを切に願っています。

 

あと、新卒で入る会社は、文化や、技術的な刺激の有無をしっかり判断したほうが良かったと反省しました。2012年ごろまではそんな風潮もあったけれど、不景気でも絶対つぶれない企業なんてものはなく、どこにいたって何があるかわからない世の中ですので、少しぐらいは挑戦できるところにいたほうがいいでしょう。

当たり前のことばかりかもしれませんが、参考になれば幸いです。

 

  • このテンプレをベースに編集しました。
    http://仕事.やめよう.みんな/
  • 本エントリで出てくる「雑務」というのは本当にめちゃくちゃな、業務としての「文化活動」みたいなものです。誰の利益にもならないです。

 

 

 

勉強会を企画してみたら壁が厚かった(1)

4月から、勉強会を企画していた。

3月頃からconnpassに登録し、社外勉強会に参加し始め、「LT大会程度なら社内でできそうだ」と思いつき、動き始めた。

まずは、近隣の席の数人に「勉強会やりたいです」と言った。言ったことで、意思が明確になった。

場所は社内のスペースを借りることができた。これは楽だった。

勉強会の内容はLT大会にして、テーマは自由、時間も自由にした。勉強会など1度も開かれたことがない状況なので、とにかく敷居を低くしようと考えた。

そして、片っ端から「勉強会やります。発表してくれませんか?」と聞いて回った。

発表してくれる人は集まったが、多くの人は、

「聞くだけならいいけど、発表はちょっと・・・」
「間違ったこと言ったら恥ずかしい」
「まずは(私)君が先生になって講義をしたらいいんじゃないかな」

などの返答だった。

やりたかったことは、
エンジニア一人一人が持っている知見を発信し、共有することであり、一人が発表すればよいものではない。全体的に、自分からのアウトプットには抵抗があるようだった。今後の課題である。

結局、集まったのは技術力がある人たちで、LT大会のはずが、みんな、20分くらいの発表を希望した。とりあえず、その人たちで第一回を開催することになった。

第一回は成功した。集まったのは12人だった。
興味がある人たちで集まったのでかなり盛り上がった。発表内容はどれも面白かった。(DBとかツールとかプログラムの話題。)

しかし、技術レベルを問わず、多くの人に集まってもらうという面では課題が残った。


そして、第2回も開催することにした。
ここで、規模の拡大を図ることにした。
これは意図的な判断である。

最初は一人一人声をかけていたが、今回は、部署全体に告知するようにした。結果、上から下まで全員に伝わることになった。

その反響を直接多くは聞いていない。でも、ポジティブなものからネガティブなものまで色々な意見があった。
例えば、「急がずクチコミでゆっくり広げたら」と言われた。

突発的な企画に、否定的な意見もあった。でも、やり方がそんなに悪かったとは思っていない。革新的な行動をとるときに遠慮は要らない。ただ、そう捉えられ(警戒され)ないための工夫はあってよかったのかも知れない。思いは革新することだったけれど、この告知は雑な面もあったかもしれない。

とはいえ、今回大事にしたかったことは、スピード感、インパクトである。
根回ししておくことは重要かもしれないけれど、それとは異なる価値観も示したかった。

やはり、気軽に勉強会が開けるような状況がいい。自由な環境と、エンジニア自身の解放が必要である。

いつまでも日本的組織のままではいられない。これからも、エンジニアの自由について考えていく。


日本企業の社員は、なぜこんなにもモチベーションが低いのか?

日本企業の社員は、なぜこんなにもモチベーションが低いのか?

〇〇エンジニアの生存戦略 ~ 「【まつもとゆきひろ氏特別講演】 若手エンジニアの生存戦略」を聞いて

〇〇エンジニアの生存戦略

この記事は、
2017/05/20 「【まつもとゆきひろ氏特別講演】 若手エンジニアの生存戦略」 を聞いて、自分も発信してみたいと思ったことを感想とともにまとめたものです。

発信したいこと

  • 技術に目を向ける
  • やりたいこと
    • 学ぶ
    • 実践する
    • 発信する
  • 一人のエンジニアとして自立
  • 自立の先にあるもの
    • もう少し自由になれる
      • まつもとゆきひろさんの講演より
        • 理不尽を拒否
        • 鈍感になる
        • プログラミングを極める
        • 人間心理に興味を持つ
  • 〇〇エンジニアの生存戦略

技術に目を向ける

社内勉強会をやろうとしたことの理由です。
社外勉強会で高度な技術を持ち楽しんで発信している人がいる。
これを自分のいるところでもやりたいと思ったのです。

勉強会によって

  • 学ぶ機会を作り
  • 学んだ成果を実践し(これはお仕事)
  • 実践した成果を発信する

これを行うことによって、知識を広げたり深めたりしたいです。

自立する

私たちは勉強会をすることで、きっと、自立できます。
自ら課題を見つけ、解決策を導き出せます。

多くの組織では、新人研修を行って必要な技術力を身に着けていますが、それだけではなく、自ら問題を発見し、解決できるという意味の自立です。

自立の先にあるもの

「もうすこし自由になれる」

エンジニアとしての自立の先に、もう少し幸せな未来があります。

2017/5/20
「【まつもとゆきひろ氏特別講演】 若手エンジニアの生存戦略」

最近、まつもとゆきひろさんの講演を聞いてきました。
「若手エンジニアの生存戦略」についてのお話でした。

ちゃんとした要約は以下のブログが分かりやすいです。

zuckey17.hatenablog.com

この講演のさわりについてご説明します。

若手エンジニアの生存戦略

  • 理不尽を拒否
  • 鈍感になる
  • プログラミングを極める
  • 人間心理に興味を持つ

これは、若手に限らず、技術者が技術者として生存するために必要なことだと感じました。

理不尽を拒否・鈍感になる

Matzさんは、東京への就職を避けて浜松の会社に就職しました。
そこでスーツが嫌でジーパンTシャツ出社をやってみて、
揉めるだろうと踏んでいたが案外だれからも文句を言われなかったエピソードから、

  • 我慢に価値はない。理不尽は拒否しなければならない
    • 「結果よりも過程」
    • 「生産性よりも忍耐」→理不尽
  • 組織の上から下まで、勘違いしている。社会的圧力に対して鈍感になろう。
    • 労働は我慢ではない。
    • 報酬は苦痛の対価ではなく、価値を提供することの対価。
    • 雇用関係というものは、もっと対等なものである。
    • 社会的圧力が生まれてしまっている。

というお話をされました。

私は組織の中で生きているので、何かと我慢することはありますが、
これからは我慢する前に、それが本当に価値につながっているのか、
見直せるようになれればよいと思います。

また、この話をポジティブにとらえると、

  • みんながやらない、やってもいいことがある

ということで、それは「ずる」ではなく「裏技」と話していました。

この間、社内勉強会を、前例がない中思い付きでやってみましたが、
案外誰からも怒られませんでした。 やってもよいことは、実は身の回りにたくさんあるのだと思います。

理不尽を拒否する方法

理不尽を拒否する方法として以下の項目が挙げられました。

  • 価値観にアプローチ
    • しかし、他人は変えるのは難しい → 無理なら逃げる
  • 社会的圧力を自覚する
    • 他人を変えられないにしても、圧力を自覚すれば、変えるなり逃げるなり判断できる。
  • 理不尽に対して声を上げる
    • (プラカードをもって行進しなくてもいいでしょうけれど、できる範囲で行動する)
  • 選択肢はWin-Win か、取引しない
    • 両方に得るものがなく力だけを使う「綱引き」は無駄

最後の質問タイムでも、「勤勉に価値を置く上司を潰すには」という質問がありました。

  • 成果によって黙らせる
  • 成果でも黙らない上司には
    • 上司の上司に言う
    • 逃げちゃう

この流れの中で印象に残っている言葉が「価値観」です。
身の回りに様々な理不尽があるとして、
まずは「技術」という価値観を多くの人で共有して、それを物差しにして
理不尽なことを、必要に応じて拒否していければよいと思います。

また、その物差しを使って判断する力は、技術者としての自立ではないかと思います。
学び、実践し、発信し、そして学ぶ。その自発的な繰り返しによって得られる自立によって、
今我慢しようとしていることに価値があるか判断でき、
意思表示ができるようになると思います。

今、勉強会をやろうとしている理由は、単純な理由ではありますが、
「若手エンジニアの生存戦略」につながるものがあると思いました。

〇〇エンジニアの生存戦略

皆様

  • 技術者として幸せですか?
  • 今一度、技術に注目しませんか?
  • 技術という物差しを手に入れて、技術者として自立して、
    我慢をやめて、理不尽を拒否して、本当に生み出したい価値を生み出しませんか?