ゴムの木

初心者から一歩踏み出す

RustでHello, worldするまで

こんにちは、ゲネです。

前回予定していた通り、この記事では今ゲネが一番気になっているプログラミング言語であるRustに入門します。

Rustとはどういった言語か

Rustをインストールしてバリバリ自分で進めていきたい方は、ゲネの記事を読まなくても大丈夫。

だってRustの公式チュートリアルは日本語にも翻訳されているから。

しかし、これはあくまでチュートリアルですので、Rustを使うと具体的に何が嬉しいのかにはあまり重点が置かれていません。

そこで、私が着目するC/C++の弱点や、それを克服するRustの利点を交えて解説していきたいと思います。検索すれば達人たちによる良記事はいくらでも出てきますが、そっちを読んでねというだけではブログ記事として成立しませんし…

ゲネはRustに何を期待しているか

端的に言えば、

  • C/C++よりセキュアなコーディングができる低レイヤ言語
  • 爆速で動く

の2点です。

逆に言えば、現時点ではこれだけしか期待していません。

1点目に関して、C言語はもともとUNIX OSを書き直すために開発された言語で、軽量であるため今でも組み込みシステムなどに使われています。

しかし、メモリにアクセスできる言語であり、かつ安全機構が欠けているためバッファオーバーフロー(メモリの領域あふれ)などを防止するシステムがありません。

この仕様のため、攻撃者が意図的にバッファオーバーフローを発生させ、ターゲットシステムに悪意ある動作を行わせることが欠点であるとされてきました。

RustはC言語系列の魅力である実効速度の高さを保持しつつ、エラー処理や自動メモリ管理によってC言語系列の弱点を克服しているところが非常に魅力的です。

私自身、まだRustを深く触った経験がないため触っていくうちにメリットデメリットが見つかることでしょう。

気になったらとりあえず入門!それくらいの気持ちでいます。

Rust入門

Mac, LinuxでHello, world!

MacLinuxとほとんど同じコマンドを受け付けますので、LinuxMacをメインにしている方には朗報です。

なんと5行のコマンドを打つだけでHello, world!が出力されます。

