USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
Twitterで宣伝したところ、多くの現役エンジニアの方からも好評を頂いています。これからエンジニアを目指す方へのロードマップとなれば幸いです。
以下、全ての内容は私の所属団体・所属企業とは関係なく、あくまで一個人の意見になります。私の学習記録が皆様のお役に立てると幸いです。
最後に「高単価エンジニアになるためのロードマップ」無料案内あり
こんにちは、古里(@furusatojuku)です。
はじめに、超簡単に自己紹介をします。
では、タイトルにもある通り、
「USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話」を時系列に沿ってしていこうと思います。
これからフリーランスを目指す方、
IT企業に入社を考えているあなたが
自分を重ねながら読んで頂けると楽しめると思います。
序章 なぜこの記事を書こうと思ったのか
「フリーランスエンジニア」
近年やっと世間に浸透した言葉だ。ひと昔まえ、終身雇用は当たり前で、大企業に就職することは一種のステータスだった。
しかし、そんな時代も終わり「優秀な人材は転職する」ことが当たり前の時代となる。フリーランスエンジニアに高価値が付く現在、ネットを見ると「未経験でも年収400万以上」などと書いてある。
これに釣られて、多くの人がフリーランスになろうとITの世界に入ってきている。私もその中の1人だ。数年前、USBも知らない状態からITの世界に没入し、そこから約2年間、毎日勉学を行なった。他人の何十倍も努力した。そして、企業研修やIT塾で数多くの受講生の指導経験も得た。そこで私は、伸びるエンジニアとそうでないエンジニアをたくさん見てきた。そして、稼げるエンジニア、稼げないエンジニアを見てきた。
「成功する人とそうでない人の違いは何か?」
私が出した答えは、「量産型エンジニアか否か」である。
今のエンジニア市場には、量産型エンジニアが溢れている!!
ここでの量産型エンジニアの定義は以下の通りである。
多くの人がフリーランスエンジニアを目指す時代に中途半端な知識や技術力でこの世界に飛び込むと返って過酷な労働条件で働くことになる。そこで、エンジニアを目指すあなたがどう学習していくべきかを私の経験を交えて書こうと思った。
第1章 IT歴0-2ヶ月
「そうだ。フリーランスエンジニアになろう。」
「給料も高いし、フリーランスを目指そう!」
そんな理由からITの世界に身を投げたあなたは最初に何をすべきか?プログラミング言語を学ぶ?IT塾に通う?参考書を買う?
違う!!!
まずは、タイピングだ。これを聞いて、「そんなんできる」と思った人はこの部分を飛ばしてくれて構わない。私が最初にしたことは、オンラインタイピングゲーム寿司打でタイピングすることだった。
当たり前の話だが、タイピングの遅いやつは仕事が遅い。ブラインドタッチができないやつは、話にならない。エンジニアは1日に数万文字を打つこともある。タイピングは絶対に早くないといけない。タイピングもできないのにプログラミングの勉強をしている人は愚の骨頂である。サッカーで例えるならば、リフティングもできないのにシュートの仕方を学んでいるようなものだ。そんなんではいつまで経っても身につかない。
ブラインドタッチができるまでは、参考書を買う必要もない。ブラインドタッチできることがエンジニアとしての超最低レベルだ。
ちなみに、私は「毎日3時間」寿司打をした。1ヶ月半経ったころにはブラインドタッチができるようになっていた。これができない人は、ITは諦めよう。IT以外にもたくさんの仕事はある。わざわざ自分が苦手な領域で戦う必要はないだろう。IT以外にもたくさんの仕事はある。今になって思うが、1日3時間もする必要はなかった。1日1時間もすれば十分だと思う。
タイピングができるようになったら次になにをするか?
次は、プログラミング学習だ。
私はC言語を学んだ。近年は、PythonのようなC言語よりも勉強しやすい言語があるからそちらをおすすめする。(私は当時、Pythonなど知らなかった、それくらい情弱だった。)
なぜ、真っ先にプログラミング言語を勉強するかというと、成長のためにこれが手っ取り早いからだ。最初のうちは、ただの英語の羅列で、何も頭に入ってこない。コードを読んでも何が書いてるか全くわからない。だが、それでいい。毎日プログラミングを勉強して、わからないことが1つずつわかるようになってはじめITの楽しさがわかるようになってくる。学習すべき内容が途方もないほど多くあるように感じて、挫折してしまいそうになったことも何度もある。というか毎日挫折しそうになる。
ここで、この段階にあるあなたに一言、伝えたいことがある。
「あなたにセンスがないわけじゃない」
いきなり失礼なことを言うな!と思うかもしれないが、本当にそう感じる瞬間があなたにもきっとくる。「自分はセンスがない・向いていない」と感じたことのあるエンジニアが大半なのではないか?ちなみに、私は毎日感じている。できる人を見るほど自分の才能のなさに嫌になってしまう。
でも大丈夫。誰しもそうやって成長してきたということを強く伝えたい。そうやって、C言語の本が読み終わるくらいになったときに私は1つの決断をした。「そうだ。MacBookを買おう!」たいそうな理由はない。かっこいいから。エンジニアはみんな持ってるイメージだから。そんな理由で私は電気屋さんに行った。
今になって思うが、この決断は間違っていなかった。本気でエンジニアを目指したいあなたは今すぐMacBookを買ったほうがいい。理由はいつかわかる。信じてくれ。MacBookを手にした私は、感動した。なんと動きが軽いんだ。当時の私は意味もわからずメモリやストレージの増量したカスタム版を購入していた。これもまた今になって思うが、とりあえず高いものを買ったほうがいい。「やる気がでる」からだ。この時期は、これくらいの理由で十分なのである。
さて、こんなことをしているうちに2ヶ月が過ぎた。
第2章 IT歴3-6ヶ月
この頃には、少しずつプログラミングができるようになってきた。超簡単なプログラムなら自分で作れるようになってきた。さて、次に何をやるか。
答えは、「Linux」
Linuxがわからない人はまず「Linux とは」でググるとよい。なぜ、私がLinuxに行き着いたかというと「プログラミング 初心者」でググるとそういうことをどこかの誰かが言っていたからだ。間違いない。Linuxシステムをある程度理解することがエンジニアのスタートラインに立つための次のステップだ。
意外とこの部分が抜けている人もいる。Linuxを理解できている人は成長速度が全く違う。どこの企業とは言わないが、Linuxコマンドもろくに使えない中堅社員が多い所の研修をした際は本当に骨が折れた。IT企業に就職しといてLinuxコマンドも知らないようでは終わりである。さっさとやめてしまえとすら思う。そんな人のために「Linux標準教科書」というものがある。無料でダウンロードできるので、これを読むことをおすすめする。
Linuxシステムを理解するのは容易ではない。少なくとも2ヶ月はかかる。しかもある程度わかるくらいのレベルにしかなれない。完全に理解するのは稀有の天才でなければきっと難しいだろう。だが、ある程度理解することが大事だ。そしてこの頃からおすすめするのはネットワークに関する参考書を読むことだ。
特に「TCP/IPモデル」というものを理解することは非常に大切である。
今まで見てきた多くのエンジニアでネットワークに関する知識を身につけている人はほとんどいなかった。希少型なエンジニアになるためにまずはネットワークの知識を身に着けるべきだと私は思う。エンジニアが増えている現在、希少性を身につけることは大切だろう。
現に、今この記事を読んでいるあなたは、毎日インターネットを利用しているのにもかかわらずその仕組みを全く理解していないだろう。別にあなただけではない、現役エンジニアでも理解していない人は五万といる。
さて、こうしているうちに半年がすぎた。半年も続けられたら、あとはどうにかなる。だが、私の経験上、60%の人は半年も続かない。この記事を読んでいるあなたも60%の確率で半年しないうちに挫折する。じゃあ、どうすれば、モチベーションが保てるかについては、下のほうに書いておく。
第3章 IT歴7-12ヶ月
何事もまずは半年である。これくらいになってくるとネットにある記事を見ると半分くらいのことはわかるようになってくる。嘘だ。正確には、3割くらいだ。。。
さて、このレベルまでは多くの人が今述べたようなことをしていればあなたも到達できるだろう。では、ここから何が必要かを考えよう。私の答えは、
・基本的な技術を深く理解する
・自分で何か大きなプログラムを組む
この二つを実行することだ。まずは、「基本的な技術を深く理解する」に関して説明する。ここが本記事でもっとも大事だから注意して読んでほしい。もう一度言う、ここが一番大事だ。この時期まで本気で頑張った人は、毎日大量の情報量に触れてきたと思うその中で「ある程度理解できた」というものもあれば「なんかよくわからない」と言ったものが必ずあるはずだ。
この期間では、「なんかよくわからない」ことを「ある程度理解できた」のフェーズまで持っていくことが重要なのである。
この機会を失うとあなたはきっと生涯理解せずに過ごすだろう。なぜ、ここまで私がこれを推すのか説明しよう。
ITの世界を全て理解するには、途方もない知識量が必要である。「全プログラミング言語の全文法を覚え、全プロトコルを理解する。」こんなことは絶対に無理だ。
しかし、プログラミングやプロトコルには「基礎概念」が存在すると私は考えている。
Linuxやネットワークを理解することを私が薦める理由は、これらを学ぶことでITの世界の「基礎概念」を学べるからである。これらを理解すると、新しい知識に触れた際の理解の速さが大幅に向上する。高校時代の数学などでもよく言われていたが、「基礎力を鍛える」ことはITの世界においても大切なのである。したがって、私は初心者が「Ruby on rails」などのフレームワークをいきなり学習することはおすすめしない。確かに、即戦力になるしコーディング力を急激に高めることが可能である。しかし、これで成功するのは本当に能力のある人間だけである。
よくあるプログラミングスクールでは、カリキュラムの都合上このフレームワークをメインで教えることがどうしても多くなってしまう。別にスクールを悪く言うつもりはない。ただ、スクールだけでは理論上、あまりに不十分なのだ。だから、スクールに通えば一人前になれると考えているあなたはとても危険だと言っているのだ。小手先のテクニックだけを学んだ中途半端なエンジニア(量産型エンジニア)の誕生である。
私が講師をしていた中でよく見る駆け出しエンジニアは「Railsできます」「Spring Frameworkできます」と言う人たちばかりだ。しかし、実際に会話をしていると基礎的なLinuxコマンドを知らなかったり、ネットワークなどの知識を欠いている人がほとんとであった。
これでは、「量産型のエンジニア」になってしまう。
希少型エンジニアは、10%の人しか知らないような知識を持っているからこそ重宝されるのである。
あなたには、ぜひそうなってほしい。
では、次に「自分で何か大きなプログラムを組む」ということだ。これは、非常にいい経験になる。これに関しては、2ヶ月程度の期間で完成できるようなものにするとよい。「要件定義」「システム設計」「コーディング」「テスト」「保守」この一連の流れを自分1人ですることにより実際の開発現場で分業されていることを全て体験できる。そして、このタイミングで初めて、自分の好きなプログラミング言語を見極めるべきだ。
最初の1ヶ月目にC言語やPythonを勉強したかもしれないがそんなものは忘れてしまって構わない。自分が作るアプリはどの言語で設計するべきか調査し、その言語を1から学習するくらいの勢いで開発を進めることが大事なのだ。ちなみに、私は当時、大学の卒業研究だったこともあり45日間、毎日13時間開発に勤しんだ。必ず期限内に完成させなければいけない恐怖と少しずつ完成に近づいていく楽しさの両面を味わえたのはいい機会だったのかもしれない。
この結果、私はMacの低音熱で手のひらの皮が全部むけ、ストレスで皮膚病を発症したのは、今となっては笑い話である。(当時は、まじで発狂しそうだった笑)この過程を経た方は、もう安心していい。十分1人で学習できるレベルになってくる。
第4章 IT歴1年1-6ヶ月
この時期からおすすめすることは、
業務としてITに触れることだ。
断言するが、1年間しっかりと学習した人間は会社の中でなんとなくITを学んでいる人よりも間違いなく強い。すでに、フリーランスとして生きていく力のある人もいるだろう。おすすめするのは、ベンチャー企業のエンジニアである。社員として契約を結ぶのではなく、契約社員かアルバイトをおすすめする。まだ社員としてその会社で長く働くには勿体無い。
時給1000円程度の給料をもらいながら、勉強しながら働くことが望ましい。
特に、最近では、週末ワーカーのような副業を支援するエージェントがたくさんある。ぜひ、調べてみてほしい。
さて、企業で副業することが決まったあなたがすることは1つだけだ。
それは、その企業でもっとも優秀なエンジニアの真似をすることだ。
その人が使っているエディターの種類、使っているアプリ普段の情報収集の仕方、シェルの種類など全てを真似ることをおすすめする。
私の経験上、どんな企業にも1人はGAFAクラスのエンジニアが存在する。
GAFAの社員と仕事をすることは難しいがそのレベルの人間と仕事をすることはそんなに難しいことではない。その人の全てを吸収した上で、半年から1年ほど働いてみることがあなたを最高に成長させる機会となる。すると、優秀なエンジニアの何が優秀か、気づくことになるだろう。単純に頭がいい?経験が長い?ちがう。
優秀なエンジニアの優秀さは、基礎概念への理解の高さそしてググり力の高さにある。
基礎概念の大切さは、先ほど説明したからググり力に関して説明しよう。ググり力とは、「Google検索で何かを調べる力」だ。正確には、「あなたが何かに困ったとき、自分の欲しい情報に早くたどり着ける能力」これがググり力だ。優秀なエンジニアほど、ここが優れている。海外のサイトやいろんなところから的確に自分のほしい情報を取捨選択している。
あなたもきっとこれからエンジニアとして何万回とググることになるだろう。その一回一回のスピードをあげることが成長の速さに繋がると私は信じている。
では、どうすればググり力が成長できるだろうか。Mac ユーザー限定だが、アプリを紹介しておこう。(別に私は、ここの受け売りではない)
「Alfred」と呼ばれるランチャーアプリだ。ランチャーアプリって何?はほっておいて、とにかくMacユーザーはインストールしたほうがいい。検索の概念が変わる最高のアプリだ。詳しい使い方は割愛する。ちなみに、私はとあるベンチャー企業で約10ヶ月アルバイトをしていた。Web開発だったため、ここでフレームワークやSQLを学んだ。優秀なエンジニアに多くを教わる一方で勉強しながらお金が発生する最高の期間だった。
私はアルバイトで10ヶ月働いた後、別会社でなんと時給が2万円になった。
もちろん、これに関しては再現性がある訳ではない。たまたま運良く恵まれたと考えるのが一般的であるし、私もそう思ってる。しかし、こういうパターンがあることもあるというのは、夢があっていいではないか?
第5章 IT歴1年7-12ヶ月
1年半ほどしっかりと勉強すると、基礎的な知識、実務経験はそれなりに身に付く。では、次に何をすべきだろうか。ここからは、情報収集力が一番の肝である。
では、どうやって情報を収集するか?。これに関しては、RSSと呼ばれる機能やTwitter を利用するのがいいと思うのだが、やはりこれに関しても最も効率的なのは、優秀なエンジニアの真似をするということだ。
この世界で活動していたあなたは、有名エンジニアの一人や二人を知っているだろう。そんな人たちが発信する情報や、同じ職場の同僚と情報を収集しあうことが大切である。この業界では、間違いなく、情報の質が成長にかかせない。
そして、絶えず行うのが基礎概念の復習である。ここあたりから、「なぜその技術が作られたか」について考えるといい。具体的に言うと、例えば、なぜIPアドレスとMacアドレスという2つのものが存在するのか?などを考えて欲しい。全ての技術は、必要だから作られたのである。知識だけを学習するのではなく、その背景を考えると理解が深まる。
そして、「言語化」を意識して欲しい。IPアドレスってなんとなくわかるけど、自分の言葉では仕組みを説明できないというのは好ましくない。言語化できないことは、理解していないことと同じである。
この先たくさんの技術に触れていくと思うが、ほとんどの技術はすでにある技術の複合版または、ちょっと変えた版である。つまり、基礎概念がすべてわかっていれば、「大半の新しい技術は、実はたいして新しくない」のだ。
第6章 2年目からのあなた
2年間、1つのことをやりきったあなたは、もう希少型エンジニアになっているだろう。安心して、いろんな案件をもらってきていい。
だが、道のりはまだほど遠い。上位10%になるのには簡単だが、ここから9%、8%となるにはさらに3年、5年とかかってくる。私は、上位10%に入っている自信はあるが所詮その程度だ。世の中にはすごい人たちがたくさんいる。今日もそんな人たちの真似をしながら1日を過ごしている。
お金が稼ぎたいのならば、すぐにフリーランスになることをおすすめする。2年間頑張れたあなたなら、すぐにいい案件が見つかるだろう。基礎概念がしっかりわかっており、それなりにプログラミングができるエンジニアの単価はあなたが思ってるよりも高い。20代でも十分月30-60万くらいは余裕で稼げる。こんなのでお金が貰えるのか?と思うくらいには高い。だが、何回も言うが2年間勉学を続けられる人はさほど多くない。
ここからは、フリーランスの先輩としてアドバイスさせてもらおう。稼げるかどうかは、能力が高いというよりもどの案件を引き受けるかにかかっている。高給で簡単な仕事というのはいくらでもあるがそれを見つけるのが非常に難しい。では、ここからあなたはどうするべきだろうか。いい案件を見つけるため、成長するため、何をすべきであろうか。
答えは、「人脈」を作ることだ。
当たり前のことだが、ビジネスの世界では、人脈が何より大切だ。フリーランスというのは、いわば1人社長である。自分で自分を売り出していくためにも営業活動はしておくべきだろう。自慢ではないが、私は今まで転職エージェントを一回も使ったことがない。全て、知人の紹介で仕事を取ってきた。全員が私のようにできるとは思わないが(人脈も結局、運次第なところがかなりある)、ある程度IT業界の知人を作ることも大切だろう。
さらには、どの分野で働きにいくのか考えることも大事だ。多くの人がいるフロントエンジニアなのか、やや難易度の高いバックエンドエンジニアなのか、それともネイティブアプリエンジニアなのか、インフラエンジニアなのか、などなど、一言でエンジニアと言ってもたくさんの種類がある。
私のおすすめは、セキュリティの分野とWeb系のエンジニアだ。
セキュリティは希少性という観点から非常におすすめできる。これからの時代、多くのものがIoTでインターネットに結ばれるようになるとセキュリティエンジニアの需要が高まってくるだろう。Web系に関してはフリーランスとの相性がかなりよい。
第7章 まとめ
ここまで読んで頂いたあなたには最後もう少しお付き合いいただこう。
ひとまず、おめでとう。と伝えておく。90%の駆け出しエンジニアは、この記事を見かけてもここまで読んでくれすらしない。彼らは、役立つ情報かどうかの判定すらもできないということだ。私は、この記事に自信を持っている。他のどの記事よりも役にたつ真実を記述していると自負している。
そんな私の記事をここまで読めたあなたはある程度の才能はあると私は思う。おめでとう。
最初にも述べたが、「基礎概念」への理解の低いエンジニアが非常に多い。ほとんどの人が「基礎概念」をおろそかにしている。
これだけ、量産型エンジニアが生産されるのも基礎概念を理解していないがためのことなのだろうと納得するレベルである。
ITの世界にはあまりにも多くの情報が溢れている。次から次に新しい技術が発表され、昨日まで動いたプログラムがversionの変化のために急に動かなくなるといったことすらある。このような移り変わりの早い世界で、全てのことを理解することは可能か?先ほども述べたが答えは、圧倒的にNOだ。
そんなものは、どんな天才でもできないと断言できる。では、どうするか?基礎的な技術を深く理解することが必要なのだ。
とあるIT企業の面接では、ネットワークやLinuxに関する基本的な知識を聞いてくることも多々ある。
このことからもわかるように基礎知識は圧倒的に大切なのである。
では、なぜ「基礎概念」がおろそかになるのだろうか?おそらく、ITを勉強し始めた時に体系的にしっかりと学習しなかったからである。
中途半端な知識のままシステムエンジニアとしての道に進んでしまい、気がつけば後戻りできないようになっているのだ。
プログラミングスクールが悪いなんて言うつもりはない。各スクールの方々は努力してカリキュラムを整備しようとしている。だがしかし、今のプログラミングスクールのカリキュラムとは、量産型をどうしても排出してしまう構造になっている。
サッカーで例えるならば、パスやディフェンスの仕方を教えずにひたすらシュート練習をさせているようなものなのだ。もちろん、ゴールを決めることだけが仕事ならば問題ないが、現実はそうではないだろう。サッカーの試合では、必ずパスやディフェンスのスキルも必要になる。むしろ、パスのような基本的な技術のほうが大切だ。
現代のプログラミングスクールの構造も同じである。Ruby on RailsやDjangoなどを積極的に学ぶ一方で、Linuxやネットワーク、ウェブの概念を軽視している。小手先の技術でも生活をすることはできるが、きっとあなたが思い描いているような高収入で、リモートワークで、クリエイティブな生活ではない。
だからこそ、小手先の技術を学ぶのではなく、希少型エンジニアになるための勉強をしなければいけない。
では、どうすれば基礎概念を重視した学習ができるようになるのか?
多くの人が抱えるこの問いを解決するために、私はITスクール RareTECH を設立した。
エンジニア市場、上位10%の希少型エンジニアを育成するためのITスクールである。
もちろん、独学で学習することも可能であり、無理にスクールに入る必要はない。しかし、スキルを身につければ、一瞬で受講料の元が取れるのが IT 業界である。現に、入会1年後に年収が120万上がった受講生もいる。実にいい投資である。
ちなみに、私はこれまで(2024年1月現在)、2000名以上のエンジニアを指導し、企業の研修カリキュラム等も沢山作成してきた。その実績をもとに作成したスクールが今のRareTECHとなる。学習期間2年という日本一長く充実したカリキュラムとなっている。
公式LINEでは、RareTECHが提唱する希少型エンジニアを目指すための学習方法についての無料でプレゼントしている。是非とも登録してみてほしい。
また、LINEでは以下のような内容も発信している。RareTECH講師が無料で相談してくれるタイミングもあるので、是非とも利用してみてほしい。
ここまで長い文章を読んでもらったのに、「宣伝で終わりかよ!」と思われるのは非常に不服なので、ここまで読んでくれた方限定で、もう一つアドバイスをして終わりにしようと思う。
どうしたらエンジニアとして成功できるか?
この記事を読んでいる全ての人がこの問題に悩んでいる。数千名の新米エンジニアを教えてきた中で何百回とこの質問を受けてきた。しかし、この質問の本質は、以下のように置き換えることができる。
エンジニアとして成功するためには、どんな才能が必要か?
多くの人は、数学・英語・学歴・IT経験のような何か特別な才能が必要だと思っている。断言するが、これらは全部必要ない。
必要な才能は2つだ。
こんなことを言うと、「精神論だ!」「当たり前だ!」とか言われるかもしれないが、本当にそうなのだ。東大卒のような学歴が高くても、全然スキルのないエンジニアもいたし、高卒のような学歴がなくても高単価で働いている人もたくさんいる。結局は、上に掲げた二つを持っているか否かなのだ。
これは私が多くのエンジニアを見て、導き出した答えなのできっと間違いないだろう。
ただ…それを自力でやるのは難しいのも事実である。RareTECHにはその環境を用意したので、活用頂いてもよい。
この記事が、あなたの今この瞬間の行動を促し、学習の継続への意欲となってくれれば幸いである。今この瞬間に行動できる人こそ、1年後の成功を掴み取ると信じていている。
最後に、一言まとめておく。長い文章を読んでくれてありがとう。
おまけ(モチベーションの保ち方)
勉強するモチベーションが続かない。
という人のためにとっておきの秘訣を授けておく。それは、課金することだ。スクールでもudemyでもProgateでもなんでもいい。課金すると人はお金を回収するために必死になって勉強する。無料でももちろん勉強はできる。しかし、課金した教材はもちろん無料のものよりクオリティは高いし、自分の勉強のモチベーションにもなる。
教材に課金したところで、毎月せいぜい数千-数万円単位のものだろう。2年後、あなたが月50万稼ぐつもりなら、一瞬でもとがとれる。たかが数千円を節約して、あなたの成長機会と成長意欲を失わないでほしい。私だって、「独学した」と言いつつ、多くの書籍やudemyは購入している。
私自身は、その課金が RareTECH である必要もないと思っている。それはあなたの選択の問題だからだ。私ができるのは、 RareTECH であなたが成長できるかどうか、あなたの目で確かめてもらうための体験授業を行うことぐらいである。
その体験授業も、いずれ担当が私ではなくなるため、このnoteに出会ってここまで読み進めたあなたであれば、ぜひ体験授業でお会いしたい。zoom 授業で会えるのを、楽しみにしている。
この記事が気に入ったらサポートをしてみませんか?