はてなキーワード: Railsとは
よく「プログラマは勉強し続けなければいけない」といいますが、嘘です。
それは、レベルの低いプログラマの話です。そういう人たちが想定しているのは、たとえば流行りのフレームワークが出てきたらそれを勉強するとか、仕事で特定のプラットフォームの知識が必要になったのでそれを勉強するとかです。
こういうことを一所懸命勉強している内は、プログラマとしての実質的な成長は見込めません。それらを勉強しても、特定のフレームワークなどの使い方が分かる人になるだけです。ほとんどの場合、5年も経てばその知識は役に立たなくなります。
実は、ソフトウェアの技術などは、コンピュータの黎明期から本質的な進歩はほとんどありません。だから、本質部分が分かっている人は、流行り廃りのある技術の習得に余計な労力を割く必要がありません。
プログラマが勉強すべきはこの本質部分、つまりコンピュータサイエンスの基礎です。フレームワークの使い方は知らなくてもリファレンスを見れば良いのに対し、コンピュータサイエンスの基礎はググっても決して身に付きません。
プログラマが身につけるべきコンピュータサイエンスの基礎は、多くの大学の計算機科学・情報工学の2〜3年生で学ぶような内容、
などです。逆に、こういう素養がないのにプログラミングスクールでRailsとかCakePHPみたいなのを触って、プログラミングできる気になっている人に5年後10年後の市場価値はありません。
まあ、プログラミングに興味がある人が増えることは基本的に良いことだと思うけど、スクールの講師やってる奴なんてほとんどニワカみたいなやつが多いからなぁ・・・。
でも、カスみたいなプログラマを量産するのは罪深いな。そもそもカリキュラムも無茶スケジュールが多いらしいし受講する人にとっても良くないな。
人によってはprogate始めたらしくそれは別にいいと思うんだけど
ただ俺はプログラマ10年以上やっててフォロワーもそれ知ってて
若い頃は激務をネタにしたツイートもしてたからどういう仕事か知ってるはずなんだよね
それなのにここ最近急にプログラマ目指そうと思うみたいなこと書き出して意味がわからん
ついには「そろそろ課金しようと思うんですけどおすすめのプログラミングスクールありますか?」だって
課金!!??なんでプログラミング覚えるのに金かけないといけないのか
いや俺も始めた頃は3000円とか4000円する本をやたら買ってたけど数十万はおかしいだろ
とりあえずRailsチュートリアルとかやれば?とか返しておいたけど
progateの次は何か課金しないといけない風潮になってるのがすごい
今どきRuby on Railsやってるつってもパッとしないんだよ。
手軽に扱えるという触れ込みでブームになったせいで
スクール上がりで側だけ整えたアプリもどきをひっさげて求職してるらような奴がわらわらわいた。
そもそもRubyやRailsそのものが人気なくなってきてるし。
今からでも遅くないからJavaScriptかPHPでまたアプリ作ろうよ。
Laravel使ったことあるPHPerとかのほうが需要あるよ多分。
あと増田読む限り考え的にうちにこもりすぎな気がする。
大学卒業後4年ほど会社員をやったあと、ウェブ関係のプログラマを目指して1年ほど、バイトしながら独学で勉強しています。
ネット上には詐欺師まがいの情報商材屋とイキリマウントゴリラが跋扈し、普通の人間向けの情報が少なかったので、参考までに書いてみます。
なお、ここ数年のウェブエンジニア転職ブームとは無関係に転職を考えていたので、ブームは正直迷惑だと思っています。
独学にはいくつかの大きな問題点がありますが、もっとも大きいのは「全体のロードマップが存在しない」ことだと思います。
初学者は具体的に何をどの順番で学べばいいのかわかりませんし、この情報はネット上にはありません(冒頭にも書いた通り、そう思ったからこそ、このエントリを書いています)。
などありますが、どちらも普通の人間向けというには若干ゴリラ臭と商材屋臭がします。
また、プログラミング初心者向けの教材はおしなべて貧弱で、腹が立つほど不親切です。読んでいて何度もブチ切れそうになります。
特に初学者の場合は、教材の練習問題ひとつ解くにしても、誤字脱字等の初歩的なエラーのために平気で数時間のロスが発生したりします。
当たり前ですが、これは純粋に時間の無駄なので、すぐに講師に相談して解決したほうがいいです。
こういうことを書くとすぐに「自力で問題解決できない人間はプログラマに向いていない」と言いだすゴリラが現れますが、いまはそういう話はしていません。
そのほか独学だと自分の実力や相場感を測ることもむずかしく、その分詐欺師やゴリラに引っかかりやすくなりますし、基本的におすすめしません。
いまさらC言語と思うかもしれませんが、勉強するうえで重要なことはプログラミングの仕組みを理解することであって、どの言語から始めるかではありません。
その点、上記「苦C」はとても丁寧に文法を説明してくれますし、ポインタの説明を通してメモリの仕組みも教えてくれます。
ただし、回答例のコードに誤字脱字があって動かない等の発狂ポイントがいくつかあるので、注意が必要です。
勉強のやり方としては、まずはサイトを読みながらスマホのC言語アプリでポチポチ書いてみるところから始めると気楽でいいと思います。
途中で頭が混乱してきたら、再度冒頭からきっちり丸暗記するつもりで勉強するのがおすすめです。プログラミングに暗記は不要だと言うゴリラもいますが、あれは嘘です。
intはintegerだからintなんだとか、そういうことを調べながらやるだけでも解像度が格段に向上すると思います。
実際にC言語でバリバリ書けるようになる必要はないので、おおよその仕組みを理解してしまえば、最後のほうは流してしまって大丈夫です。
検索するとこの手のサービスが一番上に出てきますが、内容は不十分だと思います。かゆいところに手が届かず、使っていて非常にいらいらします。
とはいえ他に代替となるものもないので、サービスを利用しつつ、必要に応じて入門書を読むのがおすすめです。
私が利用したかぎりでは、Progateは教材の内容が薄く、Paizaは無意味にオタク臭くて私は苦手でした。N予備校やUdemyの評判がいいみたいですが、使ったことがないのでわかりません。
私はウェブ関係のプログラマ志望なので、ProgateとPiazaでHTML/CSS/JavaScript/Git/Ruby/Ruby on Railsを勉強しました。
最近は初心者Railsエンジニアが供給過多の印象があり、DjangoやLaravelのほうが就職には役立ちそうな気がしています。
余談ですが、無料の教材として有名な「Railsチュートリアル」 https://railstutorial.jp/ は、あえて劣悪な翻訳を放置することで、自社のプログラミング講座に顧客を誘導するビジネスモデルのように見えるので、内容はともかく個人的にはあまりいい印象を持っていません。
ちなみに私はこの辺で迷走していたため、いろんな言語をちょっとずつかじっています。
『スッキリわかるJava入門』はオブジェクト指向を理解するのに役立ちましたし、『退屈なことはPythonにやらせよう』で覚えたスクレイピングは求人情報の収集にとても役立っています。ほかには『プログラムはなぜ動くのか』も読んでためになりました。
基本的に本を読んで損することはないので、時間の許すかぎりたくさん読んだほうがいいと思います。私はあまり読めていません。
Railsチュートリアルを参考にRailsアプリのポートフォリオを作りましたが、完成まで半年くらいかかりました。
上述の劣悪な翻訳のせいもありますが、データベースの設計を考えたり、UIを工夫してみたりすると、いくらでも時間が吸い取られていきます。
知識ゼロから3ヶ月でポートフォリオを作りました! みたいな若手情報商材屋を見かけると、そんなにすごい能力があるなら普通にエンジニアだけやってればいいのに、と思います。
完成したアプリはDockerでコンテナ化したうえで、GithubActionsで自動テストを走らせ、AWSのサーバーにデプロイしていますが、この辺は言語の勉強やアプリの製作と比べたら全然むずかしくありません。
まともな日本語で書かれたまともな教材が揃っていますし、ネットの記事も豊富にあります。ここまでの勉強で、エラーメッセージや多少わかりづらい文章を読み解く能力も身についているはずです。
それぞれ1、2週間集中すれば最低限の実装はできると思います。ただしAWSの設定だけは、適当にやると数万円の請求書が届いたりするので注意が必要です(届いた)。
当方キャリア10年以上のWebエンジニアだけど、自分の職業について物申す
エンジニアはなんか特殊な技能がある風でエラソーな顔をしてるけど
最初にコンピューター作った人とかRubyとかRailsを思いついて作った人は
すごいけど、我々はGoogleと賢い人の巨人の肩の上に乗っかって作ってるだけである
それは自転車を作ったやつはすごいけど、乗ってる人は別にすごくないのと同じである
乗ってる人のことを技術力がある、すごいとは誰も言わない
乗ってる人の中でも競輪とか、ロードレースで優勝した人はすごいけど、
生活のために乗ってる人とか、ウーバーイーツで宅配するために乗ってる人は
大してすごくない
誰でもできるのだけど、多少しんどいことを
そして多少なりとも経験の蓄積による、付加価値も出せるかもしれない
何が言いたいかというと
無意味な宗教戦争に巻き込まれ無いこと、そのような本質的でないことにこだわらないことが大切
こだわるべきは
最後まで愚直にやりきる意志を持って、しんどくても真摯に向かい合ってやりきっていくこと
常に情報を仕入れて、巨人の肩にうまく乗って、工夫していくこと
若くて、心がまっすぐで、地頭いいやつが強いです(白目)
内容的にここで言われるほど、プログラミングスクールのカリキュラムや講師が悪いとは思えない
(あくまで20新卒、まとめサイトの運営とかAtCoderをちょっと触ってた程度の初学者の視点で見て)
劣化版メルカリを作るみたいな、新卒のプログラミング研修あるあるな課題だし
講師も総合職と一緒にやった研修会社のIT研修(ITパスポートくらいの知識)よりはかなりいい気がする
講座の内容についてRuby on RailsなんかはRailsチュートリアルとそこまで大きな差があるとは思えないし
細かいミスだったりは他人に見てもらったほうがすぐ直せたりするし、つまづいた部分を質問できるのはいいのでは・・・?
問題は入社してからほとんどPerlらしいのに、Rubyをやることくらいだと思う(人事の人に聞くとPerlを扱ってる研修会社がほとんど無いらしい)
自腹でやるならudemyとかだろうけど、新卒でこういう研修を受ける機会がなかった人がやる分にはいいと思うし
採用側が入社後に研修やらせる体制が無いから、スクールで研修っぽいことやった人を
未経験枠で採用するか・・・みたいなパターンはあると思うので、
プログラミング未経験者から「プログラミングを勉強してみたい、でもどのプログラミング言語をやればいいのかわからない」というような悩みを聞くことがあるので、https://redmonk.com/sogrady/2020/02/28/language-rankings-1-20/ に載っている人気の言語TOP 20について、未経験者が最初に学ぶのはどの言語が良いかという観点で簡単に解説してみます。
対象読者はプログラミング未経験者なので、なるべく難しい言葉を使わないようにしたつもりです。また、正確性よりもわかりやすさを重視しているので何かしら間違っているかもしれません。ご留意ください。
Webブラウザの上で動くプログラミング言語。元々ただの文書しかなかったインターネットの世界に、グリグリ動くページを作りたいという欲求により生まれた。JavaScriptのおかげで今のWebページはグリグリ動きまくりである。
元々HTMLをちょちょっといじる為だけのものだったが、どんどん進化を続けて今は一つの超人気プログラミング言語である。今ではブラウザ上でなくても普通に動かせる(Node.jsという)ので様々な用途で使われている。
ブラウザ上で動くプログラミング言語は基本的にJavaScriptしかないので、JavaScriptはすべてのWebプログラマが学ぶ必要があると言っても過言ではない。
ちょっとしたプログラムを書いてすぐブラウザ上で動かせるので楽しい。そういう点ではプログラミング入門に適していると言えるかもしれない。
機械学習を始めとしたデータサイエンスの分野で激烈に人気のある言語。理由としてはNumPyとかTensorFlowのようなライブラリが充実しているというのが大きく、資産がたくさんあるのでこれからも使われ続けるであろう。
言語としては、誰が書いても簡潔で読みやすいコードになる傾向にあり、小さいプログラムを書くにはいい感じである。米国ではプログラミング教育にPythonがよく使われているという話も聞くし、初心者がプログラミングを始めるのにはいいのかもしれない。
将来AIやデータサイエンスをやってみたいと思うのであればPythonから始めましょう。
ランキングでは常に一位に近い順位をつける言語。Javaができた当時は色々と革新的だったらしく、組み込み業界からWebまで流行りまくっていた。今でもその名残か使っているところは多い。過去の資産やプログラマの数が多いのが一番の理由だと思う。AndroidアプリもJavaで書く(もしくはKotlin)。
実行速度が速く、また下位互換性がしっかりしているので過去に書かれたコードが新しいマシン上でも動きやすいのが長所。短所としては、歴史ある言語で下位互換性を保っているため文法が古い感じがする。タイプ量も多くなるし、学習コストはJavaScriptやPHP, Ruby, Pythonあたりに比べると高い。
正しく使えば強力な言語だが、日本のクソSEもどきは全員(自称)JavaエンジニアであることがJavaが毛嫌いされる理由の一つになっている[要出典]。いわゆるGAFAもJavaをかなりヘビーに使っているので要は玉石混交ということである。
Androidアプリを作ってみたいというならJavaからはじめるのはアリ。
Webページを作るためだけに生み出された言語。プログラマの数が非常に多い。日本で求人が一番多いのはJavaかPHPであろう。
初心者でもとっつきやすく、すぐに動くプログラムを作れるので入門に使われることも多い。学習コストの低さはトップレベルである。しかし基本的には古くてダメな言語とみなされており、PHPで作られたWebサービスは脆弱性が多いという都市伝説もある。真実は闇の中である。
近年のバージョンアップで比較的良い方向に向かっている(と個人的には思う)ので、選択肢としては意外と悪くないかもしれない。
Microsoftが生み出した言語で、.NETというプラットフォームを使ってWebサービスを、Unityというゲームエンジンを使ってゲームを作ることができる。
最近有名なのはUnityで、今やほとんどの3Dソーシャルゲーム(の一部分)はUnityで作られている。そう考えるとC#のプログラマは結構いそうだし将来もある程度安泰かもしれない。もちろん.NETも広く使われている。
ただし.NETもUnityも触らない人にとっては基本的に縁のない言語である。
なんかゲーム作ってみたいかもなーと思う人はC#から始めてもいいんじゃないでしょうか。
C言語に色々な機能を足しまくってできた巨大な迷宮のような言語。言語仕様は複雑怪奇だが実行速度は全プログラミング言語中でも最速レベルなので、パフォーマンスが重要な開発において使われる。アプリやサービスというよりは、それらを作るためのライブラリ、プラットフォームなどを作るときに使われることが多い。Web系の会社でいうとGoogleなどは主にC++を使っている。
基本的には初心者が触る必要はない。競技プログラミングを極めたいとかならC++からはじめてもいいかもしれない。
このランキングの中で唯一、日本人によって作られた言語。作者のまつもとさんは世界的有名人である。ちなみに島根県出身、在住。
プログラミングを楽しくすることがモットーらしく、確かに書き味は良い。また作者が日本人なこともあってか日本語情報が多く、情報収集という点ではとてもやりやすい。
Ruby on RailsというWebサービスを作るためのフレームワークが世界的に大ヒットしたため、必然的にRubyの知名度も上昇した。少し前まで日本のWeb系スタートアップは猫も杓子もRuby on Railsといった様相であった。今は少し落ち着いたようだが今も人気は根強く、Web系プログラミングスクール等ではだいたいRuby on Railsを教えているとかいないとか。
Webに興味があるのならRubyから始めるのが一番無難な選択肢と言える…のか?まあ悪くはないと思う。今でも需要は多い。スクールに行きたいのであれば黙ってスクールのカリキュラムに従いRailsをやりましょう。
これは他の言語とは毛色の違う言語である。というかCSSはプログラミング言語と呼んでいいのだろうか?
CSSはHTMLを装飾するためのものである。字に色をつけたり、背景を変えたり、レイアウトやサイズを変えたりするのは基本的にCSSの役割である。
すごく大雑把にいうと、HTMLで表示する内容(文章や画像)を定義し、CSSでその見た目を整え、JavaScriptで動きをつける。というのがWebサービスの”見た目”を作るやり方である。
なので、Webに興味があるのであればある程度はCSSの知識が必要である。が、これ単独で学ぶようなものではない。Webサービスを作る時についでに調べて少しずつ覚えていけば良い。
TypeScriptは比較的新しい言語で、JavaScriptをさらに拡張したものである。Microsoftによって開発されている。
プログラムにはデータの型(Type)というものがある。例えば「1」や「2」は数値型、「あいうえお」は文字列型といった具合である。大まかに言うと、この「型」に対して厳しい言語は型チェックによりバグの混入を防ぎやすいがプログラムを書くのが大変、というかコード量が多くなる。型が緩い言語はサクサクかけるし短く書けるがバグを生みやすくプログラマの力量が問われる。ランキングの中だとJavaScript, Python, PHP, Ruby, Perlあたりは緩く、Java, C++, C, Swift, Go, Kotlinあたりは厳しい。
そんな中、世で広く使われているJavaScriptの型チェックが緩すぎるのでもっとちゃんと型をつけたい、そんな要望を叶えるのがTypeScriptである。基本的にJavaScriptを理解している人間が使うべき上級者向け言語というのが現状なので、初心者が始めるには適していない。
ただしこの先主流になっていく可能性は大いにあるので、どこかのタイミングで勉強してみても損はしないと思う。
C言語は基本的にOSを作るための言語である。OSというのはWindowsとかmacOSとかLinuxといったもので、マシンを動かすための基盤となるソフトウェアである。AndroidスマホにはAndroid(という名のOS), iPhoneにはiOSが載っている。コンピュータは基本的にOSがあって初めて動かすことができ、OSが提供する機能を使ってブラウザやスマホアプリなどを動かせるのである。
というわけで、初心者が学んで実用的なものではない。ただしC言語というのは世の中の様々なものの基盤になっており、他言語の文法もC言語から拝借しているものが多い。例えばC言語をある程度勉強していればJavaやPHPなどはなんとなく雰囲気で書けてしまったりする。
そういうわけで、コンピュータサイエンスをこれからちゃんと学んでいきたいという人(大学生とか)はC言語から始めるのもいいと思う。ちなみに筆者は初めて書いた言語はCであるが、意味が理解できるまでに2年かかった。才能がないとこうなるので注意。
SwiftはAppleによって作られたAppleのための言語である。iOSアプリ(iPhoneアプリと言い換えても良い)を作るためだけに存在している。
言語自体は他と比べて新しいため文法や機能がイケてる雰囲気があるので基本的にはいいのだが、iOSアプリ以外で使っている人は多分世界で5人くらいしかいないと思う。なのでiOSアプリに興味がない人はやめておきましょう。iOSアプリを作りたいあなたは他に選択肢はない。Swiftをやりなさい。
Swiftが生まれる前はiOSアプリを書くためにObjective-Cが必要だったため、多くの人がこの言語を使っていた。が、今はSwiftがあるので、古くからあるObjective-C製アプリをメンテナンスする時以外に使う機会はない。名前すら覚える必要がないので存在を忘れてしまって構わないが、これだけ順位が高いということは多くの企業がいまだにObjective-Cで開発し続けているということであり、ニッチな需要はこれからも残るのかもしれない。
Scalaは関数型言語と呼ばれる言語の一つ。Javaの親戚みたいなものなのでJavaとの連携が容易であり、上手く使えば性能も出るしコード量も少ないしバグも少なくて最高、な感じらしい。が、その分難易度が非常に高いので初心者が手を出すものでは絶対にない。どんなに早くても他に二つは言語を覚えてから勉強しましょう。Javaを覚えてからやるのがベター。
正直ほとんど書いたことがないのでよくわからないが、ビッグデータというワードが流行りだした頃はデータ解析用途でかなり流行っていた。その後機械学習やAIブームが来て、今でも現役で使われてはいるがPythonがどんどん勢力を拡大しているので少し目立たなくなってきた、というのが個人的な印象である。まあプログラミング初心者が最初にやるようなものではないことだけは確かである。
Go言語は比較的新しいGoogle製のプログラミング言語で、Googleのように巨大なシステムでの使用を目的に作られたものである。しかし実際には様々な企業が利用しており今一番勢いのある言語と言ってもかもしれない。
他のプログラミング言語の良い点や悪い点を参考に設計されており、実行速度の速さと生産性(プログラムの書きやすさ、読みやすさ)を両立できるような言語になっている。ただし、機能を増やすのではなく本当に重要な機能だけに絞るという思想があるようで、他の言語に慣れていると機能の少なさに不便を感じるかもしれない。
学習コストが低いという点では最初に学ぶ言語として適しているかもしれないが、GoだけでWebサービス等をサクッと作れるのかというと微妙なので、アウトプットを出しにくいというのはあるかもしれない。
シェルというのはテレビなんかでハッカー的な人間がPCを開いて謎の黒い画面に白い文字を打ち込んだりするアレである。説明としては正確ではないがまあ大体そんなもんである。何が言いたいかというと初心者が最初に学ぶとかそういうものではない。しかし実際に開発の仕事をやるとシェルの知識はあったほうがいいし、シェルに多少詳しくなるとPC上でテキスト操作をしたりファイルをいじったりというのが便利にできるようになる。ただし(通常は)極める必要はない。
Shellと言っても実際にはbash, csh, tcsh, zshなど色々あるのだがそれらをひとまとめにしてShellとなっているようだ。
PowerShellは上のShellの親戚みたいなもので、ShellがMacやLinuxで動くのに対しPowerShellはWindowsで動く。そんだけである。あと正直あまり知らない。
ランキングの中ではかなり昔からある言語で、サーバーと呼ばれるマシンには大体Perlが入っている。そのくらい市民権を得た超有名言語で、C言語やC++で書くほどでもない小さなプログラムはとりあえずPerlで書く、というくらいには広く使われていた。インターネット初期はほとんどのWebサイトはPerlで書かれていたとかいないとか。PHPなどの登場はその後である。
今でも広く使われてはいるが、RubyやPythonがPerlの後継的な位置付けであるため、初心者が新しくPerlを学ぶメリットというのはあまり思い浮かばない。何か特定の目的があるのであればいいと思う。
Kotlinは簡単に言えばBetter Javaである。Javaをもうちょっといい感じに書きたいという気持ちで作られた言語で、Scalaと同じくJavaの親戚のようなものである。
ランキングの中ではSwiftと並んでかなり新しい部類。AndroidアプリをKotlinで書けるようになったことがきっかけで人気が爆発的に上昇、今ではWebの開発にも使われていたりする。
とは言えまだまだ新参者といった感じで、ドキュメントなどの情報も他の言語に比べると物足りないので初心者には厳しいかもしれない。
言語自体はとてもいい感じなので、もう少しコミュニティが成熟してくれば最初に学ぶ言語の選択肢として有力になるかもしれない。
HaskellはScalaと同じく関数型言語である。ScalaがJava的な書き方でも動くの対し、Haskellは「純粋関数型言語」と呼ばれ、ランキング中の他の言語とは一線を画した書き方になる。どう考えても初心者にはオススメしない。少なくとも他に二つは言語をマスターしてからやりましょう。
なんとなくWebに興味がありそうならJavaScriptかRubyもしくはPHP、Androidアプリに興味があればJava、iPhoneアプリに興味があればSwift、AIやデータ分析に興味があればPython、3Dゲーム開発に興味があればC#。この辺りをやりましょう。
特に目的がないのであればフィーリングで選んで大丈夫ですが、やめておくべき言語というのはあるのでその辺だけ参考にしてもらえれば。
なお筆者はただのヘボプログラマであり、大好きな記事(http://www.mwsoft.jp/column/program_top10.html) の現代版かつより初心者向けなものを書いてみたいと思ってこの記事を書きなぐった次第である。あまり真に受けないよーに。
レンタルサーバーなので削除した。いつまでも鯖代払いたくないからね。
Railsで作ったよ。
ActiveRecordはUserとTweetとProfile。
belongs_toやhas_many使ってデータベースを関連付けして
ApplicationControllerで@current_userにログインしたユーザを格納して、ツイートの削除権限とか、トップでの表示内容管理したりした。
自分はとんでもないバカだからプログラミングスクールに何十万も払わないといけないという自覚があるならやればいい。
でも、その前に技術書買ったり、progate(両方、無料で試せる)をやってみてからにしたら?
俺技術書30冊くらい読んでたんだけど、体系的な知識ってのが手に入らなくて、progateでrubyとrails学んでインタラクティブにツイッターライクなアプリ組み立てて
ついでにすべての基礎となるコマンドラインやPythonとかGoとかReactや、Node.JS(もうあんま必要ないけど)とか、学ばせてもらって、一気にレベル上がっちゃったから
自分としては独学してる人にはぜひともProgateおすすめしたい。
Codecademyほどハイレベルじゃないし、一通り触れたあとに技術書に戻る必要はあるけど、やるとやらないでは全体の理解度が全然違うよ。
フリーランスになると稼げるみたいな空気が出てからおかしくなった
今はRails覚えて自社サービスやってる会社に就職するのがゴールなのが多過ぎる
Railsも悪くないし自社サービスに就職したいってのもいいよ
でも元々プログラミングって遊びの延長線なところあったじゃん
広告貼ってマネタイズとかその前に単に作ったものに人が集まったり
真面目に勉強するのもいいけどそういうのないのかな
やれRailsだのAWSだのDockerだのどっかのスクールに金払って習っても
そんなのどっかでプログラマで働きだせば嫌でも身に付くし
正直1人でサイト作る分にはこんなのいらないじゃん
なんだかなあって思う
Railsで業務システムを作ると死ぬ。というかスタートアップの文脈以外ではRailsを使わない方がいい。
Railsって「他の何を差し置いても初速が重要!」「成功してから考える!」スタートアップにとっては最適だと思う。
でも要件が複雑で長期的に運用、保守する前提のシステムを作るのには全く向いてないんだよね。
Railsを選択した時点でMVCかつモデルにいろいろ押し込んだ密結合なアーキテクチャを採用していて、これが規模の大きく複雑なシステムにマッチしないってことをもう少し意識した方がいい。
「技術的負債」なんて聞き心地の良い言葉で済まされるけど、要は設計不備でしょ。
もちろん要件を鑑みて意識的にこういうアーキテクチャを採用するなら何も問題ない。
作り散らかす人にとってはどうでもいいのかもしれないけど。
とにかく、向いていないことにRailsを使うと当たり前のようにしんどい。
信者は絶賛するのはいいけど、向き不向きがあるってことも同時に伝えてくれたらうれしい。
負債を返すのはおそらく作ったのとは別の人になるので。
最近Laravelで開発してるPHPerだけど、その辺ってDIで疎結合に出来ないのかな?
RailsってDIないの?と思ったら、そもそもRubyがインスタンスへの依存性は動的に変更できるらしいじゃん
FWがどうとかじゃなくてプログラマが適切に設計できる技術がないだけじゃないの?
6 of the top 10 @ycombinator companies (by valuation) were built using Ruby!
https://b.hatena.ne.jp/entry/s/skillhub.jp/blogs/177?ref=176
https://magazine.rubyist.net/articles/0059/0059-Ruby-Rails-Beginners-Guide.html
https://techracho.bpsinc.jp/hachi8833/2019_01_25/68846
Railsは2019年も「あり」か? Railsの長所と向いている用途
https://techracho.bpsinc.jp/hachi8833/2019_01_29/68871
補足→ https://anond.hatelabo.jp/20191205212350
これは退職者アドベントカレンダー2019 (https://adventar.org/calendars/4051) 5日目の記事です。最初は自分のブログに書くつもりでしたが、書いてるうちにどこまで筆が滑っているのかわからなくなったので増田に投げることしました。そしたら余計にタガが外れたのはご愛嬌。
よく見かける「未経験からエンジニアへ!」ストーリーの、あまりなさそうなルートです。よくあるルートのほうはなぜかTwitterで報告して「○○系エンジニア」的な命名をしてから入社その後の動向が闇に葬られているのをかなりの確度で見かけますが、まあ、なんか、いろいろあるんでしょう。逆にそういう成功(?)体験の生存バイアスを強化する情報ばかりあふれていると情報として健全でないように感じます。
といいつつ後日しれっと消えてたらInternetArchivesか魚拓で会いましょう。
この話はここから先はフィクションです。剣も魔法も労基法も出てこないファンタジーです。
地方に潜むフリーターです。好きなvirtual beingsはロボ子さんと東雲めぐさんとれいきらさんです。
これまでは自分のためのプログラムを書き散らすだけで、ITとは無関係のバイトをしてきました。玉掛とフォークリフトなら任せろーバリバリ
会社にもぐりこんだいきさつはやや特殊なのでぼやかします。とあるきっかけで知り合った人から誘われました。リファラルです。なお、とあるきっかけはなにかと炎上しがちないわゆるプログラミングスクールなどではないことを防火剤がわりに書いておきます。そんなもんに使う金など無い。
その人のことはあんまりよく知らなかったのですが、CTOとして手伝っている会社のシステム部門で人手を探しているとのことでした。会社のホームページにはリクルートページなど無く、何をやっているかいまいち要領が掴めなかったのですが、ざっくりと自社製のWebアプリ開発をやる感じらしく、内容も聞いた限りでは(自分のスキルと照らし合わせて)そんなにどえらいわけでもない印象でした。ちょうど金もないし無職だし、少し経験でも積んでみるかという気になったので、この際ホームページがDreamWeaverのサンプルを流用したまんまといった細かいところは観なかったことにしました。
面接にいくと社長から「いつからこれるの?」と言われたので「あっこれは」となりましたが、金がなかったので是非もなくそのまま入社の運びとなりました。この頃はプログラム書いて金もらえるなんてサイコーとか思ってました。ちなみにgithubやatcoderのアカウントを書いた職務経歴書は一顧だにされませんでした。
地方の製造業のシステム部門を切り出して別会社にした形態の、創立数年ほどの会社です。自分のほかにもうひとり、社内情シスのようなことをしている方がいましたが、基本的にはサポートが専門な感じでした(ただし肩書は自分と同じでしたが)。紹介してくれたCTOは週に一度のMTGに顔を出すだけということで、実質的に常駐している人間でプログラムが分かるのは業界未経験の自分だけというチャレンジングな環境からスタートしました。なお入社して社内の平均年齢を大幅に下げることになりました。
ちょうど入ったタイミングで情シスの方が抱えている仕事があり、とくにやることもなかったので手伝いました。グループ会社のサイトをスマホ対応させるもので、事情はわかりませんがそれまで他社に制作を委託していたものを自社で運用することにしたとのことです。みてみるとWordPress4でPHP5が動き、Bootstrap3を使ったオリジナルカスタムテーマで運用してきた様でした。もちろん仕様書やローカル環境もあるはずがないのですが、どうせ自分はWebデザインなど知らんのでとりあえず直にheader.phpにviewportを書いてmain.cssにメディアクエリを設定して、ザ・web制作初歩みたいなレスポンシブ対応をしましたが、デザインについて当事者との意見のすり合わせの機会なんかの開発手順はなかったので良しとしました。
入社して2周間ほどのち、社長についてこいと言われた打ち合わせの後日、MTGで「昨日のアレの進捗はどんな感じなの?」と聞かれたことから、いつのまにか新規案件を自分に一任されていることに気づきました。仕様は前日の打ち合わせがすべてだった模様です。要件定義や技術選定・検証のような工程など決まってないので好みで揃えました。趣味と関心からExpress+Mongo+Reactのセットか、触ったことのあるDjango/Railsでざっくりやるか、どうせならDockerも使い時か、こんなときに相談できる同僚やメンターが欲しいなぁなどと考えていたら、CTOがそれまで作っていたやつをみるとPHP+ES5+MySQLだったのでなんだかんだでそうすることになりました。PHPを初めて触り、「これがペラ1のphpにjsもcssもなにもかも書いていくといういにしえのスタイルか…!」と新鮮な感じでやってました。
Windows Server 2012で動いていたサービスをLinuxに移行しました。これは自分が入る前から情シスの方が任されていたのですが、マニュアルに沿ってコマンドを打ちこんではどこかで転け、エラーは読まずにあきらめてCentOSインストールからやり直すということを繰り返していたのを見るに見かねて手伝いました。SSHでPowerShellからマニュアルのコマンドをコピペして実行する方法を教えてあげると目を丸くされました。shellファイルを書いてあげると魔法をみるのような顔で驚かれました。自分が入ってなければどうなっていたんだろうか...
毎日出退時間を規定のEXCELフォーマットに記帳する必要があり、これが非常にめんどくさく無駄に思えたので、自動記述するpython/Goスクリプトを書きました。これは入社して2日目とかだった気がします。しかしここを自動化しても「印刷して人事に提出し、それをもとに人事の方がまたEXCELに書き込む」と知り虚無になったりしました。
これはやったことというか思うところあってプライベートで取り組んだことです。自分の想像していた開発現場との乖離を感じたので、こういうのはFE勉強すればわかるのかもしれないと思って1ヶ月くらいやって取りましたが、得られた知識で会社に活かせそうなものは何一つありませんでした。
チーム開発などという概念は存在せず、「1案件を1人で上流から実装、運用、保守、サポートまですべてやる」という進め方でびっくりしました。手持ちの技術スタックでできる範囲でギリギリなんとかやった感じです。よく転職サイト上で見かける文言で「お任せします」がありますが、これとかも要するに「丸投げ」の換言なんでしょうか。わたし気になります。
自分のように途中からジョインした人に対しての業務移行のシステムがないことから感じていましたが、案の定「誰かが抜けたあとの引き継ぎの機能」も整備されてないことに気づきました。もともとオンボーディングや研修の概念などありません。えらいひとは「そのへんは現場で協力してうまくやって」と丸投げし、すべての作業を自宅でやっているCTOは社内のこうした事情については放任で、いちおう情シスの方がいつのまにかメンター代わりになっていたものの、不明点を尋ねても頓珍漢な返答が多くもどかしかったです。どのサーバでどんなサービスが動いているのかやSSH情報を聞き出すのに苦労しました。こうした不幸と無駄な時間をなくすためにドキュメントを整備しようとしたのですが、頓挫しました。これからも物理フォルダーと社内サーバに散逸した各種の情報は混沌を深めていくのでしょう。gitも無いし。
サーバはオンプレでした。自分はクレカをもっていないためパブリッククラウドを試す機会がなく、ぜひとも触ってみたかったのですが、承認を得るための説明がうまくいかず、結局VBoxでやることになりました。唯一、それまで使われていたVBoxではなくVagrantを導入したのは少しだけ救いでした。どうせ自分しかいじらないのですが。
余談ですがオンプレで面白かったのはHDD増設のために初めてデータセンターなるものに入ったことです。インフラ/ネットワークはまったく分からんしなかなか個人で試せない領域だし縁がないかなと思っていたのですがやはりそこに見える物理層が存在するというのはテンションがあがりますね(断層みたいに言うな)
イキってカイゼン・ジャーニーや情熱プログラマーを買って読んだりもしました。目につくように共同図書のつもりで「ご自由にどうぞ」を添えて自分のロッカーに置いておいたら「私物は持ち帰れ」と言われてしまったので持ち帰りました。
さてお待ちかねメインディッシュですね。
もともと技術やコンテンツの会社ではなく、技術畑の人間がまったくいないことのインプレッションが次第に違和感として強く響いてきました。ITエンジニアとしてやっていくつもりの観点でみると、学習や成長の土壌は無いように思えました。協調関係や信頼がうまく築けず、自分のすべき道筋が不明瞭のままやっていけるほどタフなYATTEIKI精神ではなかったのです。
これは地方の、それもIT気質のあるわけではない、ワンマン経営の中小製造業ならばどこにでもあることかと思われますが、随所に感じるレガシーさに疲れてしまいました。一例を挙げると、毎朝30分に亘り行われる全社清掃(もちろん業務時間外)、社是の復唱、『感謝の言葉をみんなで味わうポエム』の輪読、その感想大会、頻繁に行われる中身のない会議、日報をエクセルで書いてメールで送ったり、出退勤表を毎日エクセルに書いて印刷して事務方に持っていくなどのルーティンがけっこう苦痛でした。
社内のコミュニケーションツールはLINEだったので使い勝手も悪く、会議でchatworkかslackを使いましょうと提案しても誰一人としてそれらの存在を知らず、「勝手にやってくれ」と言われてしまったり。LINE WARKすら知らんやんけ。説明しても「skypeじゃ駄目なの?」と言われたので諦めました。
えらい人の思いつきのたびに方向性が変わり、当人は発言したらそれで全て完了した気になってしまったのか、会議終了後の10分後に「さっき言ったやつまだ出来てないの?」などと言われた時はギャグかと思いました。会議の議事録も誰も見返さないので果たして意味があったのか疑問です。誰かひとりでもmarkdownが書けたり、少なくとも書く気があれば勉強会を開催してHackMDなどを推せたのですが。議事録が機能していないエピソードとしてひとつ思い出しました。開発中に機能追加を下された際に、その挙動は完全にプラットフォームネイティブであり今の技術選定だと作り直しになり、結果納期に間に合わない(し、自分の技術スタックからも遠く外れていたので学習コストも加算)と発言したらその場は収まったのですが、会議終了後に個人メールで「やはり機能はマストだ」と伝えられました。当然それは議事録に反映されることなく、なんかしらんけどそういうことになっているという感じになりました。
初めてのエンジニア職でしたが、社内に開発をる人やマネージャー職は不在で、いわゆる開発現場での流れを学ぶことはできませんでした。少なくとも技術を知らないえらいひとが「俺がスケジュールを立てたからこれに沿ってやれ」と、”開発”と”広告作成”しか書かれていない2週間の計画表をもってくるような現場はシステム開発として正しいのか、 と本能が警告を発していました。
もともと会社は製造業から始まったため、えらい人たちとの見解に齟齬があったのは体感としてあります。同じものづくりといえど設備とマンパワーと時間が線形的に結果に結びつく工場業務と異なり、システムエンジニアリングはかける時間の見積もりも容易でなく、かかった時間が必ずしも結果に結びつかないものである、と言う事実は受け入れられ難く、知識ドメインやマインドセットが異なれば説明も困難です。しかしながらえらいひとは一様に「経営者視点を」の号令で、経営誌を配り、その感想文の提出を義務付けるなど、現場視点を欠いた行動で現場(というか私)を疲弊してました。気づいたらSEO対策や別部署のMTGのためのプロジェクター設定、全PCのwindows updateに伴うドライバの更新の役も同一の職掌として役付けられそうになっていたり(一部は実際に情シスの人がやってた)、It’s not my workなシーンがみられるようになっていました。
そして、よくあることですが、理念と実態が乖離していたことです。世界をよりよくと言いつつ、目先の掛け算を考えてばかりのように思えました。グロースする中で発生しそうなあれこれをすっ飛ばし利益だけを皮算用するのはいいとして、データ量やトラフィックを指摘すると「そこは現場努力でしょう」となるので、世界を良くする前に精神を悪くしてしまい人生で初めて心療内科にいったりもしました。一応グローバル展開を目指しているとしながらサーバからMailerDaemonが飛んできたら「ギャっ英語っ!」と言って読まず捨ててたり、急にサービスが止まった時には激怒して責任の所在の追求を求められたため、草創期にえらい人の個人アドレスで取得してほったらかしにしていたドメインが失効したことが原因と伝えたら「あれはもう読んでいないアドレスだし仕方ない。こういうピンチのときこそチャンスにしようぜ」という謎理論を出されたこともありました。
違和感が確かなものになったのは、外部に提出する資料で社内の数字が異なっているとを指摘すると「こういうのは見栄が大事なんだ」と暗に公文書偽造をほのめかされたことですが、これ以上は闇っぽいので書きません(たぶんどこもやってて罷り通ってる範囲だと思うけど)
総じて、心理的安全性の低さ、そこからくる身動きのとれなさ、ロールモデルの不在、前時代的な風潮、社内文化へのミスマッチと不理解、成長の実感が沸かない不安と不満、それらに伴う摂取アルコール量の異常な増大と過食、といった要因の積み重ねが、ネガティヴな形での退職へと駆り立てることになったのだと思います。まあ、よく知らんうちにリファラルしてるところからして「採用・教育コストを考えてないのでは?」の念はあったのですが。中身がまったく不透明の状態で飛び込んだらそうなるよなぁ、の好例かもしれません。誘われた時はわりと藁にも縋る思いだったのでしかたないね。
現在はスキー場で住み込みバイトしてます。無考えに退職すると年を越せないことに気づきました。
可処分所得・可処分時間いずれも今の方が上なのはちょっとウケます。賃金はふつうに生きていければいいので前職程度でも気にしなかった程度なんですが。いまは映画をみたり積ん読を消費したり、在職時は深いところまで触れなかったPHPをいじったり、生PHPしかやってないことに気づいたのでcakeやったり、あとはweb周辺も久しぶりにキャッチアップしたりしてます。nodeネイティブおじさんなのでFWはangularしか知らないんですよね。vue/nestが面白そうな感じです。あと寮のwifiが談話室限定で窒息しそうだったので、持ち込んでいたラズパイをルータにして部屋まで飛ばしたら隣室の同僚から感謝されたりと活動は多岐に渡ります。
先のことはなにも決まってませんが、ちゃんとエンジニアリングしている組織で開発してみたいなという気持ちがあります。レビューやスクラム、アジャイルなんてのはひとりだと不可能ですし。ですが、やはりそういった会社は日本では都市部にばかり集中しているのでしょう。自分は空気の悪いところには住めないし、案外また辺鄙なところでtechとは無関係のことをしているのかもしれません。ワーホリでも使って海外で大麻栽培でも始めようかなぁ。
巷説に流布する「未経験からエンジニアへ」の言説のたぐいは、どちらかというと技術力よりもコミュ力が偏って高いタイプが生存しがちな雰囲気を感じます。たまにTLに流れてきたのを見かけますが、ああいった立ち回りは自分にはできないしやりたくないなぁと思ってきました。社会の要請ならばそれまでですが。
自分は体系的な情報教育を受けていないどこにでもいる地方高卒で、下手の横好きで趣味プログラムを書いてきたし、続けてるってことはそれなりに好きなんだと思います。得意じゃないけど。んで、こんなのがITエンジニアをしたサンプルというのは見かけないかもなぁと思って投稿しました。光あるところに闇あり。
といいつつ、やっぱり好きなことの結果がおかねになるのはいいよなぁと思った次第です。プログラムを書くのは楽しいけどエンジニアリングは超絶むずい、が雑な総括ですが、今回のことを顛末次第にはする気はないので、どこかに拾ってもらえるよう精進するきもちになりました。