「関数型言語」を含む日記 RSS

はてなキーワード: 関数型言語とは

2020-05-27

anond:20200527201728

とりあえずC言語関数型言語って一体どこの平行世界の話だ?それに関数型言語状態を持つことができないっていったい?

fullStackEngineer() さんの脳内が一体どうなってるのか調べてみたいな〜♪

オブジェクト指向が分からないあなたへ

どうも、都内の某企業に勤めるフルスタックエンジニアです。この記事では、ITの非専門家に向けて、オブジェクト指向解説をしたいと思います

小学生プログラミング教育が開始されたり、AIIoTなどの技術が身近になった今日オブジェクト指向理解しておくことは極めて重要です。なぜならば、オブジェクト指向ITエンジニアとっての「共通言語」であって、今やあらゆるソフトウェア技術オブジェクト指向の上に成り立っているからです。したがって、オブジェクト指向理解すれば、ITのすべての分野の基礎が身についたことになります。難しい概念がいくつか出てきますが、分かりやす解説するので頑張ってついてきて下さい!

オブジェクト指向とは

まず、オブジェクト指向とは何かを解説します。オブジェクト(object)とは、「モノ」のことです。言い換えれば「モノ指向」です。つまりコンピュータのようなバーチャル対象ではなく、現実のモノをモデルプログラミングしようというのが、オブジェクト指向定義です。この考えは、今流行りのIoT(Internet of Things = モノのインターネット)にも取り入れられ、爆発的に影響力を増しています

モノという考え方は、18世紀哲学者カントに遡りますカント純粋理性批判において、理性と経験によって認識できる以前の「物自体」という概念提唱し、大陸合理主義イギリス経験主義を統一しました。オブジェクト指向におけるモノとは、カントのいう物自体です。したがって、オブジェクト指向世界の真理を記述できます。そのため、コンピュータというバーチャル世界を超えて、IoTを作ることが可能になります

現代プログラミング言語オブジェクト指向サポートする最も代表的言語Javaです。これに対して、CやC++といった旧来の言語関数型言語といい、現在では顧みられることはありません。また、JavaMicrosoftであるC#や、Javaに組み込んで使うマクロ言語であるJavaScriptなどもオブジェクト指向言語であり、プロエンジニアは好んでよく使います。一方、学生向けの教育用言であるPythonRubyなども、一応オブジェクト指向サポートしています。これらはプログラミング入門には適していますが、実務で使われることはありません。

オブジェクト指向の三要素

オブジェクト指向で最も重要な要素は

の3つです。これらを駆使することで、食卓から宇宙までを豊かにするIoTを作ることが可能になるのです。一つ一つ解説していきます

カプセル化

カプセル化とは、実装利用者から見えなくすることです。

たとえば、ソフトウェア脆弱性があったとしても、カプセル化をしていれば、利用者からはその脆弱性は無いように見えます。したがって、オブジェクト指向で作られたソフトウェアには、セキュリティ上の問題存在しません。

また、IoTを用いていない従来の家電製品などは、ボタンがたくさんあったりして操作がとても複雑です。カプセル化を応用すると、この操作を全く包み隠してしまっても、機械が使えるようになりますiPhoneスマートスピーカータッチパネルや声認識などで操作できるのは、カプセル化のおかげです。逆に、ガラケーボタンがたくさんある家電製品などは、オブジェクト指向(=IoT)で作られていません。

継承

継承とは、あるオブジェクト性質を別のオブジェクトが引き継ぐことです。

たとえば、人間は「歩く」「喋る」などの動作を行え、鳥は「飛ぶ」「鳴く」などの動作が行えますオブジェクト指向世界では、鳥を継承することで、人間が飛んだり、鳴いたりすることができるようになります。これを応用したのが、VRVirtual Reality=仮想現実)です。

また、iPhone携帯電話であるにも関わらず、ツイッターをみたり、アマゾンで買い物ができたりするのもオブジェクト指向のおかげです。つまりiPhoneツイッターアマゾン継承しているのです。それだけではなく、iPhone時計や財布、メモ帳など、現実世界の多くのもの継承しています

ちょっと抽象的になりますが、この考えを突き詰めると、次のような応用が生まれます。将来必要となるすべての機能実装したオブジェクトを一度作っておけば、後続の開発者はそれを継承するだけで、新規の開発なしに新機能を追加することができます。このような性質を「再利用性」といい、ソフトウェア開発では極めて重要な考え方となります継承はこの再利用性をもたらすために、ソフトウェア開発のスピードを爆発的に加速させ、現代ITの発展の原動力となりました。

ポリモーフィズム

ポリモーフィズムは、日本語では「多態性」と言います多態性とは、読んで字のごとく、多くの状態を持つということです。

オブジェクト指向では、多くの状態を持つことができます。一方、C言語などの関数型言語状態を持つことができません。関数型言語では、プログラムを関数(つまり入力と出力をもつブラックボックス)の合成として記述します。関数は、中学校数学で学んだように、入力に対して出力が一意に定まるので、状態を持つことができないのです。この制約を「参照透過性」と言います

オブジェクト指向では、参照透過性の制約がないため、プログラマは自由コードを書くことができ、関数型言語と比べて遥かに生産的です。また、上に述べたように状態を持てるということは、プログラムの入力に対する出力を無数に持てるということです。この応用がAI(Artificial Intelligence=人工知能)です。AIが、まるで人間が考えたかのように答えを出すことができるのは、ポリモーフィズムにより無数の出力を得ることができるからなのです。

おわりに

全体的に難解な記事となってしまいましたが

部分的にでも理解すればIT世界を見る目が変わるはずです。

うさんくさい情報に惑わされずに、このような本物の知識を身につけ

そして、皆さんにはIT未来を見通せる人材になっていただければと思います

2020-05-21

初心者向け】プログラミング言語人気TOP20簡易解説

概要

