はてなキーワード: 競技プログラミングとは
あとは他人が書いた長大なコードを理解して、自分のつけたい機能をつける練習をしないとねって思った。
競技プログラミングだとスクラッチからコードを書くのが普通だけれど、仕事でスクラッチからコードを書くことなんてまれでしょ。
趣味プログラムならコーディング規約なんて気にせずに自由に書けばいいけれど、仕事だとプロジェクトごとのコーディング規約に従わないとダメ。
あとは門外漢だと計算量とか記憶装置の階層とか情報工学を学んだ人だと普通に持っている知識が無いかもしれないというのも心配だね。例えば、とりあえず動いてもO(2^n)だったらnがそれなりに大きいことが予想されているところには使えないよね...という話が理解できない同僚とは働きたくないよね。
年がら年中同じことやってるぞ。パッと思いつくのは今年の1月くらいか
競技プログラミングの過去 問をやってみたところ解説を読んでもまったく理解できないので. C++の書き方以外にも今後どういった学習が必要になるのかみなさんのアドバイスが欲しいです.
1.ひたすらググッて解説が書いてある
を繰り返す。
非常にツライが結局これしかない気がする。
ワイは1行も書いてないけどGAFA入ったやで
毒親および毒親・毒配偶者を原因とした、社会性の欠如、無駄な高プレッシャー、反社会性パーソナリティだぞ
私はみなさんがよく知っている某社でVPとして働いている。VPの仕事は多岐に渡るが、その中でもソフトウェアエンジニアの採用は最も重要な仕事の一つである。そんな中、弊社の採用対策として、特に新卒の学生の間で競技プログラミングというものが流行っているようである。これについて私の所属する部門での印象を述べる。
まず、身も蓋もないことをいってしまうと、少なくともうちの部門では新卒・中途関わらず競技プログラミングの知識はほぼ不要である。新卒のヘッドカウントは少なくなっているものの、大学でコンピュータサイエンスをしっかり学び、かつ自分で手を動かした経験がある人であればあとは人間性の問題である事が多い。弊社は選考の際にコーディングスキル、特に競技プログラミングのスキルを見ていると思われることが多いらしく、学生もその対策としてまるで受験勉強であるかのように取り組んでる人が多いという印象がある。弊社はそれなりに大きい会社であるため、中にはそのような目線で採用面接をする部門・エンジニアもいると思うが、少なくともうちのチームはコンピュータサイエンスの最低限の足切りをしたあとは一緒に働いて和を乱さないかを重視している。つまり、面接をしたエンジニアの単なる印象に近い(これをあからさまにいうと社内でも怒られるが、意外とそんなものである。)
これだけ聞くと弊社も一般の会社と変わらないのか・・・と思われるかもしれないが、これには色々理由がある。まずは私が見ている部門の話をしたい。
まず弊部門は革新的なプロダクトを次々開発するための「高速道路」が非常に整備されている。あまり詳しく言うことはできないが、例えばソフトウェアエンジニアであればGitHubやCircleCI、AWS、といったサービスを使って開発をしていると思う。これらの10年先を行っているインフラが社内で自由に、しかも誰でも使いやすいように整備されていると思って貰えればよい。これによってプログラミング経験がほとんどない人(といっても最低限の足切りはされていると思ってほしい)でもドキュメントやコードを参考にすることですぐにプロダクトとして出すことができるということである。これは逆に言えば競技プログラミングで青とか黄といった高度なプログラミングの技術力は必要ないということである。どちらかといえば社内に存在する膨大な技術資料を読み込み応用できる忍耐力と発想力、そしてわからないことは例え相手が英語があまり話せない人だったとしてもコミュケーションを厭わない対人能力のほうがはるかに重要である。これは社内の人材を評価をする際の統計データでも如実に現れている。
一方で実験的プロダクトや社内向けプロダクトを開発している部門おいては少々事情が違う。こちらはいわゆる「高速道路」が整備されていないためコードを1から書く必要がある。こういう場所では競技プログラミングといった高度なプログラミングの技術力を持つ人が多数活躍している。完全にリサーチャーとまではいかないものの、半分リサーチャー、半分エンジニアといった感じの仕事になっていることが多いと思う。そのような部門では驚くべきことに「Gitの使い方がわからない」といった人まで存在する。だがしかしそれを圧倒する実績を保有しているか、または現在発揮中のいずれかである。ただ弊社も大企業になって久しいためこのようなポジションはだんだん減少傾向にある。競技プログラミングで赤や黄であり高度なアルゴリズムを開発するポジションを希望するという人は常に一定数いるが、正直採用されることは困難というイメージである。どちらかと言うとこのような部門は優秀な人を引きつけるための広告塔として機能していると思ったほうがよい。実際に採用されるエンジニアの大半は弊部門のような泥臭い作業を任されることがほとんどである。
最後に個人的な主観を述べておく。これはあくまでも私の周辺だけの話ではあるが(とはいえVPではあるのでみなさんが思うよりは広いと思う)、10年以上前に入社した人はいわゆるプログラミングガチ勢が多かったように思う。しかし今採用されている人はそのような一点特価型はほぼいなくなり、技術力やコミュケーション力を含めたオールラウンダーが増えてきた。これはあくまでも想像であるが、現在シニアエンジニアとして活躍しているような人材は技術力はかなり高いものの、やはりコミュケーション力や忍耐力といった点で難点のある人が多い。そのため、ジュニアとして採用するエンジニアはそういった人材とチームを組めるだけのコミュケーション力や忍耐力が要求されることになる。一方で技術力に関していえば社内で独自開発するよりは、外部から会社ごと買ってくるほうが簡単である。という意味でやはり求められているのはすべての面において難点がないことなのである。これは会社の規模に応じた必要不可欠な変化であると考えられるし、また弊社は外資の中ではクビになりにくい体制であるというのも大きいだろう。
【21新卒SWE】 私はこうしてGoogleに落ちた ~Googleに挑んだ120日~
https://note.com/grouse324/n/n1f329de5ee50
Google特定じゃなくてこの業界の一般的な流れなんですが。
もともとコーディング面接って、特定の技術分野に強い人じゃなくて、何でもできるポテンシャルの高い人を採用するための手段として使われてきたんですよね。
それが機能していた時代(10年くらい前?)は、競技プログラミングやそれに類する経験のない人のほうが多数で、そういう人たちが競プロ的な課題をその場で解いたり議論してたりしてたんですよ。
ところがその後、競技プログラミング勢が増えてきたことによる弊害が明らかになります。というのも、彼らの競技プログラミング勢の入社後のパフォーマンスが明らかに低い。そりゃそうですよね、予習なしで面接課題を解ける人たちと、予習込みでないと解けなかった人たちとでは、前者のほうが優秀に決まってる。
しかし、時既に遅し。それが明らかになった頃には、いろんなソフトを書いてきた優秀なプログラマではなく、競技プログラミングに特化したアスリートばかりが入社するようになってしまっていました(というのは言い過ぎで、超超優秀な人たちはソフトも書けるし競技プログラミングでも優秀だから、そういう人たちは入社後も活躍している)。
事態を更に悪化させたのが、LeetCodeやモックインタビュー等によるコーディング面接対策サービスの勃興でした。コーディング面接に特化した訓練を積んだ面接者が激増した結果、エンジニアとしては十分優秀なのに面接訓練を積んでこなかった人が面接に非常に通りにくくなるという現状が生まれてしまいました。
もちろん各社この状況は十分認識していて、さまざまな試行錯誤が行われている状況です。ですが、これといった対策は未だに生み出されていないようです。
どうすればいいんでしょうね?
こんなことを言っている連中のうち、大学以降で学ぶ数学を理解してる奴は1%にも満たないだろう。残り99%強は以下の2種類に分類されると思う。
前者は、たとえばフェルマー・ガロア・ラマヌジャン等の「逸話」が好きなだけとか、「数学の○○という分野が✕✕に応用される」みたいな話が好きなだけな奴である。
こういう連中は数学に限らず、どこにでもいる。プログラミング等の具体的なスキルは無いが、技術のトレンドを知ることでIT通ぶってるような奴。率直に言って、私はこういう奴が嫌いだ。
あとは、数学的な内容が全く無いわけではないが、「0.999... = 1になるのは不思議」とか「Fibonacci数列の比が黄金比に収束するのは神秘的」みたいな、どうでもいいようなことにいつまでも夢中になってる奴。
プログラミングで言えば、Hello worldとかFizzBuzzなどに、「感動」を覚えているよく分からない奴である。まあ、知能が低いのだろう。
後者については、まあ好きな人はそれでいいと思うが、単純に、私は全く面白いと思わない。
中学・高校入試などに出てくる図形問題は、出題者はまず間違いなく余弦定理などを使って答えを求めている。そのような問題のうち、上手いやり方を思い付くと小学校の範囲で解ける問題が出題されるわけだが、いい大人がそんなもんやって何が楽しいのか甚だ疑問だ。
あれは単純に、制限時間内に出題者の想定した解き方を思い付けるかどうかという遊びであって、プログラミングの技術ではありません。
競技プログラミングで求められるのは、単に「競技プログラミングの問題にしやすいごく一部のアルゴリズム」のひらめきです。
一方、現実のソフトウェア開発には、モジュール設計、ミドルウェア、OS、ハードウェア等の広範な知識が求められます。
また、アルゴリズムを学ぶなら、アルゴリズムの本を読めばよいのであって、わざわざ競技プログラミングを通じて学ぶ必要はありません。
喩えるなら競技プログラミングとは、「数学コンテスト」と銘打ちながら、ただの単純計算問題しか出していないようなものです。
それも「19 * 21 = (20-1)(20+1) = 400-1 = 399」のような、単に上手いやり方があるだけで、数学的に重要でも何でもないような問題を解く速さを競っているに過ぎません。
はてブのホットエントリ(総合)で月内に数多く[あとで読む]タグを集めたエントリ
225あとで/1710users Windowsの「タスクマネージャー」を開発した本人が直々に使い方や知られざる機能を伝授 - GIGAZINE
151あとで/1895users Google社のテクニカルライティングの基礎教育資料がとても良かったので紹介したい - Qiita
136あとで/1235users Amazonの従業員が学ぶ伝わる文章構成の極意|Sangmin Ahn|note
131あとで/1221users 社畜も唸るアマプラ邦画 - はてな匿名ダイアリー
122あとで/2599users アフリカ出身・京都精華大サコ学長 コロナ問題でわかった「日本人のホンネ」 (1/4) 〈dot.〉|AERA dot. (アエラドット)
121あとで/1823users 普段使ってる便利なWebサービス教えて - はてな匿名ダイアリー
111あとで/1207users エンジニアはどのようにして技術を学べば良いのか | /etc/motg
110あとで/527users 第1回 CDN の 仕組み (CDNはどんな技術で何が出来るのか) | REDBOX Labo
110あとで/2292users いったい検察庁法改正案の何に抗議しているのか|徐東輝(とんふぃ)|note
110あとで/1539users 発信するということ|村本大輔|note
109あとで/748users 伝わる提案書の書き方(スライド付)~ストーリー・コピー・デザインの法則 | knowledge / baigie
102あとで/1821users #検察庁法改正案に抗議します Q&A : 東京法律事務所blog
101あとで/962users 競技プログラミングで解法を思いつくための典型的な考え方 | アルゴリズムロジック
100あとで/552users JavaScriptの非同期処理Promise、AsyncとAwaitの仕組みをGIFアニメで解説 | コリス
100あとで/568users 便利なツールやWebサービス - JavaScript勉強会
99あとで/605users 短編映画『カメラを止めるな!リモート大作戦!』本編 - YouTube
99あとで/807users 『無敗営業』の著者が語る営業のコツが学びが深すぎてヤバい!! - Togetter
99あとで/1342users AWSの膨大で複雑なサービス群をすべて「たった1行」で説明していくとこうなる - GIGAZINE
99あとで/1506users 太陽系消滅までの22分をループし続けるオープンワールド宇宙ADV「Outer Wilds」がとんでもない傑作だった|てっけん|note
98あとで/1360users 【朗報】iPadを使って英語論文を10倍のスピードで読むライフハックが発見される - Togetter
98あとで/1400users 八木啓代のひとりごと 黒川弘務の正体
97あとで/962users どうやってテクノロジーを追いかけていますか?ジュニアソフトウェア開発者として応募したときにCI/CD、クラウドコンピューティング、Dockerとか大量のことを要求されました。もういっぱいいっぱいです。 - Quora
96あとで/537users タダで学べるデータサイエンス名著5冊 【日本書は高額でも英語ができれば怖くない】 - Qiita
96あとで/516users 『みんなのデータ構造』でデータ構造の基礎を学んだ - valid,invalid
96あとで/561users 自動テストに限界を感じた私がなぜ形式手法に魅了されたのか - 若くない何かの悩み
94あとで/833users たった20万円で作ったサイトが6ヶ月後に月間300万PVを達成した方法【SEO】|阿部隼也|note
93あとで/588users プロダクトの成功に必要な 3 つのステージと 20 のタスクについて:現場の動き方をまとめました|Fritz | Product Manager @ Mercari|note
92あとで/847users 大体いい感じになるKeynote・Googleスライド用無料テンプレート『Azusa 3』作った - SANOGRAPHIX BLOG
91あとで/1353users 趣味の電子工作をする前に知っておきたかったこと - izm_11's blog
91あとで/1291users コロナに乗じて町内会の属人業務を改善しまくった一人のおばあちゃんの話 | Books&Apps
競技プログラミングは、プログラミングの技術とは何の関係もないです。あれは、「巧いやり方があることが分かっている問題を、制限時間内に手際良く解けるか」を試しているに過ぎません。
受験競争の激しいアジア圏に固有の特徴なのでしょうか。そういった「問題解きの上手さ」を「賢さ」だとか「地頭の良さ」だと思う人が多く存在するようです。小学校受験や中学校受験などが盛んなのも、その表れでしょう。
アルゴリズムを学びたいのであれば、アルゴリズムの本を読めば良い話です。たとえば、
は、世界的に有名な計算機科学の教科書で、基本的なアルゴリズムとその計算量等の性質を丁寧に解説しています。
これは少し考えれば納得できるはずです。たとえば、社会人になって英語を再学習したいと思ったとき、わざわざ大学の入試問題を解こうと思う人はいないでしょう。普通に、英語圏で書かれた文章を読んだり、自分でも書いたりすればいいです。
プログラミング未経験者から「プログラミングを勉強してみたい、でもどのプログラミング言語をやればいいのかわからない」というような悩みを聞くことがあるので、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) の現代版かつより初心者向けなものを書いてみたいと思ってこの記事を書きなぐった次第である。あまり真に受けないよーに。
理数系やエンジニア(プログラミングとか設計とか)の業務で、理数的な考えを巡らすことがある。これは言語で考えると言うよりは、なにか得体のしれない脳の動きをしている気がする。プログラミングなら変数や構造の設計とかになるのかもしれないが、そういう具体的なところではない。もっと抽象的なところで言語化できない何かが脳内で動いていて、ある程度まとまると一気に理路整然とアウトプットする。このアウトプットに至るまでの部分である。
私はこれを「沈む」と言っている。傍から見るとぼーっとしているように見えるので、仕事していないように見られるのが困る。しかし、この沈みがうまくいくとよい結果が出せる気がする。またこの沈みの感覚が心地よく続けられているときは、理数系の勉強がはかどる。
例えばプロの数学者はこの沈みにおいてとんでもない深海で永遠に潜り続けられるのではないかと思う。また例えば競技プログラミングの上級者は、一瞬で深海に沈んで一瞬で水面まで戻る技術に優れるのではないかと思う。
こういう「沈む」みたいな表現について、なにかもっと具体的または別の説明があれば教えてほしい。例えばスポーツにおけるゾーンとかはこれに近いだろうか?
ちなみに私は最近幼児を育てているのだが、幼児と接する限り沈むことは許されない。何らかの呼び出しですぐ水面に戻される。なのでこの沈む感覚が鈍っている気がする。あと普通のデスクワーク社会人でも、電話取りとかしていたら沈めないと思う。
東大にもいじめはある.むしろ能力の低い人に対する風当たりはかなり強い.周りは天才ばかり.才能なんて言い訳だと思って戦ってきたけどやっぱり奴らとは何かが違う気がする.精神科のカウンターにいたら発達障害らしき男が通っていた.ちょっと喋り方のおかしい男をみんなでいじめて精神科送りにする世界観.才能のないキチガイはいらない.数学ができなければ人権はない.競技プログラミングで水色しか取れないやつは算数パズルのできない無能.それでいて女の子にかかっている圧力は低い.とんちんかんな発言をしても許されてる感.この全てを皆わかっているが明言すれば抹殺される.卒業できるかも怪しい (人間関係のため) 俺はここで数学をやりたかったはずだ.なぜこうなった.