新卒の営業に苦Cでプログラミングに触れてもらった

この記事は クラウドワークス [Advent Calendar 2023](https://qiita.com/advent-calendar/2023/crowdworks) シリーズ1の20日目の記事です。

ある日の事。

<b>はると・稲ちゃん「千葉さん、プログラミング教えてください！」
千葉「ええやで。」</b>

そんな軽はずみな経緯から始まった、プログラミングに触れてもらった奮闘記です。

# はじめに

私はクラウドテックというサービスで営業をしております。

https://crowdtech.jp/blog/9591/

前職はシステムエンジニアをしていたので、新卒のはるとと稲ちゃんからプログラミングを教えてほしいと声がかかりました。
週末は趣味程度ですがサービス開発に勤しんでおります。

そして今回、二人にプログラミングに触れてもらうにあたって、
教材として選定したのは…

<b>[苦しんで覚えるC言語](https://9cguide.appspot.com/index.html)（通称：苦C）</b>です！

選定理由は、私が[42 Tokyo](https://42tokyo.jp/)というエンジニア養成機関で学んだ過去があるためです。
（C言語の特徴等は割愛いたします。）

## 今回のゴール
『<b>一か月でPaizaのDランク通過</b>』
こちらが今回のゴールでした！
結果については順を追って（手続き型言語だけに）。

そして、一緒に学んだ二人にはたくさんの学びがあったと思うので、
『<b>教え</b>』という形で共有していきます！

## 開発環境
OS: Linux/Ubuntu
言語: C言語
コンパイラ: GCC
テキストエディタ: Vim

WSL2にUbuntuをインストールして開発環境を構築しました。

# Week 1
![はるとの一日目のコメントが記載されたSlackメッセージのスクリーンショット](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/623091/0cebcef6-60e0-e4c8-bbb4-65ee3212d4e1.png "はるとの一日目のコメント")

苦しんで覚えるC言語というくらいですから、彼らも覚悟はあると思います。
（環境構築では私も一緒に苦しみました…Macのありがたみ…笑）

一週間目では、LinuxコマンドとC言語についての基礎を学びました。
苦Cの第1部:基礎編
1章(世界最小のプログラム)
2章(プログラムの書き方)
3章(画面への表示)
4章(数値の表示と計算)
まで進めました。

## 教え①: 分からないことは調べる！
環境構築の段階で多くのエラーや予測しない挙動が見られました。
今後、プログラマの世界に踏み入れた際に教訓として覚えてほしいのは、
まずは自分で調べて修正できる力が必要です。

今回の環境構築での私の姿をみて感じてくれたと思います。
はると・稲ちゃん「（<b>千葉さんめっちゃ調べてるじゃん…！</b>）」

## 教え②: まずはlsコマンド
今回はLinuxコマンドについても軽く触れてもらいました。
ディレクトリ構造やファイルの特性についての理解などはコマンドを通して理解できるものだと考えています。
息抜きにslコマンドについても知ってもらいました笑

## 教え③: `#include <stdio.h>`はおまじないじゃない
<b>稲ちゃん「とりあえず`#include <stdio.h>`覚えればいいんすね～」</b>
<b>千葉「意味のない記述はないんだよ。それと同じで意味のない記述は今後しないようにね。」</b>

printf()関数を使うときに`#include <stdio.h>`を使うことは理解できたが、それ以外のヘッダーファイルについてはイメージが沸きにくいです。
試しにatoi()関数を実行したときに、コンパイルエラーが発生します。
そう、この時はじめて、`#include <stdio.h>`以外のヘッダーファイルを知っておまじないではないことを理解できたのではないでしょうか。

# Week 2
![稲ちゃんが作ったplus5関数が記載されているSlackメッセージのスクリーンショット](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/623091/030bc04e-d2d6-df3a-097a-7e40dd2f7681.png "稲ちゃんが作ったplus5関数")

実はこの週は、はるとと稲ちゃんが二人ともインフルエンザにかかってしまいました…
早速雲行きが悪くなってきましたね(笑)

とはいえ、苦Cの5章(数値の記憶と計算)まで進めることができました。

## 教え④: それでもプロジェクトは進む
<b>半年前のはると「千葉さん1.0人月って何ですか？」
現在のはると「1.0人月の意味が身にしみてわかりました…！」</b>

そう。
この世はとても残酷でインフルエンザで休んでも、プロジェクトの納期は休んでくれないのだ。
営業ではあまり感じられない納期という概念にも奇しくも触れることができました。

私も、前職に入社したての頃は意識できていませんでしたが、当時の私と同じように理解できるようになってくれると嬉しいです。

## 教え⑤: 10年後の自分が読んでもすぐ理解できるコードを書く
<b>稲ちゃん「変数名って『ine』でもいいんですか？」
千葉「システム開発はチームで開発することも多い。変数名や関数名は誰が見ても理解できる命名をしよう！」</b>

どうしても一人でコーディングをしていると命名を怠ってしまいがちですね。
しかし、システム開発は複数人で行われ、さらに言えば1年後、5年後、10年後も使われているシステムであれば、あなたが書いたソースコードを他人が改修します。
そうなったときに、その変数名、関数名がどんな意味を持っているのかを理解しやすくするために考えてソースコードは書きましょう。

## 教え⑥: 数学とは意味の違う『=』
<b>はると「`value = value + 30`って意味わからないです笑」</b>

プログラマとしてソースコードを記述していると何ら違和感はないが、一般人が見るとおかしなことなのは一目瞭然…
いつの間にか代入の概念が身に染みていますが、初心者の頃はこうだったかもな～なんて思いました。

# Week 3
![if文を覚えて喜んでいるはるとのSlackメッセージのスクリーンショット](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/623091/87bc20e2-95ae-06de-026a-a98ad6e029ad.png "if文を覚えて喜んでいるはると")

新たな知識や技術を得られると嬉しいですよね！
完全に理解するまであと少し！笑

6章(キーボードからの入力)
7章(比較と判断)
8章(場合分け処理を行う)まで進めました。

## 教え⑦: ユーザーが善人だと思わないこと
苦Cの6章(キーボードからの入力)の『入力の恐怖』でも記述されているが、「1~100で入力してください。」と説明しても、それ以外の値を入力する人はいます。
今後、Webアプリの開発などでDBを操作するソースコードでは、この危険性を重々理解して取り組んでもらいたいものですね。

それにしても苦Cは初心者にも理解しやすい教材だなと改めて思いました！

## 教え⑧: 実行順序に気をつける
<b>稲ちゃん「80点以上の人は『合格』80点未満の人は『不合格』。ただし100点の人には『満点』はと…」
千葉「文章の通りに処理を書くと、100点の人の処理されないからね～」
稲ちゃん「???」</b>

if文を通して、はじめて実行されない記述があることに触れました。
if文は上から順に評価されるため、100点の人は80点以上でもあるため、順番を間違えると評価されませんね。
今後の開発、特に改修時には優先順位をきちんと理解して開発に努めてもらいたいです！

# Week 4
![コードの書き方についての質問のSlackメッセージのスクリーンショット](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/623091/735c8e61-3119-7ae4-9699-f266826011ad.png "コードの書き方についての質問")

さ、最終週ですね！
お察しの方もいるかもしれませんが4週目では、
9章(回数が決まっている繰り返し)
10章(回数がわからない繰り返し)
まで進めました！

## 教え⑨: 終わりがないのが終わり
これは私もたまにやってしまう、<b>無限ループ</b>です。
無限ループの怖いところは、終わりがないことがエラーではないことです。

## 教え⑩: 最適なのアクションをとる
今後、プロジェクトの納期に間に合わないことや、バグの対応に時間をかけすぎてしまうことがあるかもしれない。

そんな時にやらなければならないことは言い訳をすることではなく、とにかくやれることを愚直にやることです。
私も前任のプログラマのバグ修正をする際は、とてもつらかった思い出があります。

<b>弱音を吐いたらバグは修正されるのか？</b>
<b>言い訳をしたらユーザーは喜んでくれるのか？</b>

そんなことは決してありません。

# ゴールの結果発表！
今回の苦Cを通してのプログラミングに触れてもらうゴールは<b>『一か月でPaizaのDランク通過』</b>でした。

結果は…<b>受験すらできず！</b>

非常に悔C！

今回のプログラムでは下記までを網羅しようと考えておりました。
11章(関数の作り方)
12章(変数の寿命)
13章(複数の変数を一括して扱う)
14章(文字列を扱う方法)

せっかくなので、声をかけてくれたお二人の感想です。

<b>はると「完全に理解した。」</b>
<b>稲ちゃん「早くJavaScript教えてください。」</b>

## 反省
ゴールまで達成できなかった要因は、1か月という長い期間を設けてしまったことだと考えます。
全くの初心者に対して、どのくらいの理解度や習熟度を求めるべきかを想定できていませんでしたが、
同じように今回のプログラムを展開するとしたら、**2週間の短期集中のプログラムが最適**だと考えました。

# おわりに
最後にはるとと稲ちゃん、一か月一緒に頑張ってくれてありがとう！
Dランクとは言わず、もっと上を目指してこれからも頑張っていきたいですね。

それでは次回、<b>「新卒の営業をつよつよエンジニアにして社内転職させてみた」</b>でお会いしましょう～！