2020-12-18 17:00:00

プログラミング はじめの一歩、これからプログラミングを始めたい方へ

これからプログラミングを始めたいという方向け「プログラミングはじめの一歩」というテーマでプログラミング講座をやっていきます。 プログラミングとはなにか?どのプログラミング言語を選ぶか、各言語の特徴など、これからプログラミングを始める前に知っておきたいことの、基礎固めをしていきます。

対象読者

  • プログラミングという名前は聞いたことがあるが具体的には知らない方
  • これからプログラミングを始めたい方
  • プログラミングの勉強を何したらいいかわからない方
  • プログラミング初心者の方

目次

プログラミング はじめの一歩

Youtubeのライブ配信でも講座を行いました、動画で見たい方はこちらも見てみてください

1.プログラミングの目的

最近「プログラミングをやってみたい」という言葉を周りで聞くことが増えたとおもいます。

その背景には小学校の教育に「プログラミング教育」が必修化されニュースで話題になったり、 AIの話題なども近年は多いですが、そこでもプログラミングが関わってくるなど、注目されているということが挙げられるでしょう。

ただこの「プログラミング」というキーワードだけが一人歩きをしていてしているように感じます。

「プログラミングをやってみたい」と思っている人は本当にプログラミングをすることが目的なのでしょうか?

プログラミングの目的について少し考えてみましょう。

なぜプログラミングをするのか

プログラミングをする目的はソフトウェア(プログラム)によって問題解決・課題解決をするためです。

つまり、プログラミングをすること自体は目的ではなく、目的を達成するための手段です。

例えばチームで情報共有がうまくいっていないという課題があって、その課題の解決のためにWebで掲示板を作ろう!っと思ったとします。 それを実現するために必要な道具の1つがプログラミングなわけです。

料理に例えてみると、プログラミングは包丁や鍋などの道具の一つです。 「プログラミングをやりたい」といっているのは「包丁を振りかざしたい!」といっているようなものなんですよね。

「包丁を振りかざしたいから料理をはじめました!」というひとはあまりいないと思います。

私ももともとは「プログラミングをやりたい」という理由ではなく「ゲームを作りたい」という理由でプログラミングをはじめました。

プログラミングでできること

ではプログラミングでできることは何があるでしょうか?

いくつか例を上げておきます。

  • Webアプリ、Webサービス作成
  • 人工知能・AI作成
  • スマホアプリ
  • デスクトップアプリ(PC上で動くソフト、例:ペイントソフト、Excelなど)
  • ゲーム作成
  • 電子期の制御、IoT

Webアプリ、Webサービス

Google,Facebook, Twitter, Youtube などブラウザから利用しているかとも多いかと思います。 そういったブラウザ上で提供されているサービスはWebアプリケーション、Webサービスと呼ばれます。

人工知能・AI

身近な例でいえばSiriなどもそうですし、自動運転や、画像認識など色々な例があると思います。

私は将棋をやっていたりするのですが、将棋の指しての評価値などもAIによって算出されたりしていますね。

スマホアプリ

スマートフォン上のアプリのことです。 iPhoneで動くものをiOSアプリ、Android上で動くものをAndroidアプリなどと呼ぶこともあります。

デスクトップアプリ

デスクトップ環境上で動くアプリケーションのことです。 パソコンにインストールが必要なアプリケーションを思い浮かべるとわかりやすいかと思います。

ゲーム

PCで動くゲーム、PS4,PS5,Switchなどで動くコンシューマゲームなどもプログラミングによって作られています。

スマホゲームなどのソーシャルゲームとコンシューマーゲームでは技術的な違いが大きいので、この記事ではゲームと言ったらコンシューマーゲームを指しているものと思ってください。

電子機器の制御、IoT

洗濯機、電子レンジなど家電などにもプログラムは組み込まれています。

洗濯機であれば、回転数を制御したり、回す時間の制御だったりする必要がありますよね。

そういった電子機器の制御に使われていたりします。

