女性のためのC++コミュニティ Ladies++を立ち上げました

12月に女性C++erのための、Ladies++というコミュニティを立ち上げました。
今回はLadies++や女性コミュニティについて紹介しようと思います。

この記事は、 Geek Women Advent Calendar 2015 の23日目の記事です!

様々な女性コミュニティ

最近はたくさんの女性向け技術コミュニティがあります。
Rails Girlsなんかが有名かもしれませんが、
Pythonの女性コミュニティPyLadiesや、Java女子部等も活発に活動がされています。

なぜ女性でコミュニティなのか

今年のPyConJP2015では、女性コミュニティに関する「いま求められるコミュニティの多様性と未来 」というパネルディスカッションが行われました。
togetter.com

性コミュニティの良さみたいなのはこちらのまとめを見てもらえるわかるかもしれません。






私の考える女性コミュニティの良いところ

性コミュニティだから出会える女性エンジニアさんたち

普通のお勉強会にいくと、たいてい8割以上が男性で、なかなか女性エンジニアさんには出会えません。
多くの女性エンジニアさんは普段男性ばかりの環境で強く生きています。
でもたまには女性だけで技術トークで盛り上がるのも楽しいものです。

「無刻印キーボードいいよね〜〜」
「超わかる〜!」

みたいな会話もできます。

女性エンジニアさんに、インプットの機会を

みなさんが思っているよりも女性エンジニアさんはそこそこいます。
でも、なかなかコミュニティを知る機会・参加する機会がある方は多くないです。
そういった女性エンジニアさんに、「(女性コミュニティに限らず)コミュニティに参加する」ということへのハードルを下げる役割を果たしています。
(* 女性エンジニアは少ないなんて言わないよなるべく | nocono)

玄人じゃなくてもアウトプットの機会を

普通の技術勉強会に行くと、だいたい愛のある人たちがマサカリをなげてくれます。
でも、そのマサカリが初心者にとっては怖いため、発表するにはなかなか勇気がいります。
そんな人達に、発表慣れしてもらう機会を提供しています。

プログラミングをはじめたての方の
「デザイナーだけど〇〇(プログラミング言語)はじめてみた」
なんていうトークを聞けるのも女性コミュニティならではかもしれません。
(でも、ガチなトークももちろんたくさんありますよ!)

Ladies++発足まで

PyConJPのパネルディスカッションを見て、

みたいにつぶやいたら、PyConJP2015にきてた@scitamehtamさんと意気投合して、
C++性コミュニティを作ることにしました。

私自身はC++超Beginnerで、技術書を読んだり独学で勉強したりしていました。
C++は独特の世界観とお作法とかがあって、お勉強会に参加してみたいな〜と思いつつ、
C++のコミュニティと言えば

_人人人人人人_
> 超怖そう <
 ̄Y^Y^Y^Y^Y ̄

なイメージだったので、なかなかコミュニティに参加できていませんでした。
(その後、おそるおそるBoost.勉強会 に参加してみたのですが、みんな優しかったです・・・!
でも、こわくて参加しづらい・・・と思っている人も実際にいます)

Ladies++の紹介

Ladies++は、女性C++erが集まってもくもくとC++力を高めたり、わいわい情報共有したりするコミュニティです。

東京を中心に、毎月ワークショップ、ハッカソン、勉強会などを企画していきたいと思っています。
初心者/熟練者問わずC++に興味をもつ全ての女性が一緒に勉強したり、
情報交換できる場を目指しています!

Ladies++ meetup #1

1ヶ月前から2,3日集まったりしつつ、企画しました。
当日の内容は、コミュニティの紹介・LT x 8・懇親会という感じで、
12名の方が参加して下さいました。

LTでは、「C++で似顔絵作り」という研究紹介や、
プリプロセッサの話」というコアな話まで、
いろんなトークを聞けました。

meetup中のTweet紹介







今後やっていきたいと考えていること
  • (テーマを決めて)LT大会
  • ワークショップ(初心者向け、ゲームなどをテーマに)
  • SICP/C++関連本 輪読会

Join Ladies++ !!

Ladies++では、C++に興味のある女性の参加をお待ちしています。
これからC++を始めたい方から仕事でC++を書いている方まで、熟練度は問いません。

また、Ladies++ではSlackを使ってメンバー同士でコミュニケーションをとっています。
興味のある方は、以下のフォームよりSlack参加申請をしてください。

申請フォーム - Join Ladies++!!

さいごに

meetup #2はまだ企画中ですが、
これから様々なイベントを開催していきたいと思っています。
よろしくお願いします(`・ω・´)ゞ


あしたは、ichimurayukieさんです!

C++のポインタ渡しと参照渡しの使い分け

社会人1年目、会社で部署に配属された初日に、
上司に「C++は全然わからないです!」って言ったら、
「お前がわかってないのはC++じゃなくてコンピュータの基礎だ」
と言われたくーむです。こんばんは。

今日は 初心者 C++er Advent Calendar 2015の8日目(7日目?)の記事です。
C++歴は1000行くらいの超初心者です。


CodingameとかHAL研プロコンで使ったことがあるけど、
仕事ではなかなかガッツリ書く機会がなくて、毎日数行足したり減らしたりしてだけなので、
なかなかC++力つきません。

ポインタコワイ

Python界からきた私にとってポインタは超怖い子です。
そもそも変数の前に記号が付いてるだけでコワイ。(PerlPHPもコワイ)

そんなこと言ってたら友人がこの本を貸してくれました(多分もう売ってない)

1冊まるごとポインタについて語ってて、これをよんだらだいぶポインタと仲良く慣れました。
hoge[1] と 1[hoge]は同じだということとかがわかって面白いです。
でもポインタの説明はここではしません。できません。

C++の参照

pointerで同じようなことができそう(?)なのになんで参照ができたんだろう?と思ったのですが、
C++の参照は、演算子オーバーロードをするためにできたそうです。
たしかに、演算子がポインタ返してきたらつかいにくいです。

class String {
 char& operator[](int index); 
};

参考: A History of C++: 1979− 1991




ポインタと参照についてはまだよくわからないのでさっさと本題にいきます。

私がC++を書いてて困ったのが、ポインタ渡しと参照渡しの使い分けです。
基本的にどっちでも書くことができてしまうため、どうするのがよいのかわからなかったのです。

ポインタ渡しと参照渡しの違いを考える

swap関数をポインタと参照を使ってそれぞれかいてみます。

// pointer
void swap_ptr(int *a, int *b) {
  int tmp = *a;
  *a = *b;
  *b = tmp;
}

int main() {
  int a = 10;
  int b = 20;
  swap_ptr(&a, &b);
}
// reference
void swap_ref(int &a, int &b) {
  int tmp = a;
  a = b;
  b = tmp;
}

int main() {
  int a = 10;
  int b = 20;
  swap_ref(a, b);
}

参照は、関数で渡す時呼び出し先で
明示するので、
呼び出し元では普通に実体を渡すようにかけます。

また、参照は普通の実体と同様にオブジェクトにアクセスできます。

次のようなプログラムを考えてみます。

#include<iostream>
void f(int a, int &b, int c) {
  b += 10;
}

int main() {
  int a = 10;
  int b = 20;
  int c = 30;

  std::cout << a << " " << b << " " << c << std::endl;
  f(a, b, c);
  std::cout << a << " " << b << " " << c << std::endl;
}

このプログラムを実行すると、結果はこうなります。

10 20 30
10 30 30

f(a, b, c)を呼び出すと、bのみが変わって帰ってきました。
でも呼び出し元( f(a, b, c) )を見た時に、読んでる人はbだけ変わると予想するでしょうか?

これがポインタであれば、

#include<iostream>
void f(int a, int* b, int c) {
  *b += 10;
}

int main() {
  int a = 10;
  int b = 20;
  int c = 30;

  std::cout << a << " " << b << " " << c << std::endl;
  f(a, &b, c);
  std::cout << a << " " << b << " " << c << std::endl;
}

となり、bだけ違う感じがでます。

つまり、参照は普通の実体とほとんど同じ様に使えるかわりに、
参照であることがわかりづらい
と言えるかなと思います。

ポインタ渡しと参照渡しの使い分けについて

そんな感じで、これまでをふまえて、私は
参照渡しは値を変更しない時に、必ずconstと一緒にしています。
(参照渡しではnullは渡せないので、値がnullになる可能性があるものは変更の可能性がなくてもpointerで渡しましょう。)

Google C++スタイルガイド 「リファレンス引数」の章にもそのように書いてありました。

他にいろんなスタイルがあるかと思いますが、
上に書いた様な理由をふまえて、私は今のところこの使い分け方で納得しています。

反論がある方は(理由を含めて)是非コメント下さい!

まとめ

私は参照渡しには必ずconstをつける派です!!!!!!!!!!!

さいごに

もうちょっと真面目に書こうと思ってたんだけど、やってるスマホゲームのイベントが今日までなので、
このへんにしておきます。C++力高められるようがんばっていきたい。

明日は yumetodoさんで、「Clang with Microsoft CodeGenがでたので試す」ですっ。
よろしくお願いします( o・ω・)ノ