大学生がプログラミングの前に学ぶべきこと

アイキャッチ画像(univ-students-programming)

「プログラミングを始めたいんだけど、どの言語から入ればいい?」

プログラミングをしている人であれば、誰もが一度は聞かれたことのある質問です。

私も在学中に同期や後輩からこの質問を受けることがあったのですが……この質問をしている方はまだプログラミングを学ぶべきではないと私は思います! 昨今プログラミングを学びたがる学生が増えているように感じるのですが、私はその風潮に何とも言えない違和感を感じています。

この記事では大学生がプログラミングの前に学ぶべきことについて、私の考えをまとめました。

私のプログラミング歴

「大学生はプログラミングを学ぶべきではない!」と偉そうなことを言っていますが、私自身は高校1年生の頃にプログラミングを始めていました。当時はまだWordやPowerpointを使ったことがある程度で、タッチタイピングすらできない平々凡々な高校生でした。

それが何の因果か、同級生がパソコン同好会を立ち上げたいということで、いきなり同好会の副部長を務めることになったのです。最初はひたすらタッチタイピングの練習から始まり、C言語の学習などコツコツ地味に日々を過ごしていましたが、卒業までにはパソコン甲子園やMicrosoft Imagine Cupで入賞できる程度にはなっていました(チーム戦でなければ到底無理だったと思います)。

大学1、2年生では医学部へ進学するために成績が必要だったこともあり、情報系の単位をいくつも取りました。その過程で3Dプログラミングやら組込みシステムやら、分野を問わず学べたことは良い経験になりました。

医学部進学後(3年生以降)は民間企業のインターンで医療関連データの解析を行ったり、医療系ベンチャーでフルスタックエンジニアとして一からシステムを組み上げたりと、実戦経験を積む機会が豊富にありました。また、医学部生という"IT業界の素人"の立場で仕事をしていく上で、多少信用を得られるかと思いデータベーススペシャリストとシステムアーキテクトも取得しました。

プログラミングだけでは何もできない

私は決して優秀なエンジニアではありませんが、これまで様々なIT分野に手を出してきた経験からこれだけははっきりといえます。

プログラミングだけでは何もできません。

それを分かっていない大学生があまりにも多すぎるように感じます。プログラミングだけを学んでも、大きな問題を解決するシステムを構築することはできません。それどころかパソコンが壊れたときの対処や、インターネットが繋がらないときのトラブルシューティングすら、ままならないでしょう。

プログラミングをなぜ学びたがるのか

プログラミングを学びたがる人たちの多くは、黒い画面でカチャカチャ英数字を打ち込む行為、即ちコーディングができるようになりたいと考えているのかもしれません。誤解を恐れずに言うと、あれはただの作業です。料理で例えるならば、食材の調理の工程ですね。

料理教室に通う人は、ただ大根のかつら剥きやそばの菊練りができるようになりたいのではなく、料理ができるようになりたいと思っているはずです。

プログラミングも同じです。プログラミングを学びたいと考えている人たちは、小手先のコーディングではなく、本当はITを活用できるようになりたいと考えているのではないでしょうか。

美しいコードという概念もありますが、それはそのコードの発想に価値があるのであり、実際に文字を打つ行為はやはり作業です。

プログラミングの前に学ぶべきこと

ITの全体像を学ばずにプログラミングだけを学ぼうとすることは、誰にいつどんな料理を提供するのかも考えずにひたすらキャベツのみじん切りを練習するようなものです。

プログラミングをする上で特定の言語を使えるようになるということは、実はとても簡単です。基本的な事項であれば、1週間もあれば習得できるでしょう。ですので一旦プログラミング学習のことは頭の脇に置いて、ITの全体像を自分なりの見方でざっくり捉えることを優先してみてください。

しかしそのために学ぶべきことはあまりに多いです。そこでこの記事ではたった1つだけ、学び方を知るために必要なことのお話をします。それは「今自分が見ている世界の枠組みを考える癖をつける」ということです。

世界の枠組みを考えるということ