「組み込み系」などといわれる分野です。

プログラミング言語

プログラミングをするには「プログラミング言語」を学ぶ必要があります。

「Java」や「C」、「Python」などのプログラミング言語の名前を聞いたこともある方もいるかもしれません。

実はこのプログラミング言語は多くの種類があります。

色々な言語がありそれぞれ特徴があるので、用途に応じて適切に使い分けることが重要です。

そもそもプログラミングって?

そもそもプログラミングとは何を指すのでしょうか?

プログラミングとはコンピュータに処理させるプログラムを作成することです。

そして、プログラムとは、コンピュータに対する処理(命令)を記述したものです。

例えば、下の図のように、スタートのマス目からゴールに移動するにはどう命令したらよいか考えてみましょう。

次のように動けばうまく行きそうだなというのはわかるかと思います。

  • 上に3マス進む
  • 右に1マス進む

この「上に3マス進む」、「右に1マス進む」というのが命令になります。

この2行がスタートからゴールに行くためのプログラムになります。

プログラムについてなんとなく理解できたと思いますが、 実はこの日本語で書かれた2行をコンピュータがそのまま読み込んで理解できるかというと理解できません。

どうやって命令するの?

コンピューターは日本語をそのまま理解することはできません。

コンピュータが理解できる言葉は「機械語」と呼ばれるものになります。

これは01の羅列(2進数)で表現されるため人間が理解するのは非常に難しいものです。

そこで登場するのがプログラミング言語になります。

プログラミング言語の実行方法

プログラミング言語を使うと人間が理解できる言葉でコンピュータに命令を書くことができます。

しかし、プログラミング言語を使って書いたとしても、最終的には機械語似直さないとコンピュータは理解できません。

そこで、プログラミング言語を機械語に変換してくれるコンパイラ、もしくはインタプリタというものに通して実行可能となります。 コンパイラや、インタプリタは翻訳家や通訳と思うとわかりやすいかもしれません。

プログラミング言語と書きましたが、実は多くの種類があります。 冒頭に述べたJava, C, Pythonなどの他にも数多くの言語があり、下記のような特性に差異があります。

  • 性能
  • わかりやすさ(学習コスト)
  • 用途

各分野で使われる主要な言語

主要なものを図にまとめました。

  • スマホアプリ
    • Swift
    • Kotlin
    • Java
  • 組み込み系
    • C
    • C++
  • データサイエンス・AI
    • Python
    • R
  • デスクトップアプリ
    • C#
    • C
    • C++
    • Swift
    • Java
  • Webアプリケーション
    • フロントエンド
      • JavaScript
    • バックエンド
      • PHP
      • Ruby
      • Python
      • JavaScript
      • Java
      • Kotlin
      • Go

主要なプログラミング言語の特徴

言語性能学習コスト利用場所補足
C/C++組込み、デスクトップアプリ、ゲームなど 性能が求められる場所で利用される
C#デスクトップアプリ、ゲーム(Unityなどで採用される)など
JavaAndroidアプリ、バックエンド(サーバサイド) 大規模開発する場合に使われやすい
KotlinAndroidアプリ、バックエンド(サーバサイド)
SwiftiOSアプリ、Macアプリ
JavaScriptWebフロント、Webバックエンド フロントをやる場合はほぼ必須
Python人工知能・AI、データサイエンス、Webバックエンド
Rデータサイエンス データサイエンス分野に特化
PHPWebバックエンド
RubyWebバックエンド
Goバックエンド

複数の言語を覚えるのは大変?

上記に挙げたように数多くのプログラミング言語があります。

そして用途によって使い分けるため複数の言語を使えることは割と普通なことです。

「言語」と聞くと、英語や中国語など覚えるのに相当時間がかかるので大変かと思われるかもしれませんが、 プログラミング言語に関しては、どの言語も文法が似ていることが多いため、1つ覚えれば他の言語で応用できることが多いです。

言語の違いというよりも、方言の違いくらいなイメージです。

