Lazy Diary @ Hatena Blog

PowerShell / Java / miscellaneous things about software development, Tips & Gochas. CC BY-SA 4.0/Apache License 2.0

「プログラミングできるのが普通の若者たち」のレベル感

UR都市機構 Open Smart URのコンセプトブック「UR 2030」*1では、「プログラミングできるのが普通の若者たち」という2030年の若者像を示しています。

では、この「若者たち」とは、具体的にどういう人たちから構成されるのでしょうか? SSP*22030(階層と社会意識全国調査)とSSM*32030(社会階層と社会移動全国調査)が行われたとして、「日常的にプログラミングを行う」と答える層はどの程度の割合で、またそのプログラミングの程度はどういったものなのでしょうか?

そう考えると、きっと「プログラミングできるのが普通の若者たち」イコール「Googlerみたいな人たちが若者人口の大半を占める」ではないだろうなぁと思うわけです。

これまでは、プログラミングを習ったことのない人が大半なので、プログラマのレベルとその人数分布は以下のようになっていると思われます。

f:id:satob:20200105020622p:plain

一方、みんながプログラミングを習い出した後は、「人間の能力はおおよそベル型カーブに沿う」という前提に従うとすると、おそらく以下のような分布になると思われます。

f:id:satob:20200105020626p:plain

この推測通りになれば、「プログラミングできるのが普通」になる前と後とでいちばん増えるのは、グラフの右端にいるようなコードをバリバリ書ける人ではなくて、グラフの真ん中くらいの人になるわけですね。

ここで「このグラフの真ん中くらいの人って、具体的にはいったいどのくらいのレベルなんだろう?」とと考えると、きっとこのレベル分けでレベル10くらいに位置するんじゃないかと思うんですよ。 satob.hatenablog.com

他の指標で言うなら、AtCoderで言うと灰色と茶色のちょうど中間くらいの人が増えるわけですね(茶色が上位50%なので)。そう考えると、やはりあまりレベルが高いとは言えません。 chokudai.hatenablog.com

AtCoder緑色や水色の人がモリモリ増えたらそりゃ嬉しいですけど、学校の他の授業と同じ話で、みんながみんなバリバリできるようには、きっとならないですよね。

「プログラミングできるのが普通の若者たち」が増えるということは、一般的な(プログラミングを生業としない)職業に就くのはこういった「平均的」なレベルの人が大半になる、というわけです。また、今後はあらゆる業種で、自前でプログラムを書くことが増えていくのではないかと思われます。そう考えると、

  • 平均的なレベルの人に、どうプログラミングを教育していくか?
  • 平均的なレベルの人が書いたコードをいかにメンテナンスしていくか?

といった点が、プログラミングを生業としない企業での課題になっていくのではないか(また教育に関する研究の大きなテーマになっていくのではないか)、と考えるわけです。

Amazon Kindle Paperwhiteが4G回線で見られるのはWikipediaだけ

Amazon Kindle Paperwhite (4th Gen)は

  • 内蔵のブラウザでWebサイトが(いちおう)見られる
  • 4Gモデルの通信料はAmazon持ち

と聞いていたので、「TwitterとかをKindleで見るようにすれば通信料が節約できるかも!」と思ったのですが、そうではありませんでした。

Wikipediaだけは、本文中の単語を調べるときにも使うため、4G回線でも見られます。ですが、その他のサイト(Twitterとか)は、Wi-Fi接続しているときしか参照できません。

Wikipediaを一日中見てる!みたいな場合を除いて、通信料の節約には使えなさそうです。

Change culture (locale) of current PowerShell process

You can change culture (locale) into English with chcp 437 in Windows 7.

In contrast, You cannot change culture with chcp in Windows 10.

In Windows 10, if you want to execute single PowerShell script in another culture, you can execute the script like this:

[Threading.Thread]::CurrentThread.CurrentUICulture = 'en-US'; .\myscript.ps1

If you want to change culture throughout every command in a PowerShell process, you have to change the culture setting cached in PowerShell runtime with reflection like this:

# example: Set-PowerShellUICulture -Name "en-US"

function Set-PowerShellUICulture {
    param([Parameter(Mandatory=$true)]
          [string]$Name)

    process {
        $culture = [System.Globalization.CultureInfo]::CreateSpecificCulture($Name)
       
        $assembly = [System.Reflection.Assembly]::Load("System.Management.Automation")
        $type = $assembly.GetType("Microsoft.PowerShell.NativeCultureResolver")
        $field = $type.GetField("m_uiCulture", [Reflection.BindingFlags]::NonPublic -bor [Reflection.BindingFlags]::Static)
        $field.SetValue($null, $culture)
    }
}

Note: Some cmdlets like Add-Type are not affected this setting.

(from https://gist.github.com/sunnyone/7486486 via https://twitter.com/altrive/status/401349992536756224?s=20)

Import assemblies for C# embedded in PowerShell

You can import assemblies (.NET DLLs) in PowerShell like this:

[void][reflection.assembly]::LoadWithPartialName("System.Drawing")
New-Object System.Drawing.Drawing2D.GraphicsPath

But you will get an error when you tring to use these assemblies in C# source embedded in PowerShell script. Assemblies loaded with LoadWithPartialName aren't referenced from embedded source.

[void][reflection.assembly]::LoadWithPartialName("System.Drawing")
Add-Type @"
using System.Drawing.Drawing2D;
"@
Add-Type : c:\tmp\_System\ama4povk.0.cs(1) : The type or namespace name 'Drawing2D' could not be found (are you missing a using directive or an assembly reference?)
c:\tmp\_System\ama4povk.0.cs(1) : >>> using System.Drawing.Drawing2D;
At line:1 char:1
+ Add-Type @"
+ ~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (Microsoft.Power...peCompilerError:AddTypeCompilerError) [Add-Type], Exception
    + FullyQualifiedErrorId : SOURCE_CODE_ERROR,Microsoft.PowerShell.Commands.AddTypeCommand

Add-Type : Cannot add type. Compilation errors occurred.
At line:1 char:1
+ Add-Type @"
+ ~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Add-Type], InvalidOperationException
    + FullyQualifiedErrorId : COMPILER_ERRORS,Microsoft.PowerShell.Commands.AddTypeCommand

With Add-Type, you have to specify assemblies with -ReferencedAssemblies option like this:

Add-Type -ReferencedAssemblies ("System.Drawing") @"
using System.Drawing.Drawing2D;
"@