派遣で働くエンジニアのスキルアップを応援するサイト

PRODUCED BY RECRUIT

エンジニアへの挑戦状 #01 プログラム修正問題【解説】

f:id:itstaffing:20220208131524p:plain

この記事は、2022年1月28日に配信した「エンジニアへの挑戦状 プログラム修正問題#01」の解説となります。まだ問題を解いていない方は、こちらからご覧ください。
https://www.r-staffing.co.jp/engineer/entry/20220128_1

あなたのプログラマとしての力を測る問題でした。所要時間は3~5分としましたが、何を聞かれているのか理解できたら、1分ほどで解けたかもしれません。一方で、プログラマでない方には、さっぱりわからなかったでしょう。あなたは解けましたか?

では、早速解説していきます。

問題を解くための考え方

ソースコードの保守性などを考えるとき、人によって読みやすさなどは違います。そこで、誰もが同じ認識を得るために数値化する方法として「静的解析」がよく使われます。プログラムを実行して結果を確認するのではなく、ソースコードの段階でその品質を定量的に評価するのです。

この静的解析で使われる指標として、ソフトウェアメトリクスがあります。その指標の1つが、今回の問題で取り上げた「循環的複雑度」です。循環的複雑度は、ある処理の内部での分岐の数を表す指標のことです。条件による分岐が増えると、それだけ処理が複雑になり、テストパターンも増えるとともにバグも発生しやすくなります。そこで、循環的複雑度が大きい場合は処理を分割するなどの工夫が求められるのです。

循環的複雑度はその処理の中での経路の数と考えられるため、分岐やループがない場合は「1」です。そして、ifなどによって分岐が1つ増えるごとに、その値が1つずつ増えていきます。

たとえば、次のソースコードはifによる分岐が2つあるため、循環的複雑度は3です。

if (条件1) {
       処理1
} else {
       処理2
}

if (条件2) {
       処理3
} else {
       処理4
}

なお、ifは1つでも、条件が増えると、それだけ条件の判定が増えます。このため、andやorといった条件が追加されると、それだけ循環的複雑度も増えます。たとえば、次のソースコードはifの中に条件が3つあるため、循環的複雑度は4です。

if ((条件1) || (条件2) || (条件3)) {
       処理1
} else {
       処理2
}

解説

これらを踏まえて、今回の問題を見てみましょう。

問題文にあるソースコードでは、last_dayという関数の中で、if文がたくさん登場します。そして、その中に複数の条件が指定されているものもあります。これを数えてみます。

    f:id:itstaffing:20220316144444p:plain

このように、条件が全部で15個あるため、問題文のソースコードは循環的複雑度が16であることがわかります。

一般的に、循環的複雑度からソースコードの状態を判断するときは、次の表のように考えられています。

    f:id:itstaffing:20220316144453p:plain

そこで、選択肢のソースコードを見てみます。

【選択肢1】

不適切な月が引数として渡されたときの処理を先頭に移動し、うるう年の判定を2月の場合だけ実施しています。条件を数えてみると、次のようになります。つまり、循環的複雑度が9となりました。

    f:id:itstaffing:20220316144501p:plain

【選択肢2】

ifではなくswitchを使っています。複数の条件がある場合によく使われる書き方で、条件がわかりやすくなりますが、循環的複雑度は変わりません。初期値をセットしておくことで、elseを使わずに書いていますが、これも循環的複雑度には影響しません。つまり、この場合も選択肢1と同じく循環的複雑度は9です。

【選択肢3】

ifでの条件分岐ではなく、配列を使って月末日を取得しています。この場合、ifによる条件の判定が最初と最後だけになっています。配列から取得する部分は循環的複雑度に影響しないので、循環的複雑度は5です。

このため、正解は【選択肢3】となります。

実際に「保守しやすい」と判断する基準は他にもあるため、総合的に判断する必要がありますが、静的解析のツールが多くのプログラミング言語に提供されていますので、ぜひ使ってみてください。

エンジニアスタイルでは、今後もあなたのスキルの振り返りになるような問題を出題予定です。問題のレベルや出題範囲は随時拡大予定ですので、今後もぜひ解いてみてくださいね。