なので「私はPythonしかできないから。。」といってなんでもPythonでやろうとしたりする人もいるかもしれませんが、言語自体の違いをそこまで恐れる必要はないと私は思っています。

むしろ、Pythonでスマホアプリを作ろうとしたりすれば、茨の道になるのではないかと思います。

スマホアプリを作りたいのであればそれに適した言語を使うべきだと私は考えます。

料理に例えると、刺身包丁でジビエのイノシシや鹿の肉をさばいたりせずに、ちゃんとそれ用の包丁をつかいますよね。

というわけで、プログラミング言語もしっかり使い分けてそれぞれの分野で目的に応じてそれぞれの使い方を学んでいくのが良いと思います。

プログラミングを始めてみる

プログラミング言語を目的に応じて使い分けると上述しましたが、実際にこれから初めてプログラミングを始める方が、いきなり高性能なゲームを作りたいと言ってC++で大規模ゲーム開発をしようとしてもかなり無理があります。

どのように始めていけばいいか考えていきましょう。

何から作ればよいか?

作りたいものの機能が大きかったり、複雑なものは当然プログラミングでコードを書く量や難易度が増えます。

規模感を軽く把握してもらうために、コード行数でここではいくつかのプログラム例を提示します。

もちろん行数は使う言語などによっても結構変わるので、ざっくりと書いています。

プログラム行数
スクレイピングのスクリプト数十行〜数百行
簡単なWebアプリケーション(掲示板等)数十行〜数百行
Webアプリケーション数百行〜数千行
将棋のプログラム数千行〜数万行

いきなり複雑なプログラムを書こうとしても、完成のまでの道のりが遠く初心者の方はいきなりは目的のものを作れないでしょう。

また料理に例えると、初めて料理をする人がいきなりフランス料理とか難しいのを作ることはなく、まずは卵焼きとか簡単なものから作っていきますよね。

おすすめのプログラミングの始め方

初めてプログラミングをやる方に私がおすすめしているのはJavaScriptによる簡単なWebアプリケーションの作成です。

おすすめする理由として下記の3つがあります

  • 動くものが目に見える
  • Webは普段使っていて馴染みがある
  • 環境構築が簡単

動くものが目に見える

Webアプリケーションであればブラウザを使ってインタラクティブなアプリが作れますし,HTML、CSSを使うことで簡単にきれいなレイアウトのアプリも作れるのでモチベーションも保ちやすいと思います。

C言語などで勉強し始めるとGUI(Graphical User Interface)のアプリケーションは作るのが難しく、はじめはコンソールアプリケーションという文字だけでやり取りするようなプログラムで勉強することになります。

イメージとしてはハッカーが黒い画面に文字打ってなんかやってたりするイメージです。 文字のやり取りのみで動きがないので少し退屈に感じてしまうことがよくあります。

そのため、Webアプリケーションの開発をおすすめします。

Webは普段使っていて馴染みがある

WebはYoutube,Twitter,SNSなどで使っていてなじみがありとっつきやすいです。

簡単なプリケーションを作って見るにしても、作るイメージがわかりやすいと思います。

また、なれてきてこんなこともやってみたなどのイメージも湧きやすいのでおすすめです。

環境構築が簡単

プログラミングを始める前にプログラミング環境を作る必要があります。

使う言語によっては、プログラミングをするために色々なソフトを入れたりする必要があり環境構築で挫折してしまうこともあるのですが、 JavaScriptであれば、Edge、Chromeなどのブラウザが入っていれば、すぐに使うことができます。

JavaScriptでプログラミングをやってみよう

Chromeを開いて右クリック「検証」をクリック。

文字を出力する

Consoleというタブをクリックしてそこに下記を打ち込んでみてください。 Enterでそのまま実行されます。

console.log("Hello world!")

HelloWorldと出力されたと思います。

単純ですが、これも1つのプログラムです。

console.log というのは、指定した文字列を出力する命令をするものなんですね。