プログラミング経験からプログラミング勉強してみたい、でもどのプログラミング言語をやればいいのかわからない」というような悩みを聞くことがあるので、https://redmonk.com/sogrady/2020/02/28/language-rankings-1-20/ に載っている人気の言語TOP 20について、未経験者が最初に学ぶのはどの言語が良いかという観点簡単解説してみます

対象読者はプログラミング経験者なので、なるべく難しい言葉を使わないようにしたつもりです。また、正確性よりもわかりやすさを重視しているので何かしら間違っているかもしれません。ご留意ください。


ランキング

1位 JavaScript

Webブラウザの上で動くプログラミング言語。元々ただの文書しかなかったインターネット世界に、グリグリ動くページを作りたいという欲求により生まれた。JavaScriptのおかげで今のWebページグリグリ動きまくりである

元々HTMLちょちょっといじる為だけのものだったが、どんどん進化を続けて今は一つの超人プログラミング言語である。今ではブラウザ上でなくても普通に動かせる(Node.jsという)ので様々な用途で使われている。

ブラウザ上で動くプログラミング言語基本的JavaScriptしかないので、JavaScriptはすべてのWebプログラマが学ぶ必要があると言っても過言ではない。

ちょっとしたプログラムを書いてすぐブラウザ上で動かせるので楽しい。そういう点ではプログラミング入門に適していると言えるかもしれない。


2位タイ Python

機械学習を始めとしたデータサイエンスの分野で激烈に人気のある言語理由としてはNumPyとかTensorFlowのようなライブラリが充実しているというのが大きく、資産がたくさんあるのでこれからも使われ続けるであろう。

Webも作れるが、日本ではWeb系の求人は少ない気がする。

言語としては、誰が書いても簡潔で読みやすコードになる傾向にあり、小さいプログラムを書くにはいい感じである米国ではプログラミング教育Pythonがよく使われているという話も聞くし、初心者プログラミングを始めるのにはいいのかもしれない。

将来AIデータサイエンスをやってみたいと思うのであればPythonから始めましょう。


2位タイ Java

ランキングでは常に一位に近い順位をつける言語Javaができた当時は色々と革新的だったらしく、組み込み業界からWebまで流行りまくっていた。今でもその名残か使っているところは多い。過去資産プログラマの数が多いのが一番の理由だと思う。AndroidアプリJavaで書く(もしくはKotlin)。

実行速度が速く、また下位互換性がしっかりしているので過去に書かれたコードが新しいマシン上でも動きやすいのが長所短所としては、歴史ある言語下位互換性を保っているため文法が古い感じがする。タイプ量も多くなるし、学習コストJavaScriptPHP, Ruby, Pythonあたりに比べると高い。

正しく使えば強力な言語だが、日本のクソSEもどきは全員(自称JavaエンジニアであることがJavaが毛嫌いされる理由の一つになっている[要出典]。いわゆるGAFAJavaをかなりヘビーに使っているので要は玉石混交ということである

Androidアプリ作ってみたいというならJavaからはじめるのはアリ。


4位 PHP

Webページを作るためだけに生み出された言語プログラマの数が非常に多い。日本求人が一番多いのはJavaPHPであろう。

初心者でもとっつきやすく、すぐに動くプログラムを作れるので入門に使われることも多い。学習コストの低さはトップレベルであるしか基本的には古くてダメ言語とみなされており、PHPで作られたWebサービス脆弱性が多いという都市伝説もある。真実は闇の中である

近年のバージョンアップ比較的良い方向に向かっている(と個人的には思う)ので、選択肢としては意外と悪くないかもしれない。


5位 C#

Microsoftが生み出した言語で、.NETというプラットフォームを使ってWebサービスを、Unityというゲームエンジンを使ってゲームを作ることができる。

最近有名なのはUnityで、今やほとんどの3Dソーシャルゲーム(の一部分)はUnityで作られている。そう考えるとC#プログラマ結構いそうだし将来もある程度安泰かもしれない。もちろん.NETも広く使われている。

ただし.NETUnityも触らない人にとっては基本的に縁のない言語である

なんかゲーム作ってみたいかもなーと思う人はC#から始めてもいいんじゃないでしょうか。


6位 C++

C言語に色々な機能を足しまくってできた巨大な迷宮のような言語言語仕様は複雑怪奇だが実行速度は全プログラミング言語中でも最速レベルなので、パフォーマンス重要な開発において使われる。アプリサービスというよりは、それらを作るためのライブラリプラットフォームなどを作るときに使われることが多い。Web系の会社でいうとGoogleなどは主にC++を使っている。

基本的には初心者が触る必要はない。競技プログラミングを極めたいとかならC++からはじめてもいいかもしれない。


7位タイ Ruby

このランキングの中で唯一、日本人によって作られた言語。作者のまつもとさんは世界有名人である。ちなみに島根県出身、在住。

プログラミングを楽しくすることがモットーらしく、確かに書き味は良い。また作者が日本人なこともあってか日本情報が多く、情報収集という点ではとてもやりやすい。

Ruby on RailsというWebサービスを作るためのフレームワーク世界的に大ヒットしたため、必然的Ruby知名度も上昇した。少し前まで日本Webスタートアップは猫も杓子もRuby on Railsといった様相であった。今は少し落ち着いたようだが今も人気は根強く、Webプログラミングスクール等ではだいたいRuby on Railsを教えているとかいないとか。

Webに興味があるのならRubyから始めるのが一番無難選択肢と言える…のか?まあ悪くはないと思う。今でも需要は多い。スクールに行きたいのであれば黙ってスクールカリキュラムに従いRailsをやりましょう。


7位タイ CSS

これは他の言語とは毛色の違う言語である。というかCSSプログラミング言語と呼んでいいのだろうか?

CSSHTMLを装飾するためのものである。字に色をつけたり、背景を変えたり、レイアウトサイズを変えたりするのは基本的CSS役割である

すごく大雑把にいうと、HTMLで表示する内容(文章画像)を定義し、CSSでその見た目を整え、JavaScriptで動きをつける。というのがWebサービスの”見た目”を作るやり方である

なので、Webに興味があるのであればある程度はCSS知識必要である。が、これ単独で学ぶようなものではない。Webサービスを作る時についでに調べて少しずつ覚えていけば良い。


9位タイ TypeScript

TypeScript比較的新しい言語で、JavaScriptさら拡張したものであるMicrosoftによって開発されている。

プログラムにはデータの型(Type)というものがある。例えば「1」や「2」は数値型、「あいうえお」は文字列型といった具合である。大まかに言うと、この「型」に対して厳しい言語は型チェックによりバグの混入を防ぎやすいがプログラムを書くのが大変、というかコード量が多くなる。型が緩い言語サクサクかけるし短く書けるがバグを生みやすプログラマの力量が問われる。ランキングの中だとJavaScript, Python, PHP, Ruby, Perlあたりは緩く、Java, C++, C, Swift, Go, Kotlinあたりは厳しい。

そんな中、世で広く使われているJavaScriptの型チェックが緩すぎるのでもっとちゃんと型をつけたい、そんな要望を叶えるのがTypeScriptである基本的JavaScript理解している人間が使うべき上級者向け言語というのが現状なので、初心者が始めるには適していない。

ただしこの先主流になっていく可能性は大いにあるので、どこかのタイミングで勉強してみても損はしないと思う。


9位タイ C

C言語基本的OSを作るための言語であるOSというのはWindowsとかmacOSとかLinuxといったもので、マシンを動かすための基盤となるソフトウェアであるAndroidスマホにはAndroid(という名のOS), iPhoneにはiOSが載っている。コンピュータ基本的OSがあって初めて動かすことができ、OS提供する機能を使ってブラウザスマホアプリなどを動かせるのである

というわけで、初心者が学んで実用的なものではない。ただしC言語というのは世の中の様々なものの基盤になっており、他言語文法C言語から拝借しているものが多い。例えばC言語をある程度勉強していればJavaPHPなどはなんとなく雰囲気で書けてしまったりする。

そういうわけで、コンピュータサイエンスをこれからちゃんと学んでいきたいという人(大学生とか)はC言語から始めるのもいいと思う。ちなみに筆者は初めて書いた言語はCであるが、意味理解できるまでに2年かかった。才能がないとこうなるので注意。


11Swift

SwiftAppleによって作られたAppleのための言語であるiOSアプリiPhoneアプリと言い換えても良い)を作るためだけに存在している。