【出題・解説者】
増井 敏克さん
増井技術士事務所代表。技術士(情報工学部門)。情報処理技術者試験にも多数合格。ビジネス数学検定1級。「ビジネス」×「数学」×「IT」を組み合わせ、コンピューターを「正しく」「効率よく」使うためのスキルアップ支援や、各種ソフトウェアの開発、データ分析などを行う。著書に『プログラマを育てる脳トレパズル 遊んでおぼえるPythonプログラミング&アルゴリズム』『もっとプログラマ脳を鍛える数学パズル アルゴリズムが脳にしみ込む70問』『プログラマ脳を鍛える数学パズル シンプルで高速なコードが書けるようになる70問』『図解まるわかり アルゴリズムのしくみ』(以上、翔泳社)などがある。

 

エンジニアへの挑戦状 #02 Pythonでお宝探し

f:id:itstaffing:20220301154845j:plain

あなたのPythonスキルを測る問題です。
学んでいないとわからない。
詳しければ、1分以内にわかるはず。
さて、あなたは解けますか?

所要時間:3~5分
Pythonの基礎力が問われる問題です。

【問題】

ある海賊団が冒険中に謎のメッセージを遺跡で見つけました。そのメッセージには「られしふ おけぬう みすも れぎみら」と書かれていました。

考古学に詳しい人が文字を1文字ずつ置き換える換字式暗号だと気づきました。

この暗号形式では、例えば「あ」を「か」に置き換えて、「い」を「め」に置き換えるように、1文字ごとに変換対象の文字が決まっています。地道に組み合わせを変えていくことで先頭の「られしふ」は「たからは」(宝は)になると予想しました。お宝のありかを示すことに気づいた彼らは舞い上がって宴会を始めてしまって、肝心の場所については未解読です。

プログラムを書けるあなたは、以下のプログラムを完成させてお宝を彼らより先に見つけましょう。`transform_text` メソッドに書くべきコードを選択肢から選んでください。

```
class SubstitutionCipher:
    def __init__(self, plain_chars: str, encrypted_chars: str):
        self.plain2encrypted_key = self.map_chars(plain_chars, encrypted_chars)
        self.encrypted2plain_key = self.map_chars(encrypted_chars, plain_chars)

    def map_chars(self, chars1, chars2):
        return {char1: char2 for char1, char2 in zip(chars1, chars2)}

    def encrypt(self, plain_text: str):
        return self.transform_text(plain_text, self.plain2encrypted_key)

    def decrypt(self, encrypted_text: str):
        return self.transform_text(encrypted_text, self.encrypted2plain_key)

    def transform_text(self, text: str, key: dict):
        // プログラムが正しく動くように以下から選択してください。

if __name__ == "__main__":
    plain_chars = "あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをんがぎぐげご "
    encrypted_chars = "くけこそるれのぎぐよおみせかはらいえまねちもがをうふへほたろすあむげりめひさしんきやゆごわつてとなにぬ "
    encrypted_text = "られしふ おけぬう みすも れぎみら"
    cipher = SubstitutionCipher(plain_chars, encrypted_chars)
    print(cipher.decrypt(encrypted_text))
```

【選択肢1】

```
for value in key.values():
    replaced_char = key.get(value, "")
    text = text.replace(value, replaced_char)
return text
```

【選択肢2】

```
output = ""
for char in text:
    output += key.get(char, "")
return output
```

【選択肢3】

```
output = ""
for char in text:
    output += key.pop(char, "")
return output
```

 

お宝がどこにあるか分かりましたか?自信のない人は、実際にプログラムを実行してみましょう。正解とその解説はこちらから。

 

ここまでご覧いただきありがとうございます。実はこの問題、出題者がとある人気海賊マンガを読み直ししていたときに思いつかれた設定なのだとか。問題と一緒に、出題者が読んだ作品も考えてみてくださいね。

本問題以外にも、リクルートスタッフィングでは、エンジニアのスキルアップを応援するため、登録者限定の記事やイベントなどを配信しています。 リクルートスタッフィングでの就業に関わらず使えるものですので、これを機にお役立てください。