ためしに、console.log("Hello") カッコ内を書き換えてみると解ると思います。

ブラウザの機能を使ってみる

次は簡単にブラウザの機能を使ってみましょう。

同じように下記を打ち込んで実行してみてください。

alert("こんにちは")

実行するとブラウザのダイアログが表示されたと思います。

このように簡単にブラウザの機能も使うことができ、動きのあるアプリケーションが作れるので色々触ってみると面白いと思います。

さらなる一歩

簡単にJavaScriptを触ってみましたが、次からもう少しアプリケーションっぽいものを作って学んでいきましょう。

この後の勉強する道筋を下記に示します

  • 簡単なWebアプリケーションを作ってプログラミングの基礎(順次、分岐、反復、変数、関数、クラス)
    • サイコロ
    • おみくじ
    • クイズ

ここまでやって基礎を学んでからは、自分がやりたい領域で次は学んでいきましょう

  • 自分のやりたい領域で学ぶ
    • Webアプリケーション
    • ゲーム(Unity)
    • 効率化スクリプト作成(スクレイピングなどの自動化プログラム)

まとめ

  • プログラミングは目的を達成するための道具
  • プログラミング言語にはそれぞれ特徴がある
  • プログラミング言語を目的に合わせて選ぶのが大事
  • はじめは簡単なWebアプリケーションで学んでいこう!
2020-12-12 07:00:00

格安ペンタブレット HUION H430P を使ってみた レビュー

2000円台で買える格安ペンタブレットを購入したのでレビューします。 大きさはかなりコンパクトですが、筆圧レベルは4096、電池・充電不要のバッテリーフリーペンで非常に使いやすいです。 使ってみた感覚も以前使っていたワコムのCTH-480と比べて遜色ないです。むしろこちらのほうが新しい成否ということもあって性能が良いと感じます。

目次

HUION H430P レビュー

以前からペンタブレットがほしいと思っていて、Amazonのブラックフライデーで2000円台で売っていたので購入してみました。

今回こちらの製品を使ってみた感想を動画でも紹介しています

スペック

  • バッテリーフリーペン(充電不要ペン)
  • 4096レベルの筆圧感度
  • サイズ: 186.6 x 139.2 x 6.3mm
  • 重量: 本体135g ペン9g
  • 感知高度: 10mm
  • Androidスマホにも対応

この製品よりも安いペンタブレットもありますが、ペンが電池式だったりするのですが、この製品はバッテリフリーペンなので使い勝手が良いです。

使ってみた感想

Windowsの設定

接続してPhotoshopなどで開いて使ってみると、書き始めに遅延を感じました。

しかしこれはペンタブレットの問題ではなくWindowsの設定のせいのようです。

おそらくこの製品に限ったことではなくペンタブレット使うとき、全般のことかと思います。

Windowsでペンタブレットを使っていて遅延を感じる場合は下記のように設定を見直してみると良いかもしれません。

下記のように設定することで治りました。

コントロールパネルから「ハードウェアとサウンド」 => 「ペンとタッチ」をクリック

ペン操作の「長押し」を選択して「設定」をクリック。 「長押しを右クリックとして認識する」のチェックを外す。

サイズ感

大きさは小さめなので、机に置いておいても邪魔にならないので良いのですが、

やはり小さい分細かい操作はなれが必要そうです。

ただ、ドライバを入れれば画面の領域と、ペンタブレットの認識範囲マッピングできるのである程度はなんとかなると思います。

使用感

ペンの認識などは特に遅延もなく使いやすいと感じました。

筆圧レベルも4096と十分すぎるほどあります。 筆圧レベルの調整などもドライバを入れることで細かく設定することも可能でした。

ペンはペン先が圧をかけると多少しずむので、書いている側も筆圧の調整がしやすそうです。

こんな人におすすめ

  • PCで絵かきを始めてみたい方
  • できるだけ安く抑えたい方
  • zoomなどホワイトボード機能を活用したい方