言語自体は他と比べて新しいため文法機能イケてる雰囲気があるので基本的はいいのだが、iOSアプリ以外で使っている人は多分世界で5人くらいしかいないと思う。なのでiOSアプリに興味がない人はやめておきましょう。iOSアプリを作りたいあなたは他に選択肢はない。Swiftをやりなさい。


12Objective-C

Swiftが生まれる前はiOSアプリを書くためにObjective-C必要だったため、多くの人がこの言語を使っていた。が、今はSwiftがあるので、古くからあるObjective-Cアプリメンテナンスする時以外に使う機会はない。名前すら覚える必要がないので存在を忘れてしまって構わないが、これだけ順位が高いということは多くの企業がいまだにObjective-Cで開発し続けているということであり、ニッチ需要はこれからも残るのかもしれない。


13位タイ Scala

Scala関数型言語と呼ばれる言語の一つ。Javaの親戚みたいなものなのでJavaとの連携が容易であり、上手く使えば性能も出るしコード量も少ないしバグも少なくて最高、な感じらしい。が、その分難易度が非常に高いので初心者が手を出すものでは絶対にない。どんなに早くても他に二つは言語を覚えてから勉強しましょう。Javaを覚えてからやるのがベター


13位タイ R

R言語データ解析用のプログラミング言語である

正直ほとんど書いたことがないのでよくわからないが、ビッグデータというワード流行りだした頃はデータ解析用途でかなり流行っていた。その後機械学習AIブームが来て、今でも現役で使われてはいるがPythonがどんどん勢力を拡大しているので少し目立たなくなってきた、というのが個人的な印象である。まあプログラミング初心者最初にやるようなものではないことだけは確かである


15位タイ Go

Go言語比較的新しいGoogle製のプログラミング言語で、Googleのように巨大なシステムでの使用目的に作られたものであるしかし実際には様々な企業が利用しており今一番勢いのある言語と言ってもかもしれない。

他のプログラミング言語の良い点や悪い点を参考に設計されており、実行速度の速さと生産性プログラムの書きやすさ、読みやすさ)を両立できるような言語になっている。ただし、機能を増やすのではなく本当に重要機能だけに絞るという思想があるようで、他の言語に慣れていると機能の少なさに不便を感じるかもしれない。

学習コストが低いという点では最初に学ぶ言語として適しているかもしれないが、GoだけでWebサービス等をサクッと作れるのかというと微妙なので、アウトプットを出しにくいというのはあるかもしれない。

二番目や三番目に学ぶ言語としてはオススメ


15位タイ Shell

シェルというのはテレビなんかでハッカー的な人間PCを開いて謎の黒い画面に白い文字を打ち込んだりするアレである説明としては正確ではないがまあ大体そんなもんである。何が言いたいかというと初心者最初に学ぶとかそういうものではない。しかし実際に開発の仕事をやるとシェル知識はあったほうがいいし、シェルに多少詳しくなるとPC上でテキスト操作をしたりファイルをいじったりというのが便利にできるようになる。ただし(通常は)極める必要はない。

Shellと言っても実際にはbash, csh, tcsh, zshなど色々あるのだがそれらをひとまとめにしてShellとなっているようだ。


17PowerShell

PowerShellは上のShellの親戚みたいなもので、ShellがMacLinuxで動くのに対しPowerShellWindowsで動く。そんだけである。あと正直あまり知らない。


18位 Perl