リクルートスタッフィング

【出題者】
早川 敦士さん
株式会社DATAFLUCTで事業責任者(プロダクトマネージャー)として従事。データと機械学習をビジネスに活かすプロダクトを開発している。また、株式会社ホクソエムで執行役員を務めたり、プログラミング教育に携わる。新卒でリクルートコミュニケーションズに入社しWeb広告やマーケティングオートメーションなどのB2Cマーケティングを経験し、その後ユーザベースにてB2BマーケティングプラットフォームであるFORCASのクローラーやデータ分析基盤を開発するチームリーダーをする。大学在学中に『データサイエンティスト養成読本』(技術評論社刊)を共著にて執筆。その後も『機械学習のための特徴量エンジニアリング』(オライリー・ジャパン刊)や『Pythonによるはじめての機械学習プログラミング』(技術評論社刊)などで執筆活動を続けている。Youtubeチャンネル『データサイエンティストgepuro』で動画を投稿。
・Twitterアカウント

 

初心者でもわかる量子コンピュータの計算の仕組み 【第1話】数式なしで量子コンピュータの現状を理解しよう

f:id:itstaffing:20220208091002p:plain

ここ数年、量子コンピュータに関するニュースが増えました。その度に、これまでのコンピュータはいずれ不要になるのか、量子コンピュータは実用化されたのか、量子力学を学んだほうがいいのか、など疑問や不安に思う方もいるかもしれません。

一方で、量子コンピュータに関して専門知識がなくても理解できる解説はまだまだ多くありません。そこでこの連載では、量子コンピュータ・プログラマの束野仁政さんに、できるだけわかりやすく量子コンピュータの計算の仕組みを解説いただきます。