最近テレワークなどで、zoomなどを使ってミーティングをすることが多いと思います。 その際にホワイトボード機能などで図示して説明するときなんかにも使えそうですし、お絵描きをするという用途以外にも、便利な操作ツールとして使うのもよいかと思います。

さいごに

いままでワコム製のペンタブレットしか使ったことがなかったため、はじめは格安のペンタブレットがちゃんと使えるのか不安でしたが、

実際使ってみると使い勝手がよく、この値段でこの性能であれば買ってよかったと思える製品でした。

もしこの製品の購入などを検討している人がいれば、参考になれば幸いです。

2020-12-11 20:00:00
タグ: 将棋日記

将棋ウォーズ2級に昇級しました! 3級から2級になるまでの勉強法

2020年12月10日に将棋ウォーズ2級に昇級しました! 3級から2級になるまでにやったこと、どのくらいの期間かかったのか、詰将棋、定跡はどのくらい勉強したかなど振り返りも含めてまとめていきます。 3級から2級になるまでにやったことで効果があったと感じたのはこの3つです、「四間飛車の定跡勉強」、「詰将棋(3手詰め)」、「チェスのタクティクスをする」

将棋なのにチェスの勉強が効果があったと感じるという他とは違ったアプローチがありますが、そのあたりも含めて記述していきます

目次

2級になるまでにかかった期間

2019年10月に将棋をはじめました。 将棋ウォーズは30級から始まり、最初は勝つたびに昇級しますが、ある程度の級位まで来ると1度勝っても昇級しない状態になります。 そのある程度の級位というのはおそらく6級以下程度です。

人によって違いがあって、強い人であれば4段くらいまで勝つたびに昇級・昇段する人もいると思います。

おそらくほんとに将棋始めたばかりの人は、おそらく6級、5級で一度止まります。

私の場合は5級で止まりました。

その後4級、3級、そして今回の2級昇級までの時系列は下記のようになります。

2019年10月5日 初将棋ウォーズ(この後5級で達成率高止まり)

2019年10月27日 3切れ4級昇級

2019年11月3日 10切れ4級昇級

2019年11月6日 10秒将棋 3級昇級

2019年11月23日 10分将棋 3級昇級

2020年1月13日 3分将棋 3級昇級

2020年12月10日 10秒将棋 2級昇級

3級から2級になるのになんと1年と1ヶ月もかかりました

10秒将棋

2級に昇級したのは10秒将棋が初めてでしたが、私は10秒将棋のほうが相性が良いようです。

10秒将棋で2019年の11月に3級になって以降ほとんど10秒将棋は指してなかったのですが、2020年12月に入って10秒将棋を再開してみたら、割とすんなり2級になれた気がします。 10切れ、3切れは時間切れ負けがあまりにも多すぎるんですよね。

10秒将棋のほうが時間切れ負けがないので、無理な手を指さなかったり、落ち着いて指せるので自分には向いているようでした。 なぜ1年近く10秒将棋やっていなかったのか。。もっと早めに10秒将棋をメインにしておけばよかったなと思っています。

2級になるまでにやったこと

2級になるために役に立ったなと思ったもののみかいておきます。

  • 四間飛車の定跡勉強
  • 詰将棋(3手詰め)
  • チェスのタクティクスをする

四間飛車の定跡勉強

2級への昇級時はほとんど居飛車を指していましたが、3級になりたてくらいの頃は一時期四間飛車を3ヶ月ほど指していました。 このときに四間飛車だけ定跡を勉強しました。

四間飛車の勝率は結局悪かったので、振り飛車はやめてしまったのですが、そのときに覚えた四間飛車の定跡が自分が居飛車側になって攻めるときに非常に役に立ちました。

将棋ウォーズは四間飛車使ってくる方が結構いるので、四間飛車の定跡を覚えていると有利かなと思います。

自分の場合は46銀左急戦(斜め棒銀)を使っていますが、自分が3級ですので相手もそんなに定跡詳しくない方が多いようで序盤でかなり優勢になることが多かったと思います。

