ASD(自閉症スペクトラム)とプログラマーについて
最近、とある理由により発達障害について調べています。
発達障害については以下があると言われます。
私はかねてからADHDじゃないかと思っていて、病院で診察してもらいました。
結果は「ADHDの傾向がある」でした。
ところで私はソフトウェア/ファームウェアエンジニアをやっています。
就職するまで本格的なプログラミングにはほとんど通じてませんでしたが、
なんとか人並みにプログラミング出来るようになったと思っています。
(少なくともこの会社内では。社会的にはどうかわかりません)
ただ、最初は全然とっつけず、周りの人とのコミュニケーションもうまく行かず、
ノイローゼになるかと思うほど苦労しました。
苦労したポイントは以下です。
- 既存コードのとある処理が何をしているのか分からない
- さっき調べた既存コードが何をしていたのかすぐ忘れる
- 書いている途中ですぐさま違うアイデアが思い浮かぶ
- 既存コードを調査している間に少しでも見慣れないキーワードを見るとすぐにその内容を調べずにはいられなくなる
- そもそも今やろうとしている実装方法で要件を満たせるのか不安になる
つまり、色々なことに不安になりすぎて、今やろうとしていることが最後まで出来ないのです。
また、事務所の環境も更に精神を不安定にさせました。
雑談してる時以外は、事務所がキーボードの音だけで、あとはシーンとしています。
その事務所はプログラマーだけではなく、プロジェクトマネージメント系の人が多かったにも関わらず、そういう雰囲気でした。
私は周りがシーンとしきっている環境が苦手です。
まるでPCに向かうことしか許されず、一言も話してはいけないような気持ちになり、
気分が塞ぎます。
私が理想とする職場はホワイトボードをみんなで囲み、より良い商品を作るには、
よりよい実装にするには、より品質をあげるにはどうしたらいいかをみんなで前向きに
議論しあい、その実現に向けて動く職場です。
少しでも困ったらホワイトボードに集合。もちろん自分の場合でも相手の場合でも。
(なにか困ったら必ず集合!ではありません。あくまで概念としての話です。)
しかし、その職場は困ったことがあっても自分でなんとかしてね、大人なんだから。
という風潮でした。私はその風潮がなかなかにして嫌いです。
結局、そうした結果、みんなで集まって議論しあっていれば解決出来たような問題が出てくるのです。
くだらないなぁと思いました。
私は「ADHDの傾向がある」と言いましたが、そのために上記のような考え方になったところもあると思ってます。
考えること、感じることがいちいち衝動的なので、最初に思っていたことをそのまま実現するというのが難しいのです。
既存コードを見ると、そこからアフォードされてしまうわけですね。(アフォーダンス)
そこでタイトルの件になりますが、ASDの傾向はADHDと真逆にあるんじゃないかなと思っています。
ADHDの場合は色んなことに注意が行くに対して、ASDの場合は最初に取り組んだ内容から離れられない。
これがプログラミングにとってはすごく有効なんじゃないかと思っています。
人生的、社会的に考えて定常型発達、ASD、ADHDどれが良いという話ではありません。
プログラミングにとってはASDのほうがうまく働くのではないか、という話です。
他の余計な情報については排他的になることで、課題(プログラムで実現しようとしている機能)に対して必要なことを考え続けることが出来るんじゃないかと思います。
よく、「こういう機能を実現しようとしていて困っている」という話で相談すると、
「こうすればいいじゃん」と、ごくごく簡単な方法で解決されることがあります。
ADHD(私)は、余計な情報も絡めて考えてしまうため、プログラミングにとっては
簡単な課題でも余計難しくしてしまっていると思われます。
発達障害の本で読みましたが、ASDの方の脳内は2次元のマインドマップ状になっているらしいです。(シングルレイヤー)
それに対して定常型発達の人は3次元になっていて、考えのレイヤーが幾重にも重なっているようです。
そのため、定常型発達は他愛もない雑談や突拍子のない話題に対しても柔軟に応対が出来るが、
ASDの方は、今まで考えていた内容から話題が急に離れると、その考えを2次元状の
マインドマップから探さないといけないため、答えを探すのに時間がかかり、
まるで石のように固まってしまうのだそうです。
このようなある意味デメリットの部分が、プログラミングの場合には有効に働くのでは
と思っています。
一旦課題に対して取り組めば、定常的に解決に向かって突き進むことができる。
しかも無駄な妄想もすることもない。
ASDの方がプログラマーに多いのではないか?と思って軽くググってみましたが、
やはりシリコンバレーにはASDと呼ばれる方が1割ほどいるそうです。
しかも、シリコンバレーではASD傾向がある人のことを「シリコンバレー症候群」
と呼ばれているそうです。
しかし、一人で黙々とやる開発方法であればよいのですが、
アジャイルのようなみんなでスクラム組んで取り組む必要があるプロジェクトでは、
周りの人に理解がある人ではないとASDの方は少し不利な方向に働くのでは?
とも個人的には思います。
(欲しい答えが来なくても我慢する、もしくは、こういう風に考えてみて、等、少し誘導してあげる)
シリコンバレーではもちろんアジャイル的に開発を進めているでしょうから、
やはりASDに理解がある人が多いのだろうと推測しています。
ADHD傾向のある私が、どうやって人並みにプログラミングが出来るようになったか
というと、色々な経験を踏まえて、以下の工夫をするに至りました。
- 新たに調査しないといけないと思ったものは、必ずテキストに残し可視化する
- メモした調査事項、検討事項について調査状況と結果を書く(調査完了したものは【済】マーク)
- 細かいが、メモはエクセル等ではなく簡易なテキストにする(エクセルは自由な発想が何故か出来なくなる)
- 悩んだ場合は一回休む。(喫煙、睡眠など)
- コーディング中は腹に力を入れる
書いてみると、最後の項目以外は当たり前のこと、よく言われることかもしれません。
ですが、確実に有効です。
まずメモは色々なことに対して有効な手段です。
はたと思いつく懸念事項、調査事項は前に既に思いついたもののことがよくあります。
メモを見直すことで既に解決済みである、と安心することが出来ます。
コーディング中は腹に力を入れる、というのはある意味で精神統一することで、
周りの余計な情報を頭に入れないようにしています。
コーディングモード的なものを自分の中で作り、そのモードで実装しています。
最初に懸念事項等を抽出して潰していくため、他の人よりもスピードは遅いかも
しれませんが、この方法により一人前に実装出来る様になりました。
ASD、ADHDお互い、その人の特性を理解し、社会的な摩擦を出来るだけなくして
日々仕事したいものです。