プログラミングに対する熱が強すぎると、どうしても画面の中だけに意識が行きがちです。でも少し目を引いてみると、コーディングしているテキストエディタや、それを支えているOSの存在が意識されます。さらに視点を引くと、作業をしているパソコンが見えてきますね。ここで物理的な面に注目して視点を逆に狭めると、ディスプレイやスピーカーなどのデバイスが見えてきます。さらに視点を狭めていくと、ICチップやコンデンサ、抵抗などの電子部品に行きつきます。このようにITの世界には実体のないものから実体のあるものまで、様々な要素があるのです。

今目の前にあるものはスマホなりパソコンなり1つですが、それに対する認識の枠組みは無数にあります。「枠組みが無数にある」ということを知り、「今自分が見ている枠組みはどのようなものか」ということを考える癖を身につけて初めて、ITの全体像を学ぶためのスタートラインに立てたといえます。

とは言え話が抽象的すぎるので、最初の学習のとっかかりとしてはコンピュータネットワークについて学んでみることをおすすめします。

(1)コンピュータ

コンピュータを見るときの基本的な枠組みとして、階層性のある世界を想像してみてください。コンピュータ上で何か操作をするときは、今自分のいる世界がどの深さなのか、その世界では何ができるのかを考えることが重要です。

例えばスマホ用にゲームアプリを作るとき、普通はアプリの層だけで何とかなります。しかし位置や傾きなどの情報を利用したい場合、それらを管理しているOS(より深い層)と連携をする必要があるためアプリの層だけではどうにもできません。

また何か非常に時間のかかる処理があった場合、それがアルゴリズム(処理方法)の問題なのか、純粋にCPUの物理的な限界(最も深い層)による問題なのかによって対処法は全く異なります。

このようにコンピュータには様々な層があり、特定の深さでしかできないことが存在します。最初はどんな層があるのかさっぱり分からないと思いますが、今自分はどの層を見ていて、その層でできること・できないことは何なのか、層の間の繋がりはどうなっているのか、といったことを考え続けていると、いつか霧が晴れたようにコンピュータの姿が見えてくるでしょう。

下の本は実際にコンピュータを0から作ってみようという、恐ろしいコンセプトの本です。初学者が手を出すものでは全くありませんが、将来もし興味が沸いたらぜひチャレンジしてみてください。私は面倒だったので途中で止めてしまいました笑

(2)ネットワーク

上で説明した層は1台のコンピュータに関するものでした。しかしコンピュータは基本的にネットワークに接続して使用するものなので、ネットワークにおける層についても学んでおくと良いでしょう。可能であればドメインとは何か、パケットとは何かといった抽象的なことだけではなく、同軸ケーブルや光ケーブルの特性といった物理的なレベルのことまで把握しておくと、より深い理解が可能です。

こちらについては超絶お薦めの本があります。現代のインターネットにどのような要素があって、どう繋がっているのかが1冊で理解できる良書です。

※シリーズ本として『プログラムはなぜ動くのか』や『コンピュータはなぜ動くのか』がありますが、こちらはあまりおすすめできません。私は両方とも呼んだことがあるのですが、上の『ネットワークはなぜつながるのか』と異なり、層と層との関連性の説明が乏しい印象を受けました。

技術面で習得すべきこと

ITの全体像について自分なりの見方がざっくりできたとして、実際に使えるものを作れるようになるためにはコーディングの技術が欠かせません。この段階に来てやっとプログラミングらしいことを行えるわけですが、そのための基礎となる技術を3つご紹介します。

(1)タッチタイピング

タッチタイピング自体に価値があるというよりも、今後の学習効率・作業効率を大幅に向上するため、まず習得しておくべきです。

プログラミングの勉強をしていく過程である程度できるようにはなるかもしれませんが、自己流の悪い癖が着いてしまうことのないようご注意ください。できれば実際にプログラミングの勉強を始める前に、正しい指の使い方(ホームポジションなど)を学んでおきましょう。

こちらの『ひよこでも出来るタイピング練習講座』は指の使い方から学習できる(もちろん無料)ので良さそうです。

(2)検索

これは私の感覚ですが、ITに強い人は検索力が圧倒的に高いです。「検索なんてGoogleに文字を打ち込むだけじゃん…」と思うかもしれませんが、その本質は問題分析能力です。ITに強い人は、コンピュータやネットワークに限らず、IT関連のモデルが頭に入っているため、自分が分からないことは何か、何が分かれば問題を解決できるか、ということが明確に分かっておりピンポイントで検索ができるのです。

検索力は「枠組みを考える癖」が身についていれば自然と上がるものなので、自分なりの枠組みを日々アップデートすることを考えてみてください。

(3)英語

プログラミングに関する学習は日本語でも問題なくできますが、ドキュメント(説明書)や最新の情報にアクセスするには英語が必須です。またプログラミングを行う上で避けられないエラーメッセージは英語で表示されるため、学んでおくととても役に立ちます。

文学を嗜むわけではないので、中学レベルの英語があれば十分です。専門用語については都度調べれば良いと思います。

結局どの言語を学ぶべき?

言語は本来目的に応じて選択するべきものです。そのため自分が何がしたいのかをはっきりさせないとおすすめの言語は選べません。ただ正直に言うと1つできるようになれば他の言語を覚えるのは容易なので、あまりに独特なもの(LispやWhitespace)でなければどれでも良いです。とりあえずPythonを学んでおけば実用的にも良いのではないでしょうか。下の本は「ゲームを作る」というはっきりとした目的があり、初心者でも楽しく勉強できます。Kindle Unlimitedだと無料な点もおすすめポイントです。

しかし、ITに関して理解を深めたいということであれば話は別です。ぜひC言語から学び始めてみてください。Pythonなどのモダンな言語は人間に分かりやすい形で作られているため、とても簡単です。これはコンピュータの操作という複雑な作業をPythonが肩代わりしてくれているからなのですが、C言語は細かいところまでプログラマ自身が考えて指示を出さなければならないのです。

そのため、はっきりと言いますが学習がとても面倒です。しかしコンピュータの仕組みやプログラミングの基本的な考え方も同時に修得できるので、結果的には効率の良い勉強になると私は思います。

苦しんで覚えるC言語がおすすめ

C言語の本は沢山出ていますが、わざわざお金を出して買う必要はありません!

ありがたいことに『苦しんで覚えるC言語』というサイトで無料で学ぶことができます。こちらのサイトは高校1年生の私が初めてプログラミングを学習したときにお世話になったサイトです。

全部で20章ありますが、スピーディーに行けば1週間もあれば終わるでしょう。

ちなみにですが、初心者の方は15章と17章でつまずくかもしれません。これは「ポインタ」と「ファイル」という新しい層の概念が突然現れるためです。ここで感じる壁を乗り越えるキーが正に「枠組みを考える癖」となりますので、ぜひ自身でその感覚を体験してみてください。

Web上で読み進めるよりも本が良い!という方向けに一応書籍化されたものもご紹介します。ただこの本ですが細長い形をしているせいで、ページを開いたまま固定することに苦労します。そのため個人的にあまりおすすめはしません。

オンラインコースについて

最近はプログラミングのオンラインコースが色々とあるようですが、私は一度も利用したことがないので評価できません。細かい情報がお伝えできず申し訳ないのですが、そういったものを利用しなくても問題なくプログラミングはできるようになれます。プログラミングをどこで学ぶかということは本当に小さな問題なので、お好きな方法を選択していただければと思います。

ただどこで学ぶにしても、その勉強で「枠組み」について何か気づきを得られるかどうかは意識してみてください。

まとめ

プログラミングは重要な技術ですが、そもそもプログラミングがITという大きな世界のごく一部だということを知ってから勉強しても遅くはありません。

そのために学ぶことは多数ありますが、「今自分が見ている世界の枠組みはどのようなものか」を常に考えながら、まずはコンピュータとネットワークについて学んでみてください。すると段々と「自分は何を知らないのか」「何を知れば何ができるようになるのか」が見えてくるようになります。

最初は自分が何を勉強しているのかすらさっぱり分からない時期もあるかもしれませんが、そこを乗り越えると急に楽しい世界が開けるので、ぜひ諦めずに挑戦してみてくださいね。