$ curl --proto '=https' --tlsv1.2 [https://sh.rustup.rs](https://sh.rustup.rs/) -sSf | sh

でインストールが完了し、

$ rustup update

でRustの更新ができ、任意のディレクトリ内で

$ cargo new (Project Name)

とすることでプロジェクトフォルダが生成され、cdでそのフォルダ内に移動して

$ cargo run

でデフォルトで書かれている

Hello, world!

が出力されます。

ね?簡単でしょう?

Win10でHello, world!

インストールが少しGUIだなあというだけで簡単さはMacLinuxのそれとは遜色ありません。

https://www.rust-lang.org/tools/installインストーラをDLしてきてインストール。

Power Shellで

$ rustup update

を実行して最新版にアップデート。以降は上記と同様に、任意のディレクトリ内で

$ cargo new (Project Name)

をし、

$ cargo run

を走らせることで

Hello, world!

が出力されます。

楽しいことをしよう

お疲れ様でした。

RustはOSカーネルの開発といったコアな部分だけではなく、Webアプリケーションの開発やAPIサーバの開発といった、よりイメージしやすい部分の開発に使われつつあります。

また、以前の記事で触れたとおり、AtCoderなど大手競プロコンテストサイトでも使用できるようになっています。

静的型付け言語は入門のハードルが…コーディングが難しい…と言われがちですが、ハードルが低めのRustで軽く入門してしまいましょう。

参考リンク:https://zenn.dev/mabe/articles/936b788cd2b4d4

PR

株式会社スマレジTechFarm事業部ではWebエンジニアを募集中です!

corp.smaregi.jp

PythonやRustなど最新の言語の案件も多数あり、未経験含む様々なご経験をお持ちの方にご活躍いただける会社です。 こちらのフォームからエントリーしていただき、就職が決まれば10万円を進呈中です! カジュアル面談も随時受付中です。どうぞお気軽にエントリーください。 (「ゲネのブログを見た」とおっしゃっていただければ嬉しいです。)

静的型付け言語が好きなPythonプログラマ

こんにちは。ゲネです。先週は時間がなく、記事が書けませんでした。

その分今週は記事を二本アップします。

さて、私の主力言語はPythonで、現在もPythonを使った案件にアサインされており、まさしくPythonでご飯を食べている状態なのですが…

静的型付け言語の方が好きなんです。

この記事では静的型付け言語のメリットを語ってみたいと思います。

静的型付け、動的型付けとは何か

ものすごく簡単に言えば、

『変数を最初に書いたとき、何型かを定義する必要があるかどうか』

です。

このとき、そのプログラムの実行よりも前に変数の型があらかじめ決まっている仕様の言語を『静的型付け言語』、プログラム実行時に代入する値によって勝手に型が決まる仕様の言語を『動的型付け言語』と呼びます。

静的、動的、というのは、静的=あらかじめ決まっている、動的=状況に応じて臨機応変に変えてくれる、というコンピュータサイエンスならではの用語ですね。

なぜ静的型付けが好きか

さて、静的型付け言語と動的型付け言語はそれぞれにメリットとデメリットがあります。

静的型付けのメリット

  • 実行が速い

    プログラムを書いた時点で型が決まっているため、コンパイラを通して機械語コンパイルしておくことで実行速度が大きいという特長があります。

  • 読みやすい

    型が明示的に書かれているので、他人の書いたコードでも読みやすいです。

静的型付けのデメリット

  • 厳密に書かなければならない

    型ってなに?な初心者には学習コストが高くなりがち。

動的型付けのメリット

  • 書きやすい

    直感的に書けるため、個人開発など比較的小規模で手早く作りたいものに向いています。

動的型付けのデメリット

  • 実行が遅い

    実行時にソースコードを逐次解釈して実行していくため、メモリを食い、比較的速度が出にくいという特徴があります。

  • 読みにくい!

    特に他人の書いたコード。この変数は何型なのか?よくわからずに書き足すとエラーが起きやすいように感じます。

私は型がビシッと明示的に書かれている状態が自分で書いていてもわかりやすくて好きなので、どうしても静的型付け言語に軍配が上がってしまいます。

扱いが難しいかわりにうまくやれば速度が出せる、というところもオタク心をくすぐります。

Pythonもそうですし、RubyJavaScriptといった最近流行りの言語の多くが動的型付け言語なのですが、皆さんの好みはいかがでしょうか。

個人的には、静的型付け言語を学ぶことで、コンピュータ内部でどのような処理が走っているかをより深く知ることができると考えています。

動的型付け言語から入った人は静的型付け言語を学ぶときに難しさを感じてしまうかもしれませんが、一度は学んでみる価値があるでしょう。

次回はこのブログでたびたび触れてきた静的型付け言語・Rustに入門する記事の予定です。

GitHubとGitLab、始めるならどっち?

個人開発をしていると、ソースを公開したい、色んな人に見てもらいたいという気持ちが出てきます(よね?)。

そこで公開するプラットフォームとして挙げられるのがGitHub…と、最近ではGitLabも選択肢に上がるのではないでしょうか。

結論

どっちでもいい。

身も蓋もない結論から入りますが、特にGitHubにしかない機能だとか、GitLabならではの革新的な機能とかいうものはありません。

(人によっては細かいこだわりなど異論があると思いますが、通説としてはこのように言われています)

どちらも無料プランが充実しているので、どちらかにアカウントを作り、もう片方を試したいと思ったときに移行することもできます。

特色

GitHub

  • 公開時期:2008年
  • 対象:エンジニア
  • 備考:Microsoft社製。世界的なシェアが大きい(使用人数が多い)

GitHubは今でも個人から企業まで幅広く使用されており、有料プランもありますが、個人として使う分には無料で十分と言えるサービスです。

エンジニアにとって見やすく、使いやすいUIと言われており、静的ページをホストしてくれるGitHub PagesのHugoテンプレートもエンジニアのポートフォリオづくりに向いていると言えるでしょう。

GitLab

  • 公開時期:2011年
  • 対象:エンジニア、デザイナ
  • 備考:OSS。最近シェアが伸びてきている

対し、GitLabはGitHubの基本的な機能を踏襲しつつ、Dockerと連携できたり、CI/CD機能によって自動的に単体テストを行ってくれたりと比較的機能が豊富です。

静的ページをホストしてくれるGitLab Pagesもあるのですが、テンプレートはどちらかというとデザイナ向け。

少し前までは無料プランでもプライベートリポジトリを作れることが利点だったのですが、GitHubでも無料でプライベートリポジトリが作れるようになったので差異はなくなりつつあります。

強いて言うならば

個人開発者が初めて使うのであれば、GitHubがオススメです。

冒頭で述べた「どっちでもいい」には反してしまうのですが、初心者はメジャーな方を使っておく方が何かとベターです。

使用人数が多いということは日本語のドキュメントが多いということでもあり、困ったときに解決策がヒットしやすいというメリットがあります。

PR

株式会社スマレジTechFarm事業部ではWebエンジニアを募集中です!

corp.smaregi.jp

PythonやRustなど最新の言語の案件も多数あり、未経験含む様々なご経験をお持ちの方にご活躍いただける会社です。 こちらのフォームからエントリーしていただき、就職が決まれば10万円を進呈中です! カジュアル面談も随時受付中です。どうぞお気軽にエントリーください。 (「ゲネのブログを見た」とおっしゃっていただければ嬉しいです。)

慣れないことは習慣化した方がいい

運動を続けたい。

読書にハマりたい。

秋といえば、何かに打ち込みたくなる季節。

でも、「○○をしよう!」と思い立ってもなかなか続きませんよね。

その原因は、目標が大きすぎるから。

ばかばかしいぐらいに小さい目標から始めると、案外続くものです。

時速100kmで走りたいからといって初速で時速100kmは出せない

自動車で時速100kmで走行したい場合でも、アクセルを踏んだ瞬間から時速100kmになるわけではありません。時速5km、10km…とだんだん出力が上がっていって100kmに至るわけです。

文字にする必要もないくらい当たり前のことですが、人は意外と自分のことを過大評価しています。

「毎日30分走ろう」

「毎日1時間勉強しよう」

「さあ、今日から頑張るぞ!」

秋を迎えてキラキラしているあなたに、あえて私はこう言いたいのです。

頑張るな、と。

「頑張る」は思っているより気力を消耗する

何事も思いつきたては一刻も理想の状態へ近づきたいという気持ちが大きいはず。だから、多少ノルマがキツくても頑張れてしまいます。

しかし、三日坊主という言葉がある通り、憧れの持続時間はとても短いものです。

あっという間にハードルが上がっていき、超えることができなくなり、やめてしまう。

最初に目標設定したあなたはこう思ってはいなかったでしょうか。

頑張りさえすれば、毎日30分走ることができる」

頑張りさえすれば、毎日1時間勉強し続けられる」

「頑張る」とは、あなたのポテンシャルの100%を超える行為です。

必殺技のように、たまに出すことはできても出し続けることはできません。

時速100kmを出したいなら、まず時速5km、いや2kmぐらいから始めるべきです。なぜなら、動き始めるまでが一番大変だから。

まずは頑張ることをやめましょう。最初が一番大変なのに、最初に超える壁が高すぎては元も子もないのです。

これらを踏まえると、あなたが本当に設定すべき目標は…

頑張らなくても毎日5分は歩けるかな」

頑張らなくても毎日1ページは本が読めるかな」

これです。

これの『頑張らなくてもこれぐらいは、まあ』こそがあなたの本当のマイルストーンであり、習慣化への第一歩です。

考えるな。

さて、人は意思決定をする際に時間と気力を消耗します。

スティーブ・ジョブズが同じ服をたくさん持っていて着続けたのも、気力の消耗を最低限に抑えたかったからだと言われています。

確かに、毎朝「う〜ん、今日はこの服にしよっかな〜」とダラダラ悩み続けると、時間も気力もムダになりそうですよね。優先順位がさほど高くない事項は、思い切って自動化してしまうと良いということです。

この自動化と習慣化はほぼ同じ関係にあります。

たとえば、歯磨きをする際に毎回「今日は左下から磨こうかな?あと歯ブラシも黄色がいいな…歯磨き粉も何にしようかな〜」とは考えませんよね。

おそらく、自分がどこから歯を磨き始めるのかも、訊かれてすぐに答えられる人はいないと思います。それほどに無意識で行っていることです。

時間が来たら、特定の場所に行ったら、必ず行うこと。

これが自動化であり、習慣化された行動です。

このように、先ほど決めた小さな小さな目標を習慣に組み込むことで初めて、継続するルーチンが出来上がります。

ばかばかしいぐらいに小さい目標を立てよう

アメリカのライター、スティーヴン・ガイズ氏は著書『小さな目標』(ダイヤモンド社)の中で、

「まずは腕立て伏せ1回から!」

「文章は50文字書いたらOK!」

といった例を挙げています。

笑ってしまうくらい小さな小さなノルマですが、やり始めると意外とそれを超えてやってしまいます。

さて、あなたの秋の目標は何でしょうか。

まずは、小さい目標を立てることを一つめの目標にしてみてください。

PR

株式会社スマレジTechFarm事業部ではWebエンジニアを募集中です!

corp.smaregi.jp

PythonやRustなど最新の言語の案件も多数あり、未経験含む様々なご経験をお持ちの方にご活躍いただける会社です。 こちらのフォームからエントリーしていただき、就職が決まれば10万円を進呈中です! カジュアル面談も随時受付中です。どうぞお気軽にエントリーください。 (「ゲネのブログを見た」とおっしゃっていただければ嬉しいです。)

初心者「どの言語から学ぶといいですか?」

経験者の多くは「やりたいことによる」と答えるでしょう。

でも、初心者はそもそも何ができるかわからないから聞いているんですよね。

というわけで、今日はメジャーな言語の特徴を挙げつつ紹介していきたいと思います。

言語は武器である

アクションゲームの醍醐味といえば、キャラメイクと並んで武器選択にあるでしょう。

大ぶりな両手剣で辺りを薙ぎ払うのか、スナイパーとして物陰から一人ずつ狙い撃つのか。

使用する武器によってジョブ(職業)が決まるゲームも多いです。

プログラミングにおいて使用する言語も同じで、その言語が使いやすいから使うのか、何か目的があってその言語を選ぶのかは人それぞれ。

プログラミングを始めたい人、他の言語の特徴も見てみたい人はぜひ下記のフローチャートをやってみてください。

あなたには何が向いている?

http://carlcheo.com/startcoding より

個人的にこれが一番わかりやすいと思っている、言語フローチャートと言語の特徴全部盛り!みたいな画像です。

元記事に飛んでも少し小さめの画像ですが、フローチャートの方はスマホで拡大するなどしてご覧ください。

ロードオブザリングに例えられた各言語の特徴は以下に文章化してお伝えします。

Python

難易度:★☆☆☆☆

人気度:★★★★☆

例えるならエント(樹の守護者にして強力な賢者)。小さなホビット(プログラミング初心者)にプログラミングの概念を教える手助けをしてくれる。ウィザード(コンピュータサイエンティスト)の研究の手伝いをしてくれる。

初心者に最適なプログラミング言語として広く知られており、習得が最も容易。

また、人工知能などの科学技術・学術分野で広く用いられている一方で、Pythonの代表的なフレームワークであるDjangoをつかってWebサイトを構築することができる。

私が主に使っているPythonはかなりの高評価でした。入門言語としての顔をもつ一方で、ライブラリの豊富さを活かしてWeb開発から科学計算まで行えるのが魅力ですね。

最近は『人気プログラミング言語ランキング』として検索すると、どのランキングでも高い順位に入っています。

できることが幅広い上に習得難易度は易しめ。コンパイラも必要ないので、初心者にオススメしたいNo.1言語です。

Java

難易度:★★★☆☆

人気度:★★★★★

例えるならガンダルフ(誰にでも平等に力を貸した魔法使い)。平和を求め、様々な人と協力して働く(どこででも動く)。

移植性の高さから、全てのOS、プラットフォームそしてデバイスにおいて非常に人気のある言語。世間で最も需要があり、最も報酬の高いプログラミング言語のひとつ。

スローガン:一度書けばどこででも動く

有名なJavaも高評価です。有名な理由は、OSやプラットフォームを選ばないところから使用者数が増えているところにありそうです。最も求人数が多く、給料も高めというところが魅力ですね。

最近は他の新興言語にやや押されがちですが、それでも人気プログラミング言語には毎年上位に入ってきます。

C

難易度:★★★☆☆

人気度:★★★★★

例えるなら強力な指輪そのもの。そのパワーは皆がよく知っている。皆がその力を手に入れたいと願っている。

数あるプログラミング言語の共通語であり、世界で最も古く、最も幅広く使われている言語である。組み込みシステムやハードウェアのプログラミング言語として一般的。C++に内包されている。

コンピュータサイエンス黎明期に現れた言語でありながら未だ第一線で使われているC言語。ハードウェア制御をするならマストで習得したいところです。

ポインタなど最初は理解が難しい概念も多くありますが、多くの言語の大元になっているので、最初の言語に選ばなくても一度触れておくことを個人的にオススメします。

C++

難易度:★★★★☆

人気度:★★★★★

例えるならサルマン(強大な魔術師)。皆が彼のことを善人だと思っているが、ひとたび彼のことを知れば、彼が求めているのは善行ではなく権力だということに気づくだろう。

C言語のより複雑なバージョンで、その分より多くの機能を備えている。ゲーム、産業用、パフォーマンス重視のアプリケーションの開発などに広く使用されている。C++を学ぶことは、車の製造から組み立て、運転の仕方すべてを学ぶようなものなので、指導してくれるメンターがいる場合にのみ学習することを推奨する。

競プロでは主力言語として重宝されているC++。非常に高速な動作が魅力ですが、習得言語は高めのようです。

JavaScript

難易度:★★☆☆☆

人気度:★★★★☆

例えるならホビット。読みやすく、やさしいがWebブラウザでは遅い。

JavaJavaScriptはCarとCarpetと同じくらい似ている」- Greg Hewgill

クライアント側のWebスクリプトとして最も一般的な言語。フロントエンドをやるならHTMLやCSSと同じくらい必ず触れるべき。サーバーサイド言語のnode.jsが伸びているため、今でも最も盛り上がっている言語のひとつ。

Javaと混同されがちなJavaScript。オーストラリアとオーストリアくらいエンジニア界ではネタにされています。

登場した当初はフロントエンド言語として扱われていたのですが、近年はサーバーサイドで動くプラットフォームが多く登場し、盛り上がっていますね。用途が幅広いので、身につけていて損はない言語です。

私はJSとはなかなか仲良くなれないのですが、いつか習得したいと思っています。

C

難易度:★★★☆☆

人気度:★★★★☆

例えるならエルフ。美しい言語だが、自分たちの王国に閉じこもるエルフと同じようにマイクロソフトのプラットフォームでしか動かない。

.NETフレームワークを使用したWebサイトやWindowsアプリケーションを作成する企業でよく使用されている。ASP.NETによるWebサイト構築にも利用可能なマイクロソフトが提供するWebフレームワーク。基本的な構文や一部の機能はJavaに似ており、Windowsプラットフォームのみをターゲットとする場合は、Javaの代わりにC#を学ぶとよい。

C#はあまり馴染みがない言語のように思えますが、Unityという開発プラットフォームでゲームを作る際に必要になってくる言語です。

しかし、用途が限られているため最初に学ぶ言語としてはあまりオススメできないかもしれません。

Ruby

難易度:★★☆☆☆

人気度:★★★☆☆

例えるなら人間。非常に感情豊かな言語で、Rubyの開発者の中には、自分たちが優れていて地球を支配しなければいけないと考えている人もいる。

RubyのWebフレームワークはRuby on Railsであり、かなり有名である。物事を完遂させることに重点を置いており、楽しくて生産的なコーディングのために設計されている。楽しい個人プロジェクト、スタートアップ、開発に最適。

出ました、Ruby。開発者がまつもとゆきひろ(Matz)さんという日本人であることでも有名なRubyですが、WebフレームワークであるRuby on Rails(RoR)人気に支えられているところがあるでしょう。比較的小規模の開発に向いている印象があります。

オブジェクト指向言語ですが習得難易度は易しめ。Web系の開発を目指すなら第一に選択しても良いかもしれません。

PHP

難易度:★★☆☆☆

人気度:★★★★☆

例えるならオーク。ルールなんてお構いなし、予測不可能。開発者にとってコードの管理は大きな頭痛の種だが、それでもまだ地球上で最も人気のあるWebスクリプト言語である。

小規模でシンプルなサイトを短時間で構築するのに適している。ほぼ全てのWebホスティングサービスで、低価格で利用できる。

PHP、まだまだ現役の言語ですがすごい言われようですね…。PHPフレームワークといえばLaravelあたりが有名です。

メリットは導入が簡単、低コストというところですが、メンテナンスの面倒さから言えば大規模な開発には向いていないでしょう。

しかし、Webアプリケーションがサーバーサイドで何を行っているかを理解するのにはオススメです。インフラエンジニアの第一歩としてはいいかもしれません。

Objective-C(とSwift)

難易度:★★★☆☆

人気度:★★★☆☆

例えるならスマウグ(貪欲なドラゴン)。孤独でお金が大好き。

AppleMac OS XiOSで使用している主要言語。iOS開発者になりたい場合にのみ選ぼう。ただし、2014年に後継となる言語Swiftが発表されたため、一から習得を望む場合はSwiftを検討すべき。

最近はSwiftに置き換わりつつあるObjective-C

SwiftはiOS開発に必須の言語ですが、逆に言えばiOS開発くらいしか用途がありません。

iPhone向けアプリをつくりたいという人は多いかもしれませんが、iOSアプリは自分だけが使うといった限定公開はできず、必ずApp Storeへ登録しなければいけません(しかも審査アリ)。

さらに開発者としての登録費用として、日本円で毎年1万円と少しかかります…(この点が”お金大好き”に繋がったのかも?)。

お試しや遊びで個人開発をするには少し敷居が高いと言わざるを得ません。

まとめ

人気や注目が集まっているプログラミング言語は、毎年RedMonkなどからランキングが発表されています。

毎年不動の人気を誇る言語も多いのですが、人気が急上昇している言語は10年先に主流になっていることが多いと言われており、毎年チェックして動向を把握してみると良いでしょう。

しかし、人気があるから誰にでもとっつきやすいというわけではありません!

用途が限られていたり、他の言語を習得済みで慣れている人に人気の場合もあります。

気になる言語がどういった特徴を持っているのかを調べること、そしてできれば、ふわっとでもいいのでこういうことができたらいいなと自分の中で考えを持っておくことが大事です。

PR

株式会社スマレジTechFarm事業部ではWebエンジニアを募集中です!

corp.smaregi.jp

PythonやRustなど最新の言語の案件も多数あり、未経験含む様々なご経験をお持ちの方にご活躍いただける会社です。 こちらのフォームからエントリーしていただき、就職が決まれば10万円を進呈中です! カジュアル面談も随時受付中です。どうぞお気軽にエントリーください。 (「ゲネのブログを見た」とおっしゃっていただければ嬉しいです。)

競プロ強者になりたい

なりたくないですか?

競プロって何?

競技プログラミング、略して競プロをご存じでしょうか。

「Hello, Worldという文字列を10回繰り返して表示するプログラムを書いて提出せよ」

「変数aおよびbが整数型で与えられる。このとき、a + bの答えを表示するプログラムを書いて提出せよ」

というような、プログラミングやアルゴリズムに関する問題が出されるので、任意の言語でコードを書き、提出し、テストケース(2問目であればマイナスの数を代入してもちゃんと計算できるか等)をクリアすれば点がもらえるという競技です。

競技と名前がついていますが、試験のように○月○日×時から、と実際に時間を区切って行われる本格的なオンラインコンテストから、好きなときに問題を解いて気楽にチャレンジできるサイトまで様々あります。

最近はメジャーな競技になりつつあり、大きなコンテストで高得点を取ることができればプログラマとして高待遇のスカウトが来る仕組みも存在します。

…と大きな夢を持つのも楽しいのですが、プログラマであれば押さえておきたい基本的なアルゴリズムが多く出題されるため、競プロの勉強をしておくだけでも腕は上がり、速く正確なプログラミングができるようになるでしょう。

最短最速で強くなりたい

コンテストでは現在の自分が全参加者の中でどれくらい強いかという数値がレートとして算出されます。参加した回の出来によって上がったり下がったりします。

レートは帯域によって色付けされており、灰色から始まって最高位は、通称レッドコーダーと呼ばれ、上位0.2%とも呼ばれるトップ層はツワモノ揃いです。

そんな競プロを気軽に始めるには何から始めればよいのでしょうか。

①使用する言語を決める

使用する言語を決めましょう。

PythonJavaなど、既に馴染みのある言語があればそれで挑むのもよいでしょう。

しかし、CやC++は実行時間が非常に高速であり、競プロでは実行時間の短さも評価対象になるため、今馴染みのある言語が特にないという人はこれを機にC++を学習してみるのもよいのではないでしょうか。

個人的には、CやC++と同程度に高速と言われているRustが気になっており、AtCoderという大手プログラミングコンテストサイトではRustでも挑戦することが可能であるため、Rustで競プロに挑んでみたいと思っています。Rustは非常に難しいそうですが…

アルゴリズムを学ぶ

アルゴリズムとは、ものすごく大雑把に言うと『計算のやり方』です。

有名なアルゴリズムとしては、ソートアルゴリズムと呼ばれる、雑多に並んだものを数の大きいものから小さいもの順(あるいは小さいものから大きいものの順)に並べる方法があります。

昔から色んな方法が考えられてきて、効率が悪いものから条件によっては最速といわれるものまで様々あります。

qiita.com

ソートアルゴリズム以外にもプログラミングに使えるアルゴリズムはたくさんあり、これらを知っておくとかなり効率のよいプログラムが書けるのではと思います。

最近プログラミング界隈で話題の書。とてもわかりやすくまとまっています。

www.amazon.co.jp

競プロをやるならこの本と呼ばれる鉄板の本。通称『蟻本』

www.amazon.co.jp

プログラミングに数学が必要という意見は、こういったアルゴリズムの考え方が多少なりとも必要という点から来ているのだと思います。

③手を動かす

基本を学んだところで、実際に問題を解いてみましょう。

まずは時間制限がなく、いつでも試せて問題が豊富なAIZU ONLINE JUDGESがおすすめです。

(デフォルトでは英語表記ですが、日本語切り替えがあるので安心)

judge.u-aizu.ac.jp

他の人の書いたコードも見ることができるので、大変勉強になります。

④コンテストで腕試し

自信がついてきたなと思ったら!オンラインコンテストに参加してみましょう。

日本ではAtCoderが今のところ一番有名で活発なサイトかと思います。日本発のサイトなので日本語にもバッチリ対応しているところがいいですね。

AtCoderでは初級者向けのABC(Atcoder Beginner Contest)から上級者まで楽しめるAGC(Atcoder Grand Contest)まで毎週末何かしらのコンテストが開かれており、たまに企業が主催しているネームドコンテストもあります。

atcoder.jp

ゆっくり楽しむ?それとも極める?

「〇〇という言語をちょっと触ってみたいな」

「プログラミング力をもっと上げたい!」

そんな思いから一歩踏み出すとっかかりとして、競技プログラミングに触れてみるのも良いと思います。

競プロはやり始めたら高レートを目指さなければならない、というわけではありません。

個々人で楽しめるペースで始めましょう。

Have a nice programming✨

参考になるページ

レッドコーダーが教える、競プロ・AtCoder上達のガイドライン【初級編:競プロを始めよう】 - Qiita

紹介した『「アルゴリズム×数学」が基礎からしっかり身につく本』著者の方の記事です。

この記事を書かれた時点で高校生でレッドコーダー、現在は大学生だそうですが、大学生で書籍を出版してベストセラーというすごい方です…

PR

株式会社スマレジTechFarm事業部ではWebエンジニアを募集中です!

corp.smaregi.jp

PythonやRustなど最新の言語の案件も多数あり、未経験含む様々なご経験をお持ちの方にご活躍いただける会社です。 こちらのフォームからエントリーしていただき、就職が決まれば10万円を進呈中です! カジュアル面談も随時受付中です。どうぞお気軽にエントリーください。 (「ゲネのブログを見た」とおっしゃっていただければ嬉しいです。

Pythonで開発を行う前に

こんにちは。ゲネです。 今日はPythonで開発を行う前に、仮想環境をつくっておくと良いという話をします。

Pythonで色んなことをしたい!その前に

Pythonは非常に強力なライブラリを備えた計算言語としての他に、フレームワークを用いてWebアプリケーションの開発やゲーム制作も(!)できるという一面があります。
特にWebアプリケーションフレームワークのFlaskやDjangoは皆さん聞いたことがあるのではないでしょうか。
しかし、普通にpipをつかってパッケージを入れていると、同じパッケージの別のバージョンをプロジェクトによって使い分けたい、たくさん入れていると何が入っているのかわからなくなって管理ができなくなるといった問題が発生してきます。
そこでvenvを使うことで、pipによるパッケージの導入状態をプロジェクトごとに独立させることができます。

仮想環境の作成

先にプロジェクトディレクトリを作成しておきましょう。

mkdir [project dir]

その後、作成したプロジェクトディレクトリに移動し、その中でvenvを使って仮想環境を導入します。

cd [project dir]
python -m venv [new env name]

仮想環境を置くディレクトリの名前は好きにつけることができますが、使用するたびに後述のアクティベートを行わなければならないので短い名前の方が便利でしょう。
venvとするのが一般的なようです。python -m venv venvとなるわけですね。

ひとつのプロジェクトで複数の仮想環境を使い分けたい場合

ひとつのプロジェクト内で複数の仮想環境を使い分けたい場合、仮想環境作成時のコマンドは

cd [project dir]
python -m venv [new env name]/[sub env name]
python -m venv [new env name]/[sub env name2]
...

となります。

仮想環境のアクティベート

開発時など仮想環境を有効にする場合には、アクティベートを行います。
これもコマンドラインから実行します。

Linux, Mac

$ source [new env name]/bin/activate

Windows

$ .¥[new env name]¥Scripts¥activate

無事アクティベートされると、プロンプトの先頭に環境名が表示されます。

([new env name])$

この状態でpipコマンドを実行し、仮想環境上で好きな環境構築をしていきましょう。

作成した環境にインストールされているパッケージの確認

作成した環境をアクティベートした状態で、

([new env name])$pip freeze

で確認できます。

仮想環境から抜ける

([new env name])$ deactivate

で通常の環境に戻ることができます。

参考記事

PR

株式会社スマレジTechFarm事業部ではWebエンジニアを募集中です!

corp.smaregi.jp

PythonやRustなど最新の言語の案件も多数あり、未経験含む様々なご経験をお持ちの方にご活躍いただける会社です。
こちらのフォームからエントリーしていただき、就職が決定すれば10万円を進呈中です!
カジュアル面談も随時受付中です。どうぞお気軽にエントリーください。
(「ゲネのブログを見た」とおっしゃっていただければ嬉しいです。)