ただこちらは船が囲いで薄いので逆転されることも多かったですが。。。 そこはやっていくうちに受けを覚えて、少しずつ勝率が上がっていったと思います。

詰将棋(3手詰め)

最近は全然やっていないのですが、詰将棋は3手詰めハンドブックをそれなりの数周回していました。

毎日のようにやっていたのが、2020年の6月あたりです。

3手詰めハンドブックと3手詰めハンドブックⅡを合わせて30週くらいはしていました。 大体200問を30分以内に解けるようになっていました。

一番早いときは200問を17分で解いていましたが、もはやこれは毎日やっていて答え覚えてるので良いのかどうかはわかりません。

とりあえずこれで実戦でも3手詰めであればすぐに見えるようになったので効果はあったかと思います。

使っていた問題集はこちら

チェスのタクティクスをする

これはおそらく普通に将棋勉強してる人とはだいぶ違う勉強法かとおもいます。

でもこれが将棋の棋力アップにかなり貢献していたように思います。

チェスのタクティクスを始めたのが2020年の9月からだったのですが、その後10月あたりから将棋ウォーズの達成率も伸びるようになって来ました。

チェス自体ももともとやっていたわけではなく本格的に始めたのは2020年の9月くらいです。

将棋って割打ちの銀とか、ふんどしの桂とかそういう駒得の手筋がありますよね。将棋ウォーズだとエフェクトが出るのでわかりやすい。

でもそれを勉強する場所って実戦以外にあまりないんですよね。 もしかしたら、次の一手問題集とかにあるのかもしれませんが私は読んだことないので、そういった手筋を勉強する場が私はありませんでした。

そこでチェスのタクティクスです。

lichessというサイトで、タクティクスという将棋で言う次の一手問題を無料で解くことができます。

lichessに関しては過去記事でも言及しているので、チェスに興味ある方はこちらも参照ください。 チェス(Chess)が遊べる、学習できるサイト lichess がおすすめ! | なぎなぎブログ

おそらく実際のチェスの対局で出てきた、両取り(フォーク)、田楽刺し(スキュア)、ピン、開き王手(ディスカバードアタック)などの手筋が発生する局面をAIが選んで生成しているので、問題数が豊富です。

チェスの場合将棋よりも駒得の効果が顕著に出ます。 なのでほとんどの問題は駒得問題です。

なので答えが割とはっきりしていてわかりやすいと感じます。このあたり初心者でもかなりとっつきやすいですよね。

以前こんなツイートしてました

将棋の場合は、駒得だけではなく、駒効率だったり、玉の硬さだったりとか色々あって難しいです。 将棋ウォーズの次の一手問題とかもやるときはありますが、わりと私には意味がわからないことが多いです。

このあたりの感覚がわからないから将棋が弱いというのはあるかもしれませんが、それが今の自分の課題だったりするのかなぁとは思いますが。

とはいえ駒得も将棋の形成判断で重要な要素で、一番わかり易い要素だと思います。その手筋のチェスをやりながら楽しく学ぶことができたと思っています。

チェスをやったら将棋も強くなるのか?

チェスをやったら強くなったということを上述しましたが、これはおそらく初級者のうちだけかと思います。

チェスも将棋も、両取り(フォーク)、田楽刺し(スキュア)、ピン、開き王手(ディスカバードアタック)などの手筋など共通の手筋があるので、その部分を勉強すればおそらくチェスも将棋も両方強くなるのではないかと思います。

ただこれは初級者のうちだけで、棋力が上がれば当然将棋、チェスの専門的な領域が重要となってきます。 各専門領域の知識なので、それを別の領域で活かすことはおそらく難しいでしょう。

さいごに

将棋ウォーズ3級から2級になるまでにやったことを、自分なりにまとめてみました。

チェスをやったら強くなったという普通とは違うアプローチでしたが、もし同じように初級者で実はチェスにも興味あるという方がいれば、参考になればと思います。