【筆者】束野 仁政さん
量子コンピュータ・プログラマ。学生時代に数学を専攻したのち、ソフトウェア・エンジニアを経て、現在は研究機関にて量子コンピュータの仕事をしている。量子コンピュータの面白さを多くの人に広めたいと思い、雑誌記事や同人誌の執筆、勉強会での発表等を行う。著書は「Elasticsearch NEXT STEP」(インプレスR&D)。
・Twitterアカウント(https://twitter.com/snuffkin

今回のサマリ

・量子コンピュータと従来のコンピュータの違いとは
・量子コンピュータによくある誤解
      1.量子コンピュータは、あらゆる計算が速くなる?
      2.量子コンピュータが実現すれば、スーパーコンピュータは不要?
      3.量子コンピュータはすでに実用化されている?
・(コラム)量子力学がわからなくても量子コンピュータを理解するには

■免責
本連載は情報の提供のみを目的としています。
本連載の内容を実行・適用・運用したことで何が起きようとも、それは実行・適用・運用した人自身の責任であり、著者や関係者はいかなる責任も負いません。

■商標
本連載に登場するシステム名や製品名は、関係各社の商標または登録商標です。 また本書では、™、®、© などのマークは省略しています。

リクルートスタッフィング

量子コンピュータと従来のコンピュータの違いは

私たちが使っているコンピュータは20世紀に大きく発展し、普及しました。ムーアの法則が提唱されたように、コンピュータの計算能力は指数関数的に向上しました。ただし、集積回路の小型化など、物理的な限界に達しつつあります。

f:id:itstaffing:20220204103126j:plain

▲ 図1.1:ムーアの法則
(出典)「ムーアの法則」(2020年12月29日 22:02 UTCの版)Wikipedia
https://en.wikipedia.org/wiki/File:Moore%27s_Law_Transistor_Count_1970-2020.png

>> 拡大表示

一方で、コンピュータが発展するにつれ、人類が扱うデータ量は急激に増大しています。画像や動画といった大きなサイズのデータや、ビデオ会議の普及などにより、今後もデータ量が増大していくと推測されます。

f:id:itstaffing:20220204103138j:plain

▲ 図1.2:世界のトラフィックの推移及び予測(トラフィック種別)
(出典)総務省
https://www.soumu.go.jp/johotsusintokei/whitepaper/ja/r01/html/nd112110.html

こうした中、指数関数的な計算能力の成長の候補となるのが量子コンピュータ(quantum computer)です。ここでは、量子コンピュータを区別するため、従来のコンピュータを古典コンピュータ(classical computer)といいますが、ネガティブな意味はありません。

まずは、量子コンピュータと古典コンピュータの違いについてみていきましょう。

私たちが普段使っている古典コンピュータの情報の単位はビット(bit)です。量子コンピュータのビットと区別するため、本連載では古典ビット(classical bit)といいます。1古典ビットは0または1で、2種類の情報を表せます。2古典ビットであれば00,01,10,11の4通りの情報を表せます。このように、n古典ビットでは2n通りの情報を表せます。ただし、古典ビットがいくつあっても、同時に持てる値は1通りです。また、古典ビットは、同じ操作を行えば毎回同じ結果を得ることができます。

一方、量子コンピュータの情報の単位は量子ビット(quantum bit, qubit)といいます。1量子ビットは |0⟩ または |1⟩ という記号を使い、2種類の情報を表せます。2量子ビットであれば |00⟩ , |01⟩ , |10⟩ , |11⟩ の4通りの情報を表せます。n量子ビットの情報は2n通りの情報を表せます。ここまでは、古典ビットも量子ビットも同じです。

しかし、量子ビットは古典ビットとは違った性質を持っています。実は、n量子ビットは2n通りの情報を同時に持てます。また、量子ビットを測定した結果は確率的に決定され、量子ビットの状態も変わってしまいます。同じ操作をしても |0⟩ が返ってきたり、 |1⟩ が返ってきます。

ただし、2n通りの情報を同時に持てても、測定で取り出せる情報は1通りです。古典コンピュータの並列計算は同時に複数の計算を行って複数の結果を取り出せるため、量子コンピュータの計算とはイメージが異なります。したがって、量子コンピュータで普通に計算しても高速にはなりません。量子コンピュータを効果的に使うにはアルゴリズムの工夫が必要になります。量子コンピュータ用のアルゴリズムを量子アルゴリズム(quantum algorithm)といいます。

古典ビットと量子ビットの特徴をまとめると、表のようになります。

▼ 表:古典ビットと量子ビットの特徴

f:id:itstaffing:20220210162824j:plain
f:id:itstaffing:20220204103146j:plain

▲ 図1.3:古典ビット、量子ビットが同時に持てる値

n量子ビットで表せる情報の種類が2n通りであるため、数式としては2n次元ベクトル*1で表せます。量子コンピュータによる計算は、n量子ビットの情報(2n次元ベクトル)を別のn量子ビットの情報(2n次元ベクトル)に変換する処理であるため、2n×2n次行列で表せます。もう少し正確にいうと、量子コンピュータで計算できる形には制約があるため、ユニタリ行列(unitary matrix)という種類の行列になります。ユニタリ行列は、ベクトルにかけても長さを変えない行列です。このユニタリ行列を計算すれば、古典コンピュータで量子コンピュータをシミュレーションできます。

f:id:itstaffing:20220204103155j:plain

▲ 図1.4:ベクトルxにユニタリ行列Uをかけても、ベクトルの長さは変わらない(xの長さ=Uxの長さ)

ただし、行列のサイズが量子ビット数に対して指数関数(=2n)になるため、量子ビット数が増えると行列の計算時間やメモリ使用量も指数関数で増加します。そのため、古典コンピュータによるシミュレーションは量子ビット数が増えてくると、現実的に困難になります。

*1 プログラミングとしては2n次元配列のイメージ

一方、量子コンピュータは量子ビット数が増えても、計算時間への影響は少ないです。そのため、量子コンピュータは指数関数的に巨大なユニタリ行列を高速に計算できます。

量子コンピュータによくある誤解

量子コンピュータの研究が急速に発展しており、興味を持つ方も増え、期待が高まっているのを感じます。一方で、誤解されていると思われる話題も増えています。ここでは、量子コンピュータによくある誤解と実際の性能について説明します。

1.量子コンピュータは、あらゆる計算が速くなる
先述のように、量子コンピュータはユニタリ行列の計算を高速に行えます。しかし、あらゆる計算が速くなる訳ではありません。同時に持てる値は複数ですが得られる結果は1通りだけですので、並列計算で複数の計算結果を得るイメージとは異なります。そのため、量子コンピュータ用に工夫したアルゴリズムが発見された計算のみが高速化できます。

2.量子コンピュータが実現すれば、スーパーコンピュータは不要
2019年に「スーパーコンピュータで1万年かかる見込みの計算を、量子コンピュータで 200秒で計算した」という論文をGoogleが発表しました。このニュースが広まると共に、「量子コンピュータはスーパーコンピュータより圧倒的に速い」という誤解も広まったように思います。

この論文で計算したのは「量子コンピュータが得意な問題」です。量子コンピュータの実機で高速に計算できる問題が存在することを示すために、あえてこのような問題設定にしましたが、実用的な問題ではありません。そのため、実用的な問題は、現状ではスーパーコンピュータの方が速く解けます。それどころか、スーパーコンピュータで解くような大きな問題を現在の量子コンピュータで実行しても、正しい答えに辿り着けないでしょう。

量子コンピュータで高速化できるのは、量子アルゴリズムが発見されている問題だけです。したがって、量子コンピュータが実用化されても、特定の問題を高速に計算できるアクセラレータとして使われ、スーパーコンピュータと量子コンピュータは共存することになるはずです。

3.量子コンピュータはすでに実用化されている
「実用化」を「生活などに役立つ計算に使われ、古典コンピュータより高速に計算できる」と捉えた場合、量子コンピュータはまだ実用化していません。一方、量子コンピュータの実機はクラウドで公開されており、本連載でも利用します。また、利用料が必要となる量子コンピュータもあるため、商用化しているといえるかもれません。この状況が誤解を招きやすくなっています。

現在の量子コンピュータの性能を航空機でたとえると、ライト兄弟の初飛行の段階です。確かに実機は存在して動いていますが、大勢乗せる(大量の量子ビットを扱う)ことはできませんし、安全に長時間飛ぶ(正確に長時間計算する)こともできません。実用化にはまだ時間がかかる状態です。

では、実用的な計算に必要な量子ビット数の量子コンピュータはいつ頃できるでしょうか。正確な予測は難しいですが、私の予測ではよっぽどのことがない限り、5年や10年くらいで実用化する可能性は非常に低いと考えています。

ただし、話題性やアクセス数を求めるために、煽るような表現や不当に貶めるような情報もインターネットには溢れています。そういった情報に振り回されることなく、冷静に学びたいですね。

今回のコラムはここまでです。次回は、高校レベルの行列と確率を使い、量子コンピュータの計算の仕組みを説明します。数式は登場しますが、できるだけ平易に説明します。
次回もお楽しみに。

(コラム)量子力学がわからなくても量子コンピュータを理解するには

本連載を読まれる方は、量子コンピュータに期待を持ち、学びたいと考えている方でしょう。なかには、すでに量子コンピュータの勉強をはじめており、「量子コンピュータの本を読んだけれど理解できなかった」という方もいらっしゃるかと思います。また、量子コンピュータそのものではなく、量子力学の理解でつまずいてしまう方も少なくないかもしれません。

本連載は量子コンピュータについて説明していますが、量子力学の知識が必要な説明は行いません。実証されている科学(量子力学)の結果を信じ、そういうルールだと割り切る前提で進めます。

たとえば、半導体が物理学レベルでどう動作しているのか理解していなくても、「普通の人」が「使う立場」でパソコンやスマートフォンなどの古典コンピュータを使いこなしています。そのため、量子力学の詳細を理解していなくても、使い方のルールがわかれば使いこなせると考えています。「普通の人」が「使う立場」で学ぶのであれば、難しく考えずにそういうルールだと受け入れ、どんどん使って慣れるのが早いでしょう。

このような理由により、本連載では量子力学固有の専門用語は使用せず、行列と確率を使って量子コンピュータをわかりやすく解説します。また、理解を定着させるために、実際に手を動かして計算することを重視しています。ルールに沿って実際に手を動かして慣れましょう。

▼これまでの「初心者でもわかる量子コンピュータの計算の仕組み」
【第1話】数式なしで量子コンピュータの現状を理解しよう
【第2話】量子コンピュータで使用する計算の土台を学ぼう
【第3話】量子コンピュータの基本のルールを学ぼう
【第4話】基本の量子ゲートと量子回路をおさえよう
【第5話】量子プログラミングをやってみよう
【最終話】現在の量子コンピュータの限界とこれから

束野仁政さんの著書『量子コンピュータの頭の中――計算しながら理解する量子アルゴリズムの世界(技術評論社)』もあわせてご覧ください。(2023年7月追記)

リクルートスタッフィング

特別編集 仕事でイライラやモヤモヤを感じているなら

f:id:itstaffing:20220202112423j:plain

職場でイライラやモヤモヤ、不安を感じることはありませんか。今回は心の整え方にフォーカスした記事をご紹介します。その方法は感情を無理やり抑えるものではありません。例えば、怒り=【大事なもの】×【傷つけられる】、不安=【未来のこと】×【わからない】といった「感情の方程式」を知っているだけでも随分楽になるのだとか。今すぐ取り入れられる考え方です。ぜひお役立てください。

Pickup

1:仕事のモヤモヤは感情で抑えない。その方法は?

記事の内容
・感情の爆発や我慢はNG。「感情の方程式」をご紹介
・職場でも自宅でもすぐできる。自分自身の感情を俯瞰するコツ

2:レゴ・ブロックを積むと見えてくる!?自分の本意

記事の内容
・仕事で感じたネガティブな感情を作品に取り入れるワークとは?
・感情を押し殺して仕事をするのではなく、感情をうまく表現して、相手と良い関係性を

3:自分の心が整ったら、相手の感情に共感してみよう

記事の内容
・相手の感情に共感を示してみると、よりよい会話に
・相手の話しを深く理解するには2つの方法がある

 

エンジニアへの挑戦状 プログラム修正問題 #01

f:id:itstaffing:20220208090604p:plain

あなたのプログラマとしての力を測る問題です。
非プログラマにはわからない。
プログラマなら、言語問わずわかるはず。
さて、あなたは解けますか?

所要時間:3~5分
コツがわかれば、1分足らずで解けるかも!?

リクルートスタッフィング

【問題】

新入社員にプログラミングを教えていて、「月末日を取得する関数」を作成するように指示したところ、以下のソースコードが提出されました。なお、「is_leap_year」という関数は、うるう年を判定する関数として、すでに用意されているものとします。

int last_day(int year, int month) {
    if (is_leap_year(year)) {
        if ((month < 1) || (month > 12)) {
            return -1;
        }
        if (month == 2) {
            return 29;
        } else if ((month == 4) || (month == 6) || (month == 9) || (month == 11)) {
            return 30;
        } else {
            return 31;
        }
    } else {
        if ((month < 1) || (month > 12)) {
            return -1;
        }
        if (month == 2) {
            return 28;
        } else if ((month == 4) || (month == 6) || (month == 9) || (month == 11)) {
            return 30;
        } else {
            return 31;
        }
    }
}

得られる結果は問題ないのですが、保守性の観点から、実行結果を変えずにこのソースコードを修正したいと思います。
以下のうち、循環的複雑度がもっとも小さくなるソースコードを選んでください。

【選択肢1】

int last_day(int year, int month) {
    if ((month < 1) || (month > 12)) {
        return -1;
    }
    if (month == 2) {
        if (is_leap_year(year)) {
            return 29;
        } else {
            return 28;
        }
    } else if ((month == 4) || (month == 6) || (month == 9) || (month == 11)) {
        return 30;
    } else {
        return 31;
    }
}

【選択肢2】

int last_day(int year, int month) {
    if ((month < 1) || (month > 12)) {
        return -1;
    }
    int day = 28;
    switch (month) {
        case 2:
            if (is_leap_year(year)) {
                day = 29;
            }
            break;
        case 4:
        case 6:
        case 9:
        case 11:
            day = 30;
            break;
        default:
            day = 31;
    }
    return day;
}

【選択肢3】

int last_day(int year, int month) {
    if ((month < 1) || (month > 12)) {
        return -1;
    }
    int days[] = {
        31, 28, 31, 30, 31, 30,
        31, 31, 30, 31, 30, 31
    };
    int day = days[month - 1];
    if ((month == 2) && (is_leap_year(year))) {
        day = 29;
    }
    return day;
}

難なく解けましたか?
時間がかかった方や歯が立たなかった方はこれを機に「ソフトウェアメトリクス」について学んでみましょう。
正解とその解説は こちらから。

【出題者】
増井 敏克さん
増井技術士事務所代表。技術士(情報工学部門)。情報処理技術者試験にも多数合格。ビジネス数学検定1級。「ビジネス」×「数学」×「IT」を組み合わせ、コンピューターを「正しく」「効率よく」使うためのスキルアップ支援や、各種ソフトウェアの開発、データ分析などを行う。著書に『プログラマを育てる脳トレパズル 遊んでおぼえるPythonプログラミング&アルゴリズム』『もっとプログラマ脳を鍛える数学パズル アルゴリズムが脳にしみ込む70問』『プログラマ脳を鍛える数学パズル シンプルで高速なコードが書けるようになる70問』『図解まるわかり アルゴリズムのしくみ』(以上、翔泳社)などがある。

 

特別編集 Javaエンジニアが次に学ぶ言語に迷ったとき読みたい3つの記事

f:id:itstaffing:20220112113718j:plain

エンジニアとしての幅を広げるために、Java以外の言語に挑戦したい。だけど、「こんなものを作ってみたい」といった気持ちが湧かない場合や結局どの言語がいいのかといった迷いで、次の一歩がなかなか踏み出せない。今回はそんな方たちに向けて、Javaエンジニアだからこそ習得しやすい3つの言語をピックアップしました。各記事内にはそれぞれのコードもご紹介しています。

Pickup

1:Scalaに挑戦!Javaの延長線としてScalaを使ってみませんか?

記事の内容
・JavaスキルがあればJVM言語は習得しやすい。各JVM言語の長所と短所をご紹介
・JavaエンジニアがScalaを学ぶメリットは?

2:Kotlinに挑戦!Androidアプリの開発に挑戦してみよう

記事の内容
・JavaとKotlinを比較。どうしてKotlinは簡潔に書けるの?
・Android Studioを使ったアプリの作成を例にプログラムの流れをみてみよう

3:Pythonに挑戦!やさしくPythonを学べる超入門編

記事の内容
・Pythonは構文がとてもシンプル。他の言語に比べて記述文字数が少ないという特徴も
・人気書籍「Python 1年生」の著者、森巧尚さんが基礎からPythonを解説

 

特別編集 再びやり直すなら読みたい3つの記事

f:id:itstaffing:20211222094833j:plain

昔はプログラマだったけれど、枯れた技術だしもう最新のトレンドについていけない。そんな方にも案件をご紹介し、実際にプログラマに復帰された方をたくさん見てきました。その経験から、今回は再びやってみるかと思ったときに学び直しておきたいことについてまとめました。きっとこの記事を読んでいる方は、現役と比べたら自信はないけれど、ITや技術のことは好きなはず。そんなあなたのやる気を応援するお手伝いができたら嬉しいです。

Pickup

1:プログラミングを学ぶ最初の壁、「環境構築」について

まずは自宅に開発環境を作りませんか?思い出すには手を動かすのが一番!

記事の内容
・環境構築に時間をかけたくない!それならまずは、オンラインの実行環境を使ってみよう
・例えば「PHP」の環境構築はどんな感じ?インストールから実行までの流れを解説

2:プログラマなら知っておきたい「基礎用語」とは

昔から変わらないものも、トレンドに合わせて使われるようになったものも。

記事の内容
・最低限知っておきたい専門用語をご紹介
・似ている用語と比較をしながら解説しているので、その違いも確認しよう

3:プログラミングに必要な「アルゴリズムの考え方」とは?

コードを書けても意外と説明できない、考え方を復習しましょう。

記事の内容
・「アルゴリズム」という言葉は聞いたことありますか?
・プログラミング時に「アルゴリズムの考え」が必要な理由を図解付きで解説