ランキングの中ではかなり昔からある言語で、サーバーと呼ばれるマシンには大体Perlが入っている。そのくらい市民権を得た超有名言語で、C言語C++で書くほどでもない小さなプログラムはとりあえずPerlで書く、というくらいには広く使われていた。インターネット初期はほとんどのWebサイトはPerlで書かれていたとかいないとか。PHPなどの登場はその後である

今でも広く使われてはいるが、RubyPythonPerlの後継的な位置付けであるため、初心者が新しくPerlを学ぶメリットというのはあまり思い浮かばない。何か特定目的があるのであればいいと思う。


19位 Kotlin

Kotlin簡単に言えばBetter JavaであるJavaをもうちょっといい感じに書きたいという気持ちで作られた言語で、Scalaと同じくJavaの親戚のようなものである

ランキングの中ではSwiftと並んでかなり新しい部類。AndroidアプリKotlinで書けるようになったことがきっかけで人気が爆発的に上昇、今ではWebの開発にも使われていたりする。

とは言えまだまだ新参者といった感じで、ドキュメントなどの情報も他の言語に比べると物足りないので初心者には厳しいかもしれない。

言語自体はとてもいい感じなので、もう少しコミュニティ成熟してくれば最初に学ぶ言語選択肢として有力になるかもしれない。


20Haskell

HaskellScalaと同じく関数型言語であるScalaJava的な書き方でも動くの対し、Haskellは「純粋関数型言語」と呼ばれ、ランキング中の他の言語とは一線を画した書き方になる。どう考えても初心者にはオススメしない。少なくとも他に二つは言語マスターしてからやりましょう。


総評

なんとなくWebに興味がありそうならJavaScriptRubyもしくはPHPAndroidアプリに興味があればJavaiPhoneアプリに興味があればSwiftAIデータ分析に興味があればPython3Dゲーム開発に興味があればC#。この辺りをやりましょう。

特に目的がないのであればフィーリングで選んで大丈夫ですが、やめておくべき言語というのはあるのでその辺だけ参考にしてもらえれば。

なお筆者はただのヘボプログラマであり、大好きな記事http://www.mwsoft.jp/column/program_top10.html) の現代版かつより初心者向けなものを書いてみたいと思ってこの記事を書きなぐった次第である。あまり真に受けないよーに。

2020-04-28

anond:20200427134207

これを機にスマホでの衛生的な通話スタイルを身につけてほしい

2020-04-19

