こういうのでいいんだ。こういうので。
- タブレットモードなんて使わねえよと思っていたが以外にも縦長にして文章を読む(つまり普通のタブレット)のが便利だ。プルリクエストのレビューなどで体験がよい
- 小さい
- 安い
重要な順で
優秀なプログラマーというのは寝ている間に異世界に召喚されて無双するのとはわけが違うんですよ。
自分の例で言うとプログラミングを始めた中学生の時から優秀なプログラマだったかって、そんなわけない。みんなヘッポコからスタートしているに決まってるわけです。以来二十余年、地道に生き恥を晒し続けてきた結果として、現在いちおう業界の末席を汚すところまで来ている。このプロセスから目を背けるべきではないです。優秀なプログラマーに生まれる人間なんかいない。優秀なプログラマーに「育つ」んだし、それには時間が必要。今日から無双したいと思うな。
フリーランスは基本的にはスポットで求められている作業をスポットで実施する。新卒ではないので即戦力が求められている。逆に言うと新卒は即戦力を求められていない。フリーランスに限って言うとフリーランスの仕事というのはそのほぼ全部が昔取った杵柄でしかなく(昔取った杵柄にしか仕事は来ず)、今日やっている作業を延々と何十年も続ける未来以外を描くのは意外と難しい。
フリーランスの仕事は昨日と同じことをしていますが昨日の倍の単金をいただきますというのは通らない。水光熱費が高騰しようがフリーランスにベースアップはない。量を増やすか質を上げるかのどちらかをしないと年商が増えない。しかし…
For instance when we have the following C file:
#include <time.h>
struct tm x;
iwyu
generates the following garbage output:
当時、その案件にはひとりアサインで、客先常駐であった。幸いにして常駐先の皆さんには本当に良くしていただいて、困りごともなく、業務も適量で、掛け値なしによい客先だなと思っていた。
しかしそうなってくると、所属先に所属している意味ってなんだっけという疑問がむくむくと頭をもたげてくるのである。客先常駐ひとりアサインというのは客先常駐ひとりアサインであるがゆえに、会社がこんだけ抜いてるぞというのが隠しようがないわけ。客先に請求書持っていくのも自分なんだから単価も分かるし、振り込まれてる給料も分かる(明細見れば社保の会社負担分とかも分かる)。俺が所属先に投げてるバックオフィス業務は、この抜かれてる金額に見合っているか?
ところが。ところがなのである。やめるぞと宣言して常駐が解除になり、所属先に残りのしばらく通っていると、いろいろなことが見えてくるのだ。たとえば所属先の同僚と何気なく会話する。たとえばバックオフィスの人達と(やめるから)書類のやりとりをする。たとえば所属先の営業が電話をかけている。そういうごく些細なことの積み重ねがあるのだ。会社は、中抜きするだけの謎の組織ではなかった。もっとディティールがある。そこを無視して、というか、そこが不可視化されて、金のやりとりだけ見えてしまうから、不要という話に傾いてしまったんだと気づいた。まあ言った以上はそのままやめたし次も良かったから後悔もないけど、不幸な、というか、回避策は何かあったんではないか。
特に何もやってあげてないのに他人(法人だけどさ)から何百万何千万のお金が何年もとめどなく注ぎ込まれてきたら、怖くないですか?
オープンソース・ソフトウェアの開発者だけで給料をもらうというのは、まさにこの現象が発生してくるわけ。それまでもこれからも、ずっとオープンソース・ソフトウェアの開発者はやってきたし、やっていくわけでしょう。そんなの会社があってもなくても、別にやることなんて変わらないじゃない。じゃあなんで、ある時から急にかなりの金額が振り込まれてきてしまうんだ?しかもあからさまに物価上昇を上回る結構なハイペースで昇給していく。やっていることは一切何も変わってないのに!
この状況に適応するまでにはいささかの時間を要しました。根が小心者なので。
diff --git a/vm_insnhelper.c b/vm_insnhelper.c | |
index 5e1cfccf3c..db97ec62a6 100644 | |
--- a/vm_insnhelper.c | |
+++ b/vm_insnhelper.c | |
@@ -2076,6 +2076,14 @@ vm_call_iseq_setup(rb_execution_context_t *ec, rb_control_frame_t *cfp, struct r | |
const int param_size = iseq->body->param.size; | |
const int local_size = iseq->body->local_table_size; | |
const int opt_pc = vm_callee_setup_arg(ec, calling, cd, def_iseq_ptr(cc->me->def), cfp->sp - calling->argc, param_size, local_size); | |
+ const int __line__ = rb_vm_get_sourceline(cfp); | |
+ if (__line__ > 0) { |
#ifndef MJIT_PCH | |
#define MJIT_PCH | |
#include "/tmp/_ruby_mjit_hp30916u0.h" | |
#endif | |
/* glob@<internal:dir>:135 */ | |
VALUE | |
_mjit2(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp) | |
{ | |
VALUE stack[4]; |
#! /your/favourite/path/to/ruby | |
# -*- coding: utf-8 -*- | |
# Copyright (c) 2013 Urabe, Shyouhei | |
# | |
# Permission is hereby granted, free of charge, to any person obtaining a copy | |
# of this software and associated documentation files (the "Software"), to deal | |
# in the Software without restriction, including without limitation the rights | |
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |
# copies of the Software, and to permit persons to whom the Software is | |
# furnished to do so, subject to the following conditions: |
新社会人に必須である: