プログラマー必見!超重要な11個の「非プログラミング」スキルまとめ

私がどのようなプログラマーと一緒に仕事をしたいかを考える時、技術には直接関係ない方のスキルを重視します。それは、「この人と一緒に仕事をしたい」と思わせるスキルのことです。

この記事で紹介するスキルを身に付けることにより、 優れたコードが書けるようになるだけではなく、技術的なプロジェクトをよりスムーズに進めらるようになります。

ほとんどがプログラミング以外のキャリアにもいかせるスキルですが、ここではなぜプログラマーにとってそれらのスキルが役立つのかに特化してご説明します。

1. 共感能力

優れたプロダクトを作り上げるには、ユーザーの目線に立って物事を考える必要があります。

  • ユーザーがどのようにプロダクトを利用するのか?
  • どのような機能があれば便利か?
  • あなたのプログラムがどのようにユーザーの生活を楽にするか?
  • ユーザーに危害を与えたり、彼らの生活に悪い影響を及ぼしたりはしないか?
  • あなたのアプリは倫理的に問題ないか?

などといった点を考慮すべきでしょう。他者に共感できるスキルは、プログラムのさまざまな部分において必要とされます。

もしプログラムの安全性が不完全だったら、ユーザーの個人情報が第三者に悪用されてしまうかもしれません。プログラムのアクセスに制限があれば、あなたのプロジェクトを利用できる人数も限られてしまいます。動きが遅い、あるいは高速通信環境下でなければ正しく動作しないような大きなプログラムの場合、ユーザーは離れていってしまいますし、インターネットの速度が遅い地域の人々やモバイルユーザーは利用できません。

また事実として、企業が開発した有害で悲しいアルゴリズムに関するの以下のような記事を毎日のように目にします。

これからわかるように、コードを書く時は傷つける人がいないよう、さまざまな視点から物事を考えなければならないのです!(関連記事

また、共感するスキルはチームのメンバーやメンターとして仕事をするのにも役立ちます。あなたのマネージャーまたは他の開発者の立場で考えてみましょう。

  • 彼らはなぜその判断をしたのか?
  • 彼らを助けるためにあなたは何ができるか?

共感の心を持つことで、優秀なチームメンバーとなるための能力が確実に向上します。また、もしあなたが雇用者の場合、部下に共感の心を示せば、彼らはより長くその職場で働くようになり仕事の効率も上がるでしょう。

他のプログラマー、特に新しいことを学んでいる人に対しては、我慢強く接することを忘れずに。あなたが学ぶのに苦労したこと、そしてその時に自分がどう感じたかを思い出しましょう。いま新しいことを学んでいる人は、きっとその時のあなたと同じような気持ちのはずです。彼らに対して失礼な態度をとったり、成長を妨げたり、あなたの知識をひけらかしたりするのは有害にしかならない上に、他のプログラマーが新しいことを学びにくくなってしまいます。

あなたの発言と行動には、リアルな結果が伴います。前向きな変化を起こすこともできれば、逆に誰かを傷つけることにもなるのです。これは対面のコミュニケーションだけに限らず、オンラインコミュニケーションにも同じことがいえます。あなたにとっては面白くて、憂さ晴らしのつもりでも、実際には誰かの人生に非常にネガティブな影響を与えているかもしれないのです。

どう行動するのが正しいのか。そしてもし誰かを傷つけてしまったのならば、その傷を少しでも軽くするためにどう謝罪をするか。それを決めるのはあなた次第です。

2. 問題解決能力

私がコーディングを教える時、コード自体よりも問題解決に苦労する人の方を多く目にします。ある問題をより小さい問題へと噛み砕き、それらをすべて解決する能力を習得するのにはたくさんの訓練が必要です。問題解決能力を高めることで、より実力のあるプログラマーへと成長できます。

またほとんどの問題においていえることですが、解決策は複数存在します。ソフトウェア開発者としての我々の仕事の大部分は、それらのさまざまな解決策について考え抜き、最適なものを選ぶことです。

  • 最も速く実行できる方法はどれか?
  • 最も効率的な方法はどれか?
  • よりコストをかけない方法はどれか?

など、これらはどれも大切な視点です。正しい解決策を選ぶのは簡単ではありませんが、ソフトウェア開発における重要な部分なのです。

3. コラボレーション能力

プログラマーとして他の人と仕事をする機会はたくさんあります。他の開発者・ビジネス関係者・マネージャー・オープンソース貢献者・利害関係者など、あなたがフリーランサーや起業家だとしても、非常に多くの人々と一緒に仕事をしなければなりません。さまざまな性格、さまざまな立場の人々とスムーズに仕事をするためのスキルは必要です。

良いコラボレーションを生み出す要因はたくさんあります。まず、ひとりではすべての仕事ができない、少なくとも上手くはできないと認識すること。違う人々が集まれば、その分さまざまなスキル・視点・人生の経験が集約されます。バラバラにしておくよりも、これらを組み合わせることでより強力なチームができます。あなただけがいつも「チーム全体を背負う」必要があると感じたり、全員の世話をしたりする必要はないのです。他のチームメンバーにもそれぞれの仕事をしてもらうことで、あなたの気持ちはもっと楽になります。

また、周囲に助けを求め、そして自分も他の人を助けましょう。あなたは、あらゆることについての専門家になる必要はないのです。あなたのチームメンバーは、それぞれの分野の専門家です。他の人に頼ってもいいのです。何かにつまずいたら助けを求め、ずっとつまずいたままにならないようにしましょう。そして誰かがあなたの助けを必要としていたら、喜んで手を貸してあげましょう。物事を上手く説明するというのは、それ自体からたくさん学ぶことがありますし、その分野の知識を深めることにもなります。あなたが管理職についている場合は、メンバーとの面談時間を確保し、効率的なコラボレーションを進めましょう。

くわえて、人の話をしっかり聞かなかったり、意見をすぐさま却下したりするのはやめましょう。述べた意見が大切に扱われず、考慮してもらえなかったメンバーは、きっとその先チームに貢献するやる気を失ってしまいます。他の人が考えを共有している時は、積極的に聞くようにしましょう。その時にどう返答するかや、あなたの意見の方が優れている理由を考える代わりに、その人のアプローチのどこが優れているか、またどのようにしたら実行に移せるかを考えてみるのが大切です。

そして、優れたアイデアを実行に移した際には、そのアイデアの考案者を称えてあげましょう。私自身の経験ですが、チームで仕事をするうえで、他のメンバーに自分のアイデアが却下され、大切に扱われず、功績を評価してもらえないこと以上に仕事のやる気を削ぐものはありません。

4. コミュニケーション能力

他の人と仕事をする時、良質なコミュニケーションをとることは非常に大切です。これは同僚、クライアント、あなたのプロジェクトを利用する人々、マネージャー、部下など、誰と仕事をするにもこれが当てはまります。

物事の進み具合やプロジェクトの現在のステージについて、間違いのない最新情報を連絡し、あなたの意見を率直に、かつ気遣いを持って伝えましょう。失礼な態度を取ったり、建設的な言い方をしなかったりすると、フィードバックをもらう側も受け入れ辛くなります。だからといって嘘をついたり体裁を取り繕ったりしては、前向きな変化にはつながりません。これはまさに紙一重といえます。

私の実体験をお話します。私のブログ記事を読んだ人から、私が頭の悪そうな文章のトーンを使っているという内容の長文メールが送られてきました。私は普段ブログを書く際、「!」マークを多く使うことで元気な印象の文を書こうとしています。これはとっつきにくく、退屈になりがちなトピックをより楽しいものにしようと、かなり意図的にしていることです。このメールの主は私に対し女性差別的な態度を取り、とても傷つくことを言い放ちました。とはいえ、私も「!」マークをそこまで多用しなくても読者にプログラミングの楽しさを伝えることができたかもしれません。メールの主が批判するだけではなく、もっと建設的な言い方で意見を伝えてくれていたら、この点について私はもっと受け入れやすかったでしょう。

物事が上手くいっていない時は、そう言いましょう。納期を延ばす必要がある、または職場で問題が発生しているなど、率直に伝えてください。あなたがそう口に出すことで、物事がより良い展開に動くことがよくありますし、より仕事がしやすい環境を作ることができます。

5. 受け入れる力

私は以前、サマーキャンプでロッククライミングインストラクター兼カウンセラーとして働いていたことがあります。一緒に働いた仲間の年齢層はほとんどが中学生の女の子たちで、この子たちとは非常に楽しく仕事できました。とはいえ、中学生というのは多様性を受け入れることにまだまだ長けていない子も多いですし、同じグループでかたまって過ごすことも多いです。

キャンプではこんなゲームをしました。みんなでひとつの大きな円を作ったら、カウンセラーが数人の生徒に円の外に出るよう声をかけます。声をかけられた子たちは、自分が伝えられていなかった、自分ではどうにもできない特性にもとづいてゲームから退出しなければなりません。円の中に残った生徒たちがゲームを続ける中、円の外に出された生徒はそれを遠くからただ見ているしかないのです。

このゲームは、「自分ではどうにもできない理由で仲間外れにされるとどういう気持ちになるか」を生徒たちに示すのに非常に効果的でした。今でもこれについて考えることがよくあります。大人の私たちでも、自身でコントロールできない特性にもとづいて人々を円の外に出し、排除してしまうことがあります。でも彼らを円の中に招き入れ、仕事をしてもらうようにしたらどうでしょうか。我々のプロダクトはより多様な経験を取り入れることができ、さらに優れたものになります。

より多様性のあるチームの方がより優れた業績を出すという多くの研究がありますが、個人の視点から見てみましょう。あなたが円の外に閉め出されたらどんな気持ちになるでしょうか。小さい円を作るのではなく、より大きなものにしていきましょう。もしかすると、あなたのプロダクトを利用する人の多くは、テック業界で昔から円の外に閉め出されていた人々かもしれません。私のプログラミングキャリアにおいて、これまで自分以外の女性がいるチームで仕事をしたことは20回に1回程度しかありません。この経験からいえるのは、チームの少数派という立場は非常につらいということです。

これは「共感能力」に関するトピックにも関連しています。プログラムを書く時は、さまざまなユーザーを意識するようにしましょう。健常者や技術のある人しかアクセスできる状態にならないように。そうすればより多くの人々にあなたのプロダクトを届けられます。

6. 忍耐力

プログラミングをする上で一番我慢強くならなければいけないのは、あなた自身です。プログラミングは難しいものです。時にはバグや解決困難な問題に遭遇します。もしこれがいつも簡単だったら、自分自身に挑戦することにはならないですし、プログラマーとしても成長しません。

難しい問題にぶつかったら諦めるのではなく、問題と徹底的に向き合う粘り強さを持ちましょう。しかしやり過ぎることはせず、適度に休憩をとって少し経ったらまた問題に挑戦し直してみましょう。少し休むことでより効率的に問題を解決できるようになることもありますし、違う角度から見ることができるようになるかもしれません。

また、他の人にも忍耐を持って接しましょう。物事を学ぶのには時間がかかりますし、完璧な人など誰もいません。失敗は学習プロセスにおいて最も大切な経験になります。リスクを取り挑戦するのが怖くなる仕事環境ではなく、失敗しても許容してあげられる環境を作りましょう。何かを理解しようとする時に、人によってピンとくるポイントは違うということ、そして学ぶのには時間がかかるということを理解しましょう。

7. 創造力

私がプログラマーの仕事が好きな理由は、自分の創造的なエネルギーを使って何かを作り出し、人々の役に立てることです。頭を柔らかくして考えることで、とてもクールな物を作り出せます。

新たな特性・インターフェース・アプリケーションを発案する上で、創造的なアイディアを持つのは大切です。創造的なインターフェースが決め手となって、私の制作したプロダクトを購入してくれた人もいましたし、私のポートフォリオサイトもクリエイティブなデザインが人の目を引くものとなっています。

それに加え、多くの問題を解決するのには創造力が必要となります。プログラミングにおけるほぼすべての問題には複数の解決策がありますし、問題に対し創造的なアプローチで取り組むことによって、最適な解決策へとつながることもよくあります。

8. 謙遜

あなたが他のプログラマーから学ぶことはたくさんあります。ひとりですべてを知り尽くしている人などいません。

建設的批判に対し耳をふさぐのではなく、それを素直に受け入れましょう。フィードバックをもらうことで、あなたのコードも、あなた自身も改善できます。自分のやり方だけに凝り固まっていては成長につながりません。あなたが常に正しい訳ではないことを認識し、他の人の意見を広い心で受け入れましょう。

9. 自信

一方で、自分に自信を持つのも大切です。インポスター症候群の私にとっては、これが一番難しいと感じています。これまでのキャリアでも仕事ぶりを評価される度に、「もっと自信を持つように」と言われてきました。このトピックだけでブログの記事が容易く書けてしまうほどです(たぶんあとで書きます)。とにかく、自分を信じて自分の能力に自信を持つことは非常に重要です。

まずはプロジェクトを受ける自信を持ちましょう。簡単なプロジェクトに逃げたり、難しい課題を課された時に自分の能力を疑ったりしてはいけません。解決できるようにベストを尽くし、最も困難な部分は誰かに協力を求めましょう。

また、分からないことを最初からすべて検索する必要はありません。答えをGoogle検索する前に、自分を信じていくつかの方法を試してみましょう。あるいはすべてではなく、問題の一部をGoogle検索するようにしましょう。もしすべてのコードが正しく書けているなら、開発中に複数の問題解決方法を試すのも良いでしょう。思っていたよりも自分が知識豊富で驚くかもしれません。

もうひとつ私がしているのは、自分の「成功体験」を記録することです。私のコンピューターには、これまでやったクールなことや、人から言われた素敵なことを記録した文書があります。そして落ち込んでいる日や自分を疑ってしまう時にそれを見ることで、自分にもっと自信が持てるようになるのです。

10. 適応能力

プログラミングはまだまだ新しい世界で、日々もの凄い速さで進化しています。物事が変化するのに適応できる力は非常に大切です。

既存のものに取って代わる新たなフレームワーク・ライブラリ・言語などが登場したら、それを積極的に学ぶことが重要です(あなたにとってそれが有益なものの場合)。未だにFortranでコードを書いていたとしたら、我々の業界はまったく違うものになっていたでしょう。物事の変化に合わせて、私たちも進化し適応していく必要があるのです。

また、プロジェクトのゴールや特性が時折変わることがあります。特にクライアントとの仕事においてはよくあることです。そうした時にも適応能力を発揮し、そういったリクエストに応じていかなければなりません(もちろん常識の範囲内で)。

11. コミュニティへの参加

プログラミングにおけるコミュニティはとても大切です。

  • カンファレンス
  • ブログ記事
  • ソーシャルメディア
  • ミートアップ

は、重要な学びと成長の場といえます。

また、オープンソースソフトウェアやそれを取り囲むコミュニティは、この業界の活力の源です。ネットワーキングをし、人々とのコネクションを作ることは、日々の学習や自身の経験との関連付け、また新たなチャンスを見つけるのに非常に大切です。

あなたが内向的タイプまたは対面での交流があまり得意ではないなら、オンライン上にも多くを学べる素晴らしいコミュニティが山ほどあります。また会社内においても、強いつながりを持ったチームを作ることで共に仕事がしやすくなります。

まとめ

いかがでしたか?

ここまでで紹介したスキルは、いわゆる「ソフトスキル」と呼ばれるものですが、私はそれ以上のものだと感じています。これらのスキルはコードを書くのにも、一緒に仕事をしたくなる人になるのにも非常に役立ちます。特定の言語・ライブラリ・フレームワークの知識よりもさらに大切な要素ですし、テック業界に限らず通用することです。

これらはプログラマーとして、そして人と関わりながら仕事をする上で非常に重要なスキルです。とはいえ、完璧な人などどこにもいません。誰にだって伸びしろがあるのです。これからも成長し続け、これらの非プログラミングスキルを伸ばしていきましょう!

(原文:Ali Spittel 翻訳:Yui Tamura)

SHARE

  • 広告主募集
  • ライター・編集者募集
  • WorkshipSPACE
エンジニア副業案件
Workship