[] [増補改訂関数プログラミング実践入門

コロナ自粛勉強中。以前買ったHaskell本を読み直している。落ち着いて読めば結構理解できる。

https://gihyo.jp/book/2016/978-4-7741-8390-9

この本の概要

現場の方々に向け,関数プログラミングエッセンスを厳選解説した入門書

関数型言語Haskellを用い,基本からJava 8/C/C++/Python/JavaScript/Rubyをはじめ各種命令言語との比較オススメの開発/設計テクニック等を平易に解説

改訂版ではGlasgow Haskell Compiler 8ならびに新機構のStackage/stackへの全面対応関数型言語由来の他言語機能解説章(第8章)の新設(Swift/Go/Rust/C#等の例も紹介)をはじめ実践開発に役立つ解説を増強し,関数型言語でも命令言語でも活かせる「使える基本」を凝縮しました。

こんな方におすすめ

2020-03-26

anond:20200326074153

関数型言語ムリってのは完全に冗談だと思って乗っかった ぶっちゃけそんだけ色々な環境に手出してるなら今更言語だのAPIだので学習につまづいたりしないだろ 問題解析解決能力、つまり主の実務上の有能さとかは別として…… 自分にとって新しいテクノロジを受け入れる素養があることが分かっているのに、こんな無駄な問答をしてるのがよく分からんな。

ドキュメントを読む能力に着目した方が、新規言語学習成功/失敗の分離性能が高いんジャマイカ英語よめる?テクニカル文章よめる?それがムリならガンバって日本語ブログググることだな。やってきた言語どうこうより、そこが分かってない事の方が問題だしエンジニアとしては致命的では。。。

2020-02-27

anond:20200227004129

何か関数型嫌いみたいだが

高階関数

とか

Lambda

とか

イミュータブル型

とか、最初関数型言語で使われ始めた機能が、Kotlinなんかの後発言語に取り入れられて便利に使われるっていう流れがあるんやで

勉強無駄にはならんのよ

偏見に満ち溢れた俺の書いたことのあるプログラミング言語説明

1つにつき3行で書いた、言語の話は炎上しがちだから匿名で。

C言語:

現代だと電子機器プログラミングで使うよ!

Linuxとかサーバープログラムの内部で使われることが多いけど、

自分で手を加えることは少ないか安心して!

C++:

実行速度が超高速なのと複雑怪奇な構文が特徴だよ!

ゲームプログラミング動画編集ソフトといった高いパフォーマンス

求められるシステムで使われるイメージがあるから最初は近づかなくても良さそうだね!

C#:

Unityゲーム作る時に使うよ!

比較的書きやすくて勉強になるからオススメ出来るけど、

Microsoft にズブズブな印象が強いのがちょっと気になっちゃうね!

Java:

Androidアプリとかサーバーアプリ作るのに使えるよ!

勉強やすくて個人的には良いと思うけど、

現代だったら他の言語のほうが書きやすくてオススメかな??

Scala:

Javaの強化版で、サーバーアプリ作るのに使えるよ!

関数型っていう意味不明概念が混ざってるから

最初は近づかないほうが懸命だと思うよ!

Kotlin:

Javaの強化版で、Androidアプリとかサーバーアプリ作るのに使うよ!

もしAndroidアプリを作るなら最初にこれを学ぶと良いか???

とにかく書きやすいし書いて気持ちが良いし、名前可愛いね!

Objective-C:

iosアプリを作るのに使えるよ!

今はもっと書きやす言語があるから学ばなくても良いけど、

iosアプリ作ってる時にどうしても触らなきゃいけないときが来るんだよね...。

Swift:

iosアプリを作るのに使うよ!

もしもiosアプリ作りたいんだったら実質これしか選択肢は無いか覚悟してね?

書きやすい方だから身構えなくても大丈夫だけど、Macが無いと書けないから気をつけて!

PHP:

サーバーアプリ作るのに使えるよ!

個人的にはあんまりきじゃないかなって思うけど、

PHPお仕事はいっぱいあるからこれが出来ると飯が食えて嬉しいね

Ruby:

サーバーアプリ作るのに使えるよ!

学びやすいし物を作る時のスピードも早いから、

最初に学ぶ言語としては結構いかもしれないね

Python:

サーバーアプリとか人工知能(笑)とか作るのに使えるよ!

個人的には本当に好きじゃないけど、仕事人口も多いのが特徴だね!

おっぱいと語感が似ててなんだか幸せになってきたね!

JavaScript:

webアプリサーバーアプリを作るのに使えるよ!

環境を整えたり流行を追ったりするのがちょっとだけ面倒くさいけど、

webアプリ選択肢が他に無いから仕方なく使ってるよ!

Go:

サーバーアプリを作るのに使うよ!

Googleで開発された言語で、書いてるとドーパミンが出るよ!

僕が大好きな言語なんだけど残念ながら仕事は少ないね、本当に残念だ。

Lua:

ほとんど見かけないのに何故かたまに書かざるを得ない事がある言語だよ!

既存アプリケーションのプラグインを書く時に強制されたりするかな?

言語自体は単純だから、使う時が来たら覚えるぐらいでいいと思うよ!

Perl:

遥か昔に広く利用されていた言語だよ!

今学んでも古い会社しか使いみちが無いから、

令和に新しく学ぶ必要はないかもね!

BASIC:

プログラミング初心者が触りがちなイメージがあるよ!

きっと今でもどこかの世界では使われてるんだろうけど、

令和だったら他の言語も学びやす環境が整ってるから学ばなくて良いかもね!

Haskell:

正直に言うと何に使われてるのかイマイチからないんだ、ごめんね。

関数言語っていう(僕にとっては)難しい概念で、

自分を更に高めたくなったら調べてみるのも良いかもね?

2020-02-23

2020年プログラミング言語解説

Ruby

まつほろひとゆきが作った日本産コンピューター言語パールというコンピューター言語を元に作られていてWebサービスを作るためのフレームワークを搭載している。代表的WebフレームワークtDiary

C

デニス立地さんがNTTで開発した言語マルチクスというOS作成するために作られた。わざと複雑な言語仕様にすることで自分役職ポジションを守ろうとしていたが、思った以上に世の中の人間はこの言語を使いこなしてしまい、超有名な言語になってしまった。スーファミゲーム制作にさえ使えなほどの超高級言語

まじないと呼ばれるプリプロセッサでの書き換えが必要な謎の文字列を埋め込む必要があったり、言語仕様曖昧な部分も多く、同じソースなのに実行環境によって動きが異なる、欠陥言語である。(32bit向けプログラムが64bit環境動作しないなど)

C++

オブジェクト指向言語。すべてのオブジェクト指向言語はこいつから始まった。

主にWindows上で動作するゲームを作るための言語。今ではUnityとか色々なゲーム開発の環境とかあるが、結局はパフォーマンスとか考えたらC++使うことになる。

代表作はOpenGLDirectX、Window10、LibreOffice など

Java

JavaScriptから派生した言語。読み方は(ジャワジャワ島のジャワ。)。もともとはOracle創始者博士趣味作成して、現在Oracleデータベースの基礎となるテクノロジーアプレットという実行するための専用プログラムインストールしないと、Javaで作ったプログラム(.classファイル)は動作しない。マークコーヒーだと思われがちだが、紅茶(ジャワティー)である

アンドロイドOS作成するためにも使われており、アンドロイドOSカーネルJava制御されている。そのため定期的にGCが走るので、アンドロイド端末は定期的に動作を停止することがある(いわゆるプチフリーズ)。

対策するためにはGC戦略見直してヒープ領域サイズメモリに乗せるキャッシュサイズなどの調整が必要であるが、げんざいのGoogleにはこれらを調整する人員はすでにいない。

このように業務データベースから携帯電話まで幅広く使われているので、Java技術があっても市場価値殆どないと言われている。(みんな使えて当たり前)

PHP

晩年政界への進出を目論んでいた松下幸之助が、未来社会を見据えて開発した言語。主にWebアプリケーション作成するために使われている。PはパナソニックのP。を略してPHP

かんたんにシェルコマンドを実行できたり、クエリストリングに代入した値を直接グローバル評価できたりするなど、洗練されていてとても便利な言語である

HTMLメール本文の中にもPHPの処理を書き込むことができる。

この世のすべてのサーバーに実行環境存在するので、PHPコードさえあれば、コンパイル不要でどのような環境でも動作する。

C言語の100倍生産性が高く、WikipediaFacebookSlackなどの超一流のサイトサービスで大量のアクセスを捌いている。

WardPressと呼ばれるフレームワーク(全世界Webサイト3分の1以上はWardPressで作成されている)を作成している言語であり、この言語なくして今のWeb存在していない。

データベースとも親和性がある、などと言われることもあるが特に根拠はない。

Go

韓国人棋士を倒したAIに特化したプログラム言語Googleが開発しており、もともとはDartという名前だったが、汚いという理由でなまえがGoに変わった。そのため現在Dartという言語存在していない。

AIに特化しているというだけあり、低レイヤむけの実行ファイル作成する必要があるため、コンパイル必要ではあるが、だいたいどの環境向けのバイナリも生成することができる。

デフォルトディープラーニングを使うための機能を持っていたり、プログラムを並列実行するための機能が備わっているので、コア数の多い環境で高速に動くプログラムを作りやすい。

JavaScript

Javaの元になったプロトタイプベースオブジェクト指向言語。読み方はジャワエスクリプト。W3Mというブラウザの上でインタラクティブWebサイトを動かすために作成された言語。もともとブラウザの上で動くための言語だったが、後にSafariブラウザに搭載されていたV6エンジンというJavaScript言語の実行エンジンを分離してNPMというJavaScriptを直接実行できる環境となった。

それ以降JavaScriptはブラウザ以外にVRゴーグルの中などで動くようになった。

並列プログラミング不可能な作りのため、コールバックを多用して、スパゲッティコードを量産することができる。

NPMを使う奴らは、JSブラウザ環境で使われる言語であることを全然考えてないため、WebpackとかBabelといった謎の開発環境をシコシコ積み上げている。いつかその塔は爆発し崩れ去ることになるであろう。

jQuery

Javaと同じくJavaScriptから派生した言語Javaとは互換性は無いが、JavaScriptの上位互換があるため、JavaScriptのコードをそのまま実行することができる。

$マークから始まる命令のみで構成されているとても縁起のいいプログラミング言語。おもにパララックスなどを実現するために利用されていて、WardPressなどのドライバとしても使われている。

JavaScriptの改良版であり、現在JavaScriptと言われているプログラム言語の99%はjQueryのことである。そのため現在慣習的にJavaScriptと呼ばれているもののほぼ全てはjQueryである

jQueryを覚えればJavaScriptは覚えなくても良い。などと言われるが、正確にはjQueryを覚えた頃にはJavaScriptも覚えている。というのが正確である

TypeScript

JavajQueryなどと同じくJavaScriptから派生した言語Microsoftが開発した関数型言語。開発時はF#(エフシャープ)というコードネームだった。

型に特化した言語であり、Microsoft製のVSCodeというIDE環境しか開発、実行が出来ない。(ただしMacLinux上でも動作可能)

TypeScriptを動かすにはサーバーVSCodeインストールする必要があり、言語IDEバージョンアップも多いため、メンテナスンスが困難である

Swift

iOSを作るために開発された言語関数型言語

前進となるObjectiv-Cという言語が、気持ち悪い構文であったため開発者が不足しており、このままではOSメンテナンスもままならない、という理由最初バージョンわずか14日間で作られた言語

Apple製品の上でしか動作しない。ビルドが非常に遅く一日に60回が限度である

LISP

((最強の言語。全ては関数であり、値であり、式である。)

(制御構文も、(一種の式であり、値である。)))

2019-09-30

関数型言語に対する違和感

メソッドチェーンみたいな書き方する時

途中で知らない関数が出てきたら普通言語なら簡単に調べられるけど

関数言語ってそれが何か調べにくい事ない?

それを知ってる前提というか

そして、今何を受け渡してるかが全然見えない

伝言ゲームを側から見てる感じ

最終的に「答えは1です」って言われても「何が?」ってなる

2019-07-14

大まかな処理の流れとしては関数型言語のやり方はスマートだと思うけど、純粋関数型言語みたいなやりすぎはよくないですね

適切に関数を小分けできていれば一時的ミュータビリティとかは言うほど悪ではないし

「そこで失敗するようだったらプログラム全体が死んでいいよ」っていう副作用を扱うのにいちいち関数シグネチャ変えるのはアホくさい

2019-07-03

関数型言語

もう10年以上信者が頑張ってプッシュしてるけど一部の機能が取り入れられるだけで全く流行らないのな

用途不明確な言語ばかりなのが原因のひとつか。

2019-06-21

Javaをメインで書いているわけではないけど

別にJava良くないか

なんならRubyより静的言語だという点で優れているような。

最近Go流行っているが、それならJavaだって同様に良さそうな気がする。

Java批判すべき点ってなんなんだろう。

- 記述冗長

- nullがたまにうざい

- なんか重厚な感じがする

- 重厚アーキテクチャ流行りすぎた?

- ORMとかが重厚なのが多かった

- ビルドツールが洗練されていない時代があった

- 故に環境構築が大変だった

- tomcat + jar みたいなのがだるかった?

- strutsがしんどかった

- 未だにstruts脆弱性が見つかったりするところ

- xml地獄からアノテーション化したりいろいろと模索していた

- なんかJava案件地雷が多かったとか?

- ちょっと昔には「俺たちイケてるプログラマ」はみんなRailsに移っていった流れがあった?

- Effective Javaよいが、そもそもそういうtips意識せずにそう書けるような言語仕様になってほしかった気もする

- 非同期処理やスレッド処理がやや難しかたか、あるいは言語側でのサポートが薄かったか(?)

言語仕様的な批判と、エコシステム的な批判に分けられそうなきがするな。

関数型言語の関心はScalaClojureに全フリしてもらって、Javaシンプル機能を持つGo方向性なModan Javaになっていってくれれば良さそうな気も。

httpサーブレットとかそのへんが微妙だったかもしかしてGoみたいにnet/httpライブラリが標準であればそれをベースにすることでオレオレフレームワークの乱立を避けることができるか、と思ったけどJAX-RSとかがあるな。

Goだって冗長記述必要言語だが、好かれているし、Javaも悪くない言語な気がするんだよな。

まあ何でもいいが。

ロジカルに考えているようで結局なところ雰囲気的なところに左右されているエンジニア多い気がする。

まあわいも、人気な言語に乗っておいて高単価を得られたほうがいいのでそうするが。今の所Goが肌にあっているんだよな・・。3年ぐらい使って熟練度上がってきたし、さほど悩まずにコーディングすることができる。

PHPの人が好きな、あるいはRubyのmethod_missingなど活かしたテクコードは、書いているやつは気持ちいかもしれないがわいは明示的にinterfaceがわかるコードが書かれていたほうが好きだ。型で振る舞いがわかったり制御されていないと分かりづらくない?複数プロジェクトを掛け持ちするから、読むときに前提知識が少なく読めるコードがいい。

まあJavaもリフレクションでテクいことができる気がするな。

Goがいい。誰が書いてもだいたい同じコードになるから、誰かに作業を振ったとしてもレビューやすい。

まあこれからJavaを書く気はしないが、GoAPI書いているマンから見ると、JAX-RSとかでゴリゴリAPI書いていくの全然悪くないんじゃないかと思うのであった。

最悪別にGeneric入らなくてもいいかもな。別にそんなに困ってない。はいってくれるなら、はいってくれたほうがいいが。sliceに対してmap, each, filter, existsなどのメソッドが生えることになるイメージかな。まあそれは欲しくなるけどな・・・

Scalaもいいんだが、たまにイキったコードを書くと分かりづらくなる時がある。イケてるコードを書こうと思ったとき結構パワーを使う言語だ。なんかモナドってジェネリックを更に強くしたやつだとも捉えられるような気がするな。ゴリゴリ関数型で書こうと思った場合プロジェクト全体に影響がある話なのでアーキテクチャ設計に力がいる気がする。

年をとると大事にするポイントが変わってくるな。昔はスーパープログラマになりたくて関数型言語とかやっていたが、今はいかに効率よく仕事をする=金を稼ぎ自由を得るかを重視している。職業プログラマとなったわけだ。仕様固めたりリリースしたり不具合対応したり運用したり、フリーランスなら税金計算したり、金儲けの方法考えたり忙しいんじゃ。今は結局スーパープログラマとは何か悩ましいよ。「プログラマとして」キチガイレベルにすごい人間というのはまだ見たことがないかもしれない。コーディングが早い?バグ修正が早い?パフォーマンスやばいコードを書ける?設計が優れている?

わいのレベルが低くて、高い人間凄さに気づけていないのかもしれないな。

2019-02-03

anond:20190203181655

関数型言語やると「オブジェクト指向、なくても困らんな」ってなる。

個人的には「特別難しいとは思わないけど、無理して覚える必要もないな」って感じだ。

2018-12-06

anond:20181206181037

昔は食わず嫌いでさっぱり触らなかったけど、仕事で触れたElixirが割と楽しくて今は関数型言語に少し興味が湧いている

2018-06-24

関数型言語、本とか読んで勉強したりコード書いてると大変楽しいんだけど

ネット上で情報検索しようとするととたんに信者たちがオブジェクト指向のディスであったりHaskell信者Scalaユーザー内戦仕掛けてたりしてノイズまみれなのどうにかならないかなあ

関数型言語機能や利点を説明する時にいちいちオブジェクト指向比較してディスらなくていいよ

Haskellではこう書くよ」の後に「Scalaではこうなって面倒だよ」とかつけなくていいよ(たいていよく調べるとScalaでも簡潔に書くための糖衣構文があったりする)

 

オブジェクト指向10年ぐらい前の記事が引っかかるとそんな感じではあるんだけど

2018-06-02

anond:20180602230227

元増田です

回答ありがとうございます

環境にもよりますけど、中学生でCは辛そうですね…

Closureというのは初めて知りました

ていうか関数型言語はまだ手出し出来てません…今取ってるN予備校Scala教えてるのでそのうちやろうかなと思ってはいるんですが、なんか取っ付きにくいっすね

anond:20180602223530

最初言語は何を選びましたか

C言語

当時はゲームを作りたかったら、まずはC言語に手を出す時代だった。

最初一年間でどんな成果物を上げましたか

何の成果もなかった。

というか、挫折した。当時は中学生だったのだ。

現在プログラミング歴何年目で、どんなプロダクトに携わっていますか?

最初挫折から数えていいなら、20年以上経っている。

プロダクトは…。具体的には内緒

汎用的な部品とかそういうタイプのものを作っている。

勉強中の言語技術はありますか?

Clojure

関数型言語を1個も使えないのが悔しくて、趣味でやっている。まだ本を1冊も終わっていないので、先は長い。

どんなプログラマを目指していますか?あるいはあなたの考える理想プログラマとはどんな人ですか?

プログラマであり続けたいが、こういうプログラマになりたいというのは無い。

GetHoge(dbConnection, key), GetFuga(dbConnection, key, key2)

という関数があったとき

dbConnection引数を渡さずにその場でDB接続する版の関数 GetHoge(key), GetFuga(key, key2)

を作りたい

DataTable GetHoge(key) {

var c = CreateDbConnection);

return GetHoge(c, key);

}

DataTable GetFuga(key, key2) {

var c = CreateDbConnection);

return GetFuga(c, key, key2);

}

これでは関数の数だけ同じものを作らねばならないので煩雑である

もっと巧く書く方法はないか

ES2015であれば、

function OpenConnectionAndRun(runFunc, ...args) {

var c = CreateDbConnection);

return runFunc(c, ...args);

}

という関数を1つ用意すればそれで済む。

関数型言語でもカリー化や部分適用を使って似た感じのコードが書けると思う。

C#ではそういった方法はないのか?

2018-04-12

関数型言語の嫌いな所

コメントが書きづらい

メンテしづらい

プリントデバッグしづらい

記号使いすぎ

構文がゴチャゴチャ

 

これ解決したら好きになってやる

2018-04-02

低級言語的なやつとオブジェクト指向言語関数型言語やれば一通りのプラグラミング言語対応できる?

具体的にはcとjavahaskellやろうと思ってる

cはもうすでに勉強してて一通りの仕様理解してるしょぼいプログラムなら書ける

2018-03-30

プログラム)一連の処理の流れをパッケージ化したい

言語に関わらず

リファクタすると細切れなメソッドになると思うんだが

メソッドAはメソッドBからしか呼ばれたくない」みたいなことってあると思うんだ

一人で開発してればそういうのは覚えてりゃ良いんだけど

複数人で開発してると、せっかくいい感じにリファクタしてA→B→C→D→Eってメソッドの流れ作ってるのに

途中だけ使われたり乱入されたり、グチャグチャにされることがある

から、A〜Eをセットにしたり、入り口と出口をコントロールしたいんだよね

 

名前をつけるとしたらModal methodsって言う感じ

今は大体Modelessすぎる

 

もちろんクラスにして〜とかオブジェクト指向的に〜とか関数型言語で〜っていう話になりそうなのは分かるんだが

もっとシンプルコントロールできて良いと思う

けどそういう思想未だ見たことがない、大体みな構造的な方法を取ってる

それじゃリファクタ意味無いし変更するのも大変じゃん?

 

あ、inputが◯◯であることを保証するとか制限するみたいなの、何かあった気が

でもどう足掻いてもめんどいんだよな

面倒臭すぎてうわー!って1メソッドに詰めることもたまにある

2018-03-18

プログラミング歴とプログラミング能力ほとんど関係無い件について

ほとんどの人はもう既に気付いていると思うけど、あえてこの表題言及している人はあまり多くないんじゃないかと思ったので書く。炎上したら💩なのでここに書く。

結論から言うと、プログラミングを何年やったかプログラミング能力はこのぐらいと言うことは絶対にできない!

これは何もIT業界だけでなく他の分野でもそうだ。たとえば野球とか絵画かにも言えることで、ただ年数を重ねればいいってわけではない。勘違いしてほしくないのは、他の業種ではただ年数を重ねればいいといっているわけではない。

コンビニだったら始めはレジ打ちから入るだろうが、だんだん品出し、他者とうまく調整できv、何が売れるか・何が利益率を叩き出すかを把握し、接客態度は絶えず磨き……というように、能動的にスキルを身につけるなければあっという間に「経験した年数」などというものは何の武器にもならないであろう。(「やっても給料変わんない」とかそういうのは抜きにしても)

IT業界でもこれが言えるのだ。

その証

個人的経験によるサンプルしか無いが、ぼくの経験上では年数が高ければ高いほどいいと思ったことは全くない。もちろん2ヶ月の新人と5年目の人での比較はなかなか難しいが、情熱ある新人プログラマ半年で5年目を追い越すなどということはありふれた話だ。あたか大人小学生中学生さらっと数学英語能力で負けるように負ける。

残念ながらしっかりした実証などはないので、周りの環境がそうではない場合は納得できないかもしれないが、以下は明らかであろう。

経験年数とは時間であり、重要なのは時間を代入すると成長度合を求められる関数(ここではFとする)の違いである。(F: time -> ability)

Fの方が大事理由も明らかだ。timeケチをつけようとする例外を除けば誰にとっても同じであり、おもしろくもなんともない。

Fの次元が違う場合は、能力次元文字通り違う。そのため、かなり重要だ。

プログラミング歴が増えることは恥だと思いたい

プログラミング歴2年だからこんなことを知っている」と周りから評価されるというのは、要は「プログラミング2年生」だということだ。これははっきり言って侮辱である。2年プログラミングをやったから知っているんじゃなくて、2年の間で勉強したことたまたま別の箇所で出現したということだ。決して2年やったからではない。2年の間に獲得したスキルがいっぱいあるからだ。2年は重要じゃない。どれだけやったかだ。2年という期間それ自体は全く重要ではない!

プログラミング歴2年なのにそんなことまでできるのか」というのが真の評価なのだ

これはまあまあ高い評価である。「プログラミングを始めてまだ半年なのにそんなことできるのか」という評価はより容易く得られる。年数を重ねれば重ねるほどこの評価に達するのは難しくなる。したがって「プログラミング10年なのにそんなことまでできるのか」という評価ほとんど得られない。ほとんどの場合、「10年やってるからできるんだな」とか、ひどい場合10年やってるのにこんなこともできない」という評価になる。

これもある種、年数というもの全然重要じゃないとみなされている証左であろう。みんな知らず知らずのうちに周囲の人々の経験年数と能力とでおのおの相関図を作り上げて、標準偏差をなんとなく作り出して、「45歳……クソコード……チーン!こいつは偏差値37!落第!死刑!」みたいなことをやってるんだろう。

プログラミングも慣れてくると、特に新しいことを勉強しなくてもなんとなくできるようになってきはじめる。これが危険シグナルだm

謙虚でありたい

自分プログラミング歴が長いのに、HTTPSの仕組みもTCPの仕組みも詳しく知らず、JavaScriptもまともに書けず、WebAssemblyは全く知らないし、RDBのことは知らないし、もちろんRDB以外のDBちんぷんかんぷんで、デスクトップアプリは作ったことがない、サーバサイドはRailsしか知らない。Railsがどう作られているかも知らない、gitの触りぐらいしか知らない、AWSGCP全然使いこなせない、公開鍵暗号方式もよく知らないし、アルゴリズム簡単ものしかからない。デザインパターン勉強してないし、関数型言語もわからないし、C言語全然読めない、アセンブリはやろうと思ったことすらない、正規表現も複雑なものはいまいちわからないし、機械学習はわからないし、そもそも数学不安で、AndroidアプリiOSアプリもまともなものリリースしたことがなく、エディタは人が作ってくれたプラグインをただインストールするだけで、英語ほとんどできず、セキュリティに関してはザルもいいとこ」

のように自分を見直すべきである。もちろんほとんどの人はそうしているとは思う。そもそも自分プログラミング歴が長いのに」という部分はもはや要らないだろう。

あとはただ穿つだけである能力は、どれだけ、何を、どうやったかとの方と強い相関を持つ。能力とは現在状態であるのだから、強い相関を持つのは最最もである

結論

少年老い易く学成り難しである

一刻も早く「プログラミング歴」でなんとなくの判定するのをやめて、プログラミング歴1秒の人に対しても、プログラミング1000年の人に対しても、そのFを見るようにし、自分はとっとと次元を越えて昇華したいものである

結局、「いっぱいやればいっぱい成長する」という自明結論自体は変わらないんだが(高)

ログイン ユーザー登録
ようこそ ゲスト さん