某ソフトウェア企業に勤務するおじさんプログラマyasuhoです2017-02-10プログラマに必要なスキル私も自分なりに、プログラマとして必要なスキルをまとめてみる。エンジニアにとって最も大切なことは、お腹が出ていないこと。15年前に私の見ていたサイト界隈で決着がついたのですが、エンジニアである私が必要だなと思うスキルって自分の中では時折変わっているので並べてみます。まなめはうす要約するとソフトウェア開発という仕事は「問題を調査し、原因に対する最適な解決策を考え、それを実現するコードを書いて問題を解決する」のループであると思う。これはバグ修正に限らず、ソフトウェア開発の全ての工程において言える。いった観点から私の考える「プログラマに必要なスキル」をまとめてみる。:)ソフトウェアを作るために必要な情報を探し出すスキルプログラマであれば「こんなのをxx/xxまでに作って」と言われたことは経験にあるだろう。いや、大体そうか(汗)それはググればすぐ分かることかもしれない。それは周りに詳しい人もいないようなことで、どこから手を付けたらいいか分からない。そんな時、大量の情報から必要な情報をピンポイントで見つけ出し、ソフトウェアをデザインする能力は重要だ。そのためには色々なことに興味を持ち、情報収集を怠らない努力が必要だと思う。いえ、人間は全知全能ではないので、その分野に得意な人とコネクションを作っておくことも必要かもしれない。testableなコードをいかに素早く実装できるかはプログラマにとって重要なスキルだ。ここで重要なのは、単にコーディングの速度が早いというだけではなく、設計段階でどこまで実装を意識した仕様に落とし込めているかということだと思う。「ん?このケースはどうやって実装すればいいんだっけ?」というのを、いかに減らしておくかの方が重要なように思う。:)何が問題なのかを突き止めるスキルソフトウェア開発に限らず、コンピュータを使っていると、様々な問題に遭遇する。それが自分が作ったモジュールであればいいが、実際にはどこに問題があるかも分からないことが多い。言えば、ソフトウェアの問題だけとは限らない。そんな時、当たりをつけて問題を絞り込み、原因を素早く発見する能力は重要だ。これについては経験を積む以外、いい方法が思いつかない。一緒に問題を調べてくれる、職場の同僚やその分野のエキスパートとのコネクションが、実は一番重要なのかも。問題に対して最適な解決方法を提示できるスキル問題の原因は見つけた。単純なコード修正で終わることも多いが、複数のソリューションがある場合も少なくない。いや、そもそも思い込みから他のソリューションがあることに気がつかないこともあるだろう。パフォーマンス、コードサイズ、データ量、プラットフォームにおけるバランス、互換性への配慮、などなど様々な条件から複数のソリューションを考え、その中からベストを提案できることは重要なスキルだと思う。いえ、全てを一人で決めることがベストではなく、複数の識者の知見をふまえて解決方法を提案できる人の方が優秀かもしれないと、最近は感じている。Tumblr広告を非表示にするもっと読むコメントを書く2016-12-27アメリカで働くことは大賛成だけど、ちょっと考えて欲しいこと類さんがシリコンバレーでソフトウェアエンジニア職に就くことに関してのエントリーを書いて、それが反響を得ているようなので、その雑感。:)なお、何十年も前の話なのと、私の観測範囲においてなので、まあ参考程度に読んでいただければ幸いです。ソフトウェアエンジニアならアメリカに行った方がいいかという問いに対しては間違いなく行ったほうがいいと答えます。ぼくが言うまでもなく、コンピュータに関する技術は今も昔も多くはアメリカが発祥であり中心で、動きも早いです。日本とは全く違う文化に触れるだけでも、行く価値があると思います。アメリカのIT企業の多くはソフトウェア技術者の価値を知っているので、優秀であればとても快適な開発環境が体験できます。最先端でエキサイティングなチャレンジが出来る機会も多いですよ。全てがバラ色とは言いません。いったチャレンジが出来るチャンスは人生の中でそれほど多くありません。やりたいという気持ちがあればぜひチャレンジして欲しいな。アメリカで長く働くということであればちょっと考えてみて欲しいことがあります。自分の成果を積極的にアピールしていくバイタリティが必須アメリカは基本に成果主義であり、自分がしたことの成果は自身でアピールする必要があります。上司が自動的に評価したりはしません。「能ある鷹は爪を隠す」という言葉は忘れましょう。しないと「特に成果ないの?じゃあ君はうちとしては要らないね」って話になってしまいます。あと成果として重要なのは結果です。会社/プロジェクトに対して自分がどんなふうに貢献できたのか、という形でアピールすることが大事。長時間がんばってました!みたいなのはあまり評価されないので注意しましょう。日本と違ってアメリカでは普通にレイオフされます。長く一つの企業に勤めるより、次々と職場を変わっていく人の方が多いです。逆に言うと、転職については日本よりオープンであり、頻繁に転職したからといって、それがネガティブなイメージになることはありません。異国の雰囲気に馴染めるかそしてこれが一番重要なことだと思うのですが、長く暮らしていくにあたり、アメリカの雰囲気に馴染めるかどうか。ぼくの場合、アメリカに住んでみて、あらためて日本って、なんて住みやすい国なんだろうって思いました。慣れて来るとは言え、やはり異国の地で暮らすというのはなかなか大変です。東洋人だと露骨にイヤな顔をする人とかもいます。表面的な付き合いをするお友達は多くできるでしょうが、親友を作ることはなかなか難しいです。強烈なホームシックになることもあると思います。いえ、普通に暮らす分にはほとんど問題はありません。:)結論としてはアメリカで働くことはぜひやって欲しいけど、長く働くには自分に合うかどうか見極めた方がいいかな、って思います。現実的な話としては、アメリカの就労ビザを取得するのは簡単な話ではなく、いきなり現地採用はハードルが高いです。日本の外資系企業に就職して出張/転勤というのが現実的でしょうか。大変なことはありますが、得られる経験や知見は非常に大きなものがあります。Tumblr広告を非表示にするもっと読むコメントを書く2016-11-28最初に書かれたコードが最も影響力が大きい最初に書かれたコードって、すごく影響力大きいよね。ファイルのタイムスタンプを確認するまでもないだろう、と私は思った。このシステムは構築の初期、ある程度はまともに作られていたのだ。そのまともに作ることのできるプログラマは「消えて」しまった。あとを引き継いだ彼女は「消えた」プログラマほどの技量はなかった。彼女は「消えた」プログラマが残したフレームワークを理解することもできず、ただ、ソースコードを模倣した。個人的にはプログラミング経験に関係なく、最初に書かれたコードというのは非常に影響力が大きいものであると感じてます。それはそのソフトウェアの設計思想を決定づけるものであり、脈々と受け継がれていくものだからです。優秀なプログラマであるないに関わらず、多くのプログラマは元の設計思想を尊重し、それに合わせたプログラムを書くもの。:)そしてプログラムがヒドいものになっていく原因の多くはこの「最初の設計思想」にあることが多いのです。このプログラムは誰が何のために使うのか。優先すべき性能はどこにあるのか。相反する要求があった時、何を基準に機能を決定するのか。言えば、そもそもそのプログラムは必要なのか!?(笑)そういった設計思想はコードに反映され、伝承されていきます。設計思想が曖昧なプログラムはその後場当たり的な対応がなされ、そのうち使えなくなって最後は捨てられます。^^;そうならないよう精進しますです、はい。いえばカーゴ・カルトという言葉を初めて知りました。盲目的なコピペコード、うんうん、あるよね、そういうの。Tumblr広告を非表示にするもっと読むコメントを書く2016-10-18残業を減らそうだけじゃ、単なる思考停止じゃない!?もう30年以上前の話。社会人になって数ヶ月あまり、定時で帰ろうとした私を「ちょっとちょっと」と課長が呼び止めた。何かなと思って行くと「仕事というのは定時になったら帰っていいものではない」と説教された。「?」と思ったが、まだ新人だった私は素直にその日は意味もなく残業。:)IT業界に限らず、残業が減らない原因の根幹はこれだと思う表面的には「早く帰れ」「効率的に」などと言っていたとしても、本音の部分では違っていたりしますから、そのニュアンスは社員にも伝わり、どんな施策をとったとしても、その徹底度は薄れてしまうでしょう。「何でもいいから4時に帰れ。ダ・ヴィンチニュース結局のところ、いくら会社が「早く帰れ」と言っても、上司や同僚がいつまでも帰らなかったりすると、早く帰ることに後ろめたさを感じたりするわけです。上司や上の人が「ほらほら、早く帰って」とか言わないと、部下は「自分の評価が下げられたりしないだろうか」と不安になるもの。根底にあるのは、数十年前の日本企業によくあった残業する人は頑張ってる人っていう価値観が今も企業の上の人に根強くあるということだと思う。残業をすれば企業の支出が増えるので、利益が減ることになる。長時間残業が続くと社員は疲弊し、作業効率が落ちる。結果、納期も伸びて、会社の支出は更に増える。はずなのだが、実際には残業してると怒られるどころか「頑張ってるね」と褒められたりする。会社の上の人に対する意識改革が必要だと思う。あともう一つは日本企業によくある「みんなで一緒に頑張ろう」の弊害。作業が早く終わった/時間に余裕がある人は他の人の作業を手伝いましょう、ってやつ。効率よく仕事を手早く終わらせる優秀な人に、終わらない人の仕事がまわってくる。仕事がまわってくるのに感謝もされず*1、それにより評価は多少良くなったとしても収入アップにつながることは少ない。「こんなに頑張ってるのに、給料が変わらないなんて、どういうこと!?」という不満が募り、会社からは優秀な人からいなくなることになる。そもそもなぜ長時間残業が常態化しているのか。理由はそれこそ千差万別なはず。原因を突き止め、それに対して有効な対策は何かを考えることが必要なはず。本当の理由は言いにくいことなのだ。「今日は定時間日です。早く帰りましょう」なんて、見たくない事実から目を背けるための言い訳なのだ。残業を削減するのは手段の一つであって、目的じゃないはず。最終的には不満の多くはお金なのです。「自分はこれだけ頑張ってるんだから、それに見合った見返りが欲しい」ってことかと。そこをうまくバランスするしかないんじゃないかな。:)ふたこぶラクダという名前で知られている有名な論文がある。この論文では、60%の人間にプログラミングの素質がないと推定している。60%の人間はプログラミングの素質がないちなみにうちの息子(小学校高学年)にscratch教えたら、他の人のプログラムとかチュートリアルとか見て、あっという間にプログラム作れるようになってました。その柔軟な脳みそ欲しい^^;息子やいろんな人を見てるとプログラムが出来る出来ないの差って興味があるかないかっていうのが出発点になっているような気がしました。次のステップは、プログラマにとって重要な「教えなくても勝手に自分で調べたり試したりしてモノにしていける」かどうかで、それはコンピュータを使って自分のやりたいことが明確になっているかどうかなのだと思います。「これを実現したい」->「じゃあどうすればいいか」->「なるほどこうすればいいのか」->「じゃあこれを実現するには」というループが自然にできている人は覚えるのが早いです。あとは何か分からないことがあった時にアドバイスをくれる人も重要かな。それも答えを教えるんじゃなくてヒントをくれる人がいい。すれば理解した喜びを味わえて、学習のモチベーションが上がり、どんどん学んでいけます。「好きこそ物の上手なれ」とは、昔の人はよく言ったものです。コンピュータさえあれば自分の望むものを作ることができて、結果がすぐに分かる。作り直すのに部品屋さんに行く必要もない。何かを作るという点において、コンピュータソフトウェアほどお手軽なものはないと思います。慣れるとパズルゲームのようで、とても楽しい。パズル好きの人はきっと気に入ると思う。Tumblr広告を非表示にするもっと読むコメントを書く2016-10-04あなたはなぜプログラマをしているのですか?子供向けプログラミング講座が大人気らしいですね。私も妻によく「息子にプログラミング教えてよ」と言われます。「息子は絶対プログラマにはしない」と。聞くと「遅くまで仕事させられるわりには給料が低い。講談社(1/2)妻の認識は大体世間一般の認識と一致しています。IT業界は大方ブラックというのが通説になってますね。ネットで検索すれば多くの「IT業界の悲惨な現状」を目にすることができます。「そんなのはウチに比べれば全然大したことはない」と、不幸自慢大会が始まります(笑)パロディ漫画のネタも枚挙にいとまがありません。確かにそういった側面があるということは否定しません。下請けであるが故に無茶な仕様変更に対応せざるを得ないケース。大企業であっても見込みの甘さからデスマーチに突入するケース。残念ながらそういったことは少なくありません。IT企業の全てがそのような状況というわけではありません。バブル経済の時代、私も基本給より残業代の方が多いということもありましたが、現在は長引く不況により、多くの企業は残業代を削減する方向へ向かっています。会社にもよるが、昔のようなムチャな残業は全体としては減っている印象ですね。加えて近年はフレックスタイム制など、作業時間を比較的自由にできるようになってきました。これからではありますが、だんだんとプログラマの価値を企業が認識してくれるようになってきてはいます。あなたはなぜプログラマをしていますか?人によって理由は違うと思うけど、多くの人はプログラムを作ることに喜びを感じているから、プログラマをしているのではないですか!?初めて作ったプログラムが動いた時の喜び。分からなかった問題の原因が分かった時の爽快感。苦労して作ったソフトウェアがリリースされた時の達成感。いう気持ちがあるから、プログラマを続けているのではないですか!?別にウソを言えとは言いませんでも不幸な現状を嘆くだけではなく、できれば前向きな提案もして欲しいのです。プログラミングに興味を持つ若い人たちに、希望を感じさせるようになって欲しいのです。嬉しいことがあった時は、ぜひその気持ちをシェアして欲しいのです。Tumblr広告を非表示にするもっと読むコメントを書く2016-09-30転職って、運だと思う求職者は求人票を見て、この企業に入ったらどんな環境で開発するのか、どんな人達とどんなふうに働くのか...というように「そこで働く自分」をイメージします。情報が少なすぎる求人票では、「どんな会社かわかりにくい」と不安に思われてしまうのです。paiza開発日誌ほんとこれ。人事の採用担当者と開発者、全然話してないでしょ、って感じの求人情報が多すぎる。エンジニアは採用部署がどんな開発をしてるか、どんな人を求めてるのか、開発環境はどんな感じなのか、ということを知りたいのに、そういう情報が全く書かれてないと、受けてみようかって気もなくなっちゃうよね。言語の経験は何年かとか、TOEICは何点かとかより、どんな業務をしてて、どんなことができる人を求めてる、って書いた方がイメージしやすいと思う。面接にしても、課題を与えてコーディングさせてみるってところも多いんだけど、あれってどれだけ意味があるんだろうか。技術者なら少し話せばその人のスキルは大体分かるだろうから、むしろ全く知らない分野の担当になったとしたら、どのくらいの期間でどんなふうに技術を学ぶかとか、トラブルシューティングをさせてみて、問題解決のためにどんなアプローチをするかとか、そういうことに時間を使った方がいいと思うんだけどなあ。私は採用担当じゃないけど(笑)会社が求めてる人が分からない状態で入ってしまうと、お互い不幸にしかならないよ。いう意味で、募集する側としても、どんなことをしたいのか、どんな環境が好きなのかということをアピールすべきだと思う。面接の時だけ猫をかぶって、後から「こんなところだとは思わなかった」ってなるのはイヤだよね。以前、エンジニアの方々に転職方法について聞いてみたことがありますが、この業界は優秀な方ほど、求人経由ではなく縁故で転職される方が多いです。エンジニアの場合、縁故による転職の割合は他の職種と比べてかなり高くなっています。ぼくは全然優秀じゃないけど、これまでの転職は全部縁故だった。上司やイヤだったとか、会社がブラックだったとか、ネガティブな理由で転職する場合であったとしても、会社の人全てがキライだったわけではないだろうから、前の会社の人とのコネクションは作っておくことをオススメします。将来きっと役に立ちます。転職って「運」だと思うのですよ。会社が社員に期待すること。社員が会社(職場)に期待すること。マッチングは凄く難しくて、会社に入ってみて初めて分かることも多々ある。外からはなかなか分からない。そこはもう「運」しかないと思う。全てにおいて満足できる職場なんてあり得なくて、最終的にはどこかで妥協点を見つけざるを得ない。「自分にとって理想の職場」が見つかったとしても、その時会社が人材を募集しているかは「運」でしかない。「運」はいつ降ってくるか分からないだから、自分が職場に望むこと(望まないこと)を日頃から明確にイメージしておくって大事なことだと思う。それを継続してアピールし、実践し続けることで、だんだんと自分の理想に近づけていけるんじゃないかって、yasuhoは考えてる。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。