はてなキーワード: シェルスクリプトとは
http://vim-jp.org/vimdoc-ja/change.html#filter
Vimにはフィルタコマンドといって、テキストを任意のUNIXコマンドで処理するExコマンドが用意されている。
用意されていて、実際強力なんだけど、Vim組み込みの機能で間に合うことも多くて、下記以外はあまり使っていない気がする。
以前はVimの正規表現に慣れないからとPerlを使ってたりもしたけれど、Vimの正規表現も悪くないかなとなって。こう。
簡単な計算をするときに使う。1行に計算式を書いて「:.!bc<CR>」あるいは「!!bc<CR>」とすると計算ができる。
「<C-r>=」で代用できる。
長めのコマンドを実行するときに使う。「:%!sh<CR>」とすると書いたシェルスクリプトを実行できる。
最近はBashの<C-x><C-e>で良い気がしてる。こちらだとヒストリで戻って<C-x><C-e>として再編集することもできるので。
簡単な整列をするのに使う。ビジュアルモードで選択して「!column -t<CR>」とすると整列ができる。
(デフォルトのセパレータがスペース二つなので、一つにしたければ-oオプションを指定して「!column -to' '<CR>」という風にする)
vim-easy-alignやvim-aligntaが入っているならそれでいいかも。
それぞれJSON、XML、HTMLを整形するのに使う。JSONは「:%!jq .<CR>」、XMLは「:%!xmllint --format -<CR>」、HTMLは「:%!pup<CR>」。
ただ「jq . <JSONのファイル> | vim -」としていたりして、直接Vimの中で使ってない場合が多いかも。
連番を振る時、重複行を削除する時、指定した列を抜き出す時、などなど、色々なことに使える。
それぞれ「:%!awk '{printf"\%-6d \%s\n",NR,$0}'<CR>」、「:%!awk '\!a[$0]++'<CR>」、「:%!awk '{print$2}'<CR>」といった風にする。
自分も前に富士通に居て既に退職してます。後で詳しく書くけど、ソフトウェア開発職に居たです。
彼のへの感想。
富士通はクソでっかい会社なんだし、サイト見ればメインフレームやってるのだって判るんだから、開発職を希望したらメインフレーム関連の開発やる可能性あるのは当然予見出来るだろうし、それを想像してなかったのなら情弱とかブコメで言われてしまうよね。あと何も記述が無いから想像だけど、「それほど有能ではない」と判断された可能性もある。と言っても学生が思う「開発者として有能かどうか」ってのと会社でのそれってのは別物で、要するに学生自身が自分が実績もあって優秀だと思っても、会社的にはそうでないのよね。そうなると(後述の富士通に入社して10年が経った人の話にもあるのだけど)新人の能力の客観的な判断材料って大学と資格(応用情報レベル以上)程度なのよね。資格に関しても基本情報なんてMARCHクラス以上の人間なら受けたら取れて当然だから、「有能かどうか」の判断材料にならない。就活の際に本気でIT業界に入りたいかどうかの判断材料にはなる程度。自分の同世代で富士通本体に入ってソフトウェア開発関連に配属された人のプロフィールを見たけど、確か偏差値的には少なくとも神戸大学とか千葉大学あたりの修士卒しか居なかった覚えがある。あと確か2~3人がソフ開持ってた気がする。だから、この増田がどの程度だったのかなと。
ただ、20万人月案件が具体的に何かは判らないのだけど、自分の在籍していた当時でも炎上巨大案件というのはあって、(自分が知ってるのは確かデジタルテレビがどうのこうのとか言ってた)、そういうのに入社して間もなく入ってしまうと自身の勉強等が出来なかったり潰されたり最悪死んだりするんで、そういう意味でも逃げるのは正解の一つ。(自分は炎上案件に放り込まれた新人が寮で死んでたとか話を聞いたことある)
はあ、としか。この人がこう判断した際の判断材料にするであろう自己の体験を具体的に書いてないので、意識高い系がフカしてるようにしか見えない。あと、たった3年しか居なくてあの巨大企業の経営とか体制とか理解出来るんかね?と思わないでもない。自分とは部署が違うだろうから当然かもしれないけど、自分の体験とは違うなーって感じ。自分は、外から見たら馬鹿みたいな事やってるように見えるかもしれないけど、経緯や目的や巨大企業特有の問題があってそうなってるんだなって思う事が多々あった。
近い時期に入社したと思われる。具体的な話が自分の経験と一致してる。特に、富士通のソフトウェア開発と言えばミドルウェアの開発が主だというのは、富士通内部じゃないとなかなか(特に学生なんかじゃ)判らないかなと。
それでこれらの話を見てどんな人が富士通(というか大企業)に向くのかなと考えたんだけど、「やりたいこと」そこまで明確じゃないけどコンピュータは嫌いじゃないって感じで、地頭がまあまあ良くて勉強に関しても要領よくやれる(要するにそこそこの大学に行って卒業した人)、それでそこそこ安定した職・収入目当てな人かなと。ってコレ書いててふわふわしてる人みたいであんまり良い印象の人物像じゃないな。マッチングミスはどうしても起きると思うし、学生の頃に思う「やりたい事」って往々にして変わったり間違いだったりするし、そもそも学生の頃に明確な「やりたい事」がある人の方が少数派でしょ。だからこういうそこそこ優秀だけどふわふわしてる人の方が良いんじゃないかなとか。逆に、ちゃんと「やりたい事」が明確にあるけどまあ安定はしたいって人はどうしたらいいのかって言うと、自分みたく大企業の子会社を狙うと良いんじゃないかなと。子会社ならその会社がやってる事が理解しやすいし、入った後の配属の希望も大きく違ったものにはなりにくいし。まあ子会社は子会社で色々アルかもしれないけど。
入社は10年ぐらい前。入ったのは富士通の子会社で主にミドルウェアの開発をやっている所でした。入社して1~2年したら子会社の統廃合とのことで富士通本体と連携してる部署(自分がそうだった)は富士通本体になりますとのことで富士通本体の方に移ったという経緯ですね。別に待遇とか元々本体と同じだったから変わらず、事務関連が小回りきかなくなったぐらい。入社してから退職までは5年ぐらいでした。辞めた理由は実家の事業を継ぐ事にしたため。
入社して数ヶ月の時にある温泉地にある某所でその手の開発をやってる子会社沢山と
富士通本体のソフト開発配属の人達で研修をやったのだけど、その際に富士通本体の人達と知り合った。(この際に全員のプロフィール冊子が配られた)そのときは流石子会社に入る人達と本体とじゃレベルが違うな~と思いましたね。(ちなみに自分はMARCHより下の院卒。)
自分が配属されたのは某製品部署のAPI部分チーム。その製品がC言語やJava言語からも使えるように出入り口を用意する部分。中でやってる事は指定されたIPのポートにプロトコルに沿ってデータ投げるだけなんだけどね。ちなみに配属希望の際は「そこそこの忙しさの所がイイ」と言っていました。「バリバリに働きたい」と言ってた同期は多忙でヤバい所に配属されてました。他にもチームがいくつかあったけど、それらのうちの一つは例の「山奥の工場」でしたね。自分が配属された当時はC言語のAPIをリニューアルするって開発してたのだけど、設計担当がJavaしかやったことない人で色々とC言語の流儀に反してて後々のメンテが大変でした。まあそれでもリニューアル前よりは遙かに良くて、以前はユーザに見せてる関数名が ○○search1 ○○search2 ○○search3 とかでしたね(ちなみに機能はそれサーチか?思うのもあった)。もっと酷かったのが初期製品のJavaの公開メソッドで、マニュアルには「このメソッドの引数○○を□□を指定した場合は戻り値のObjectを△△にキャストしてください。××を指定場合は…」という「これ製品にして売ってたんだ…」と思うレベル。もちろんコレがダメだったってのは開発側も認識していて当時は既にリニューアル済みだったけど。リニューアル済みでも少し微妙だったけどね。
これは、ミドルウェアの開発をやってる人達って基本的にC言語が主でJavaとかをやってる人がほぼ居なかったからだと思う。上司もそういうのは良くないってのは認識してた。対象OSはWindowsとLinuxとSolarisだったけど、そんなにたいした事やってなかったからほぼ同じコードだったような。ソケットの一部だけ違ってたっけかな。
それでそのバージョンの開発が終わったあたりで、.NET Frameworkが出始めてきたので次バージョンでは.NET FrameworkのAPIを作る事になりまして、自分が少し勉強していたのでそれの設計から担当する事に。当時は.NET Framework 1.1で今思えば少し時期が早かったと思う。2.0でGenericが出てからやった方が良かったと思うんだけど、そういうの政治的判断だし結果論だしなー。それまでにRubyとかオブジェクト指向言語に触れてその辺の勉強もしていたので、.NET用のAPIに関しては設計も実装も結構良い感じに出来たと思う。ああ、そういえばRuby用のAPIも効率化の開発ツールとかの名目で仕事中に勝手に作ってたなあ。他にもC言語のAPIも内部実装がクソすぎ!とキレてユーザ公開関数インターフェースだけ同じで中身をフルスクラッチした事も。もちろん絶対にLDしてるんで完全に趣味なんだけどな。これでAPIはC言語とJavaと.NETになった訳だけど、現場の案件で使われたのってほぼ全てJavaだったと思う。(開発中のサーバのテスト用アプリはC言語だけど)。要するに自分が数年関わったコードが世の中ではほぼ使われてない訳でして、取りそろえとして必要だったとはいえ世の中の役に立ってないってのは嬉しくは無かったですね。まあ、大企業の仕事なんてそういうもんです。.NETに関してはそのバージョンが出る頃はその製品があまり売れてなかったんだか使われたって話は聞かなかったですね。ほほほ。大企業に勤めるのならこういう覚悟は必要かもね。
で、.NETのAPIが出来たあたりに開発ネタがなくなって保守気味になってきたので、人員整理と作業整理との事でインストーラと切りたいけど一度やったからには切れない補助製品の担当が増える事に。インストーラはWindowsがInstallShieldというクソみたいな言語上で作られたもの。LinuxとSolarisがシェルスクリプトでのもので、InsallShieldの方のコードはあまりにクソなのでリファクタリングさせてもらった。この辺の開発は少なかったのだけど新OS対応(Vistaとか)とか保守作業が大変だった覚えある。
んで、これらの作業が終わったあたりでこの製品でやることが無くなってきたのと同時に、この製品の派生製品の話が出てきてて、それは1機能1exeで提供されてて、それらを纏めるバッチ処理機能部分を担当することに。バッチ処理の内容・順番を記述するのにXMLを使う事になったのでXMLのパーサが必要なのだけど、色々調べたら富士通内部でパーサ作ってたのでそれをもらって使う事に。そのパーサはC++からじゃないと使えなかったのだけど、趣味でC++で勉強してたので何とかなった。あと、結構OSの知識(プロセスとか)が必要でWindowsとLinuxとSolarisで動くコードを書く必要があってまあまあ大変でした(と言ってもifdefで切り分けるだけなんだけど)。けど、これらの開発は自分が一から設計してコードを書いていたので楽しかったですね。それでこれが完成するかしないかあたりで、このバッチ処理機能が他の開発中の製品のバッチ処理に使えないかとか話が出てきたあたりで自分が退職する事に。(退職の話は1年ぐらい前に話し合って決定済み)引き継ぎをして退職ということになりました。最後は溜まった有給を使う予定でまだ在籍中だけど部屋を引き払って実家に帰ってたのだけど、打ち合わせに来て欲しいって言われてしまい実家から何日か通ったのは良い想い出。というかまさか実家から朝8時に間に合うとは思って無かった。
振り返ってみて残業時間は月40~60時間が多かったかな。100時間超えた時は上司に怒られた。あと退職前の1年ぐらいはうちの事業本部(だったかな?)単位で残業禁止になってホントに残業0時間になった時期があった。他の部署の人の話で、どう考えても狂ってる上司の話とかを聞いてると上司とかの運は良かったと思う。あと、やっぱり仕事でみっちりプログラミングが出来たのは運が良かったと思う。富士通のソフト開発で C C++ C# Java シェルスクリプト InstallShieldとか(そんなに深くはないけど)色々やれた人間はそうそう居ないんじゃないかな。同期とかの仕事は年上の人の派遣の人に指示出したり取り仕切ったりする仕事とか、保守サポートみたいな開発じゃない仕事の話も良く聞いていたので、ソフト開発のキモを体験出来たのは良かったです(こなみ)。
Skypeやflashなど一部ソフトの導入手順の面倒さがネックだった。
この辺りがUbuntuやLinux Mintでは簡単で羨ましかったのだが、
fedyというソフトを使うことである程度は解決できるようだ。
http://satya164.github.io/fedy
fedyは手順の面倒な設定やインストールを簡単にするソフトのようで、
導入は次のようにすれば良いよう。
※fedy-installerはただのシェルスクリプトで、後で消して問題ない。
curl -o fedy-installer https://satya164.github.io/fedy/fedy-installer chmod +x fedy-installer sudo ./fedy-installer
sudo fedy -e skype_linux
skype_linuxはタスクの名前で、Flashの場合はadobe_flash、Light Tableの場合はlight_table、Sublime Text 2の場合はsublime_text2といった具合。
GUI版のfedyがイケてない気はするけど、
日本で最大規模を誇る電子掲示板サイトの2ちゃんねるでは3/13から新仕様APIに対応していない2ちゃんねる専用ブラウザは利用出来なくなった。
しかし、新仕様API移行に反発する有志達(主にオープンソースプロジェクトで開発れていた2ちゃんねる専用ブラウザユーザ)によって新仕様APIの規約の穴を突かれて突破されてしまっている。
新仕様APIの規約によればWebスクレイピングやJavascriptなどが禁止されているが、例えばPerlやPython、シェルスクリプトなどのユーザスクリプトによるHTTPソースの改変は規制されていない。
そこで有志達は規約通りに新仕様APIを介して2ちゃんねるのHTMLファイルを取得しユーザスクリプトによってHTMLを従来の2ちゃんねる専用ブラウザで読み込めるdatファイルへ変換する方法を編み出した。
ユーザが個人で楽しむ範囲でHTMLソースをdatファイルに変換するにのは法的にも問題が無いと思われ、2ちゃんねる運営にもそれらを規制する法的根拠を得るのは難しいと考えられている。
他にもルータのフィルタリング機能やDNSサーバー設定の変更で広告を表示しないようにしてしまうなど、2ちゃんねるの運営は思い通りにならない2ちゃんねらー達にやきもきさせられてしまう格好だ。
大学の一般教養でPascalを習った程度。専門課程に入る前に文法はすっかり忘れた。専攻は都市工学だからその後プログラミングとは縁はなかった。卒業前に第一種情報処理技術者の資格だけはとれてたのでプログラミングの何たるかとかオブジェクト指向なんかも知識としては知ってた。
大学卒業後にデスクトップユーティリティーのメーカーで技術営業をやった。顧客に製品仕様を説明するのが主な仕事なのでパワポばかり使ってた。その会社ではLinuxのソフトも販売してたから、Linuxのコマンドは打てるようになった。そこでシェルスクリプトを習得しようと思ったがあえなく挫折。
その後ネットワーク機器のメーカーに転職。トラブルシューティングでLinuxをさらに使うようになった。そこではHTTPプロキシを主に扱っていたので、HTTPプロトコルについては一通り知識を身につけた。その知識を実際にLinux上でシミュレーションしてみたくなり、Cを習得しようと思ったがやっぱり挫折。
部署移動でメールサーバーを扱うようになった。SMTPプロトコルの知識は身についた。ここでもSMTPをLinux上でシミュレーションしてみたくなり、こんどはperlを習得しようと思ったがやっぱり(ry
今はExchangeを扱ってる部署で働いてる。ここではExchangeメールのメタ情報をMySQL上で扱ってるから、SQLのSELECT文くらいは見よう見まねで使えるようになってる。
そんな俺も部下を持つようになり、デスクワークの時間が増え、比較的自由な時間が持てるようになった。そんなときにはてブでみかけたCoursera(https://www.coursera.org/)で本当に偶然に「初心者のためのプログラミング」というコースを見つけた。
Programming for Everybody
https://www.coursera.org/course/pythonlearn
コース自体は英語だが、別に教授と会話するわけではないし、Python文法以外は条件分岐や繰り返しといった過去に挫折しながらも知識としてだけはぼんやりと覚えていたことの繰り返しだ。英語が少しくらいわからなくても、図を見ていれば何を解説しているかくらいはわかる。
結論から言えば、このコースを受講したおかげでいままで断片的に持っていた知識 -単語だけは知っていた「オブジェクト指向」、「条件分岐や繰り返し」「アルゴリズム」などなど- がパズルのピースのようにかっちりと組み合わさり、Pythonが難なく習得できた。いままでにシェルスクリプトやCに挫折したのがウソのようだ。Linux、HTTP、SMTP、SQLといった周辺知識も余すところなく役に立った。何のことはない、Pythonの標準ライブラリを使えばHTTPやSMTPのシミュレーションなんて簡単にできたのだ。以前トラブルシューティングで夜中まで手作業でちまちまやっていた作業は、全部Python一発で解決したんじゃないか。
このコースをきっかけとして、俺の人生(といってはおおげさだが)が大きく変わった。小さいところで言えば、自宅PC上でバックアップにつぐバックアップでわけのわからなくなったフォルダ構造の中から、同一のファイルを探し出し削除できるようになった。(傍から見れば何を大げさなと思うかもしれないが、ここ10年くらいの俺の中で最大の懸案だったのだ。)仕事でも日次で発生する業務をバッチ化したり、繰り返し発生する手作業を全部Pythonで自動化した。(経営陣へのレポート作成とかそんな類のものだ。)おかげで残業どころか定時前に帰宅できるようになり、自由な時間はさらに増えた(笑)
ひとつ言語を習得してしまえば、あとは同じことの繰り返しだ。増えた自由時間を利用して、いまはPHP、JavaScript、jQueryを身につけて何かWebサービスを立ち上げようと目論んでいる。出来上がったら、またここでそれまでの道のりを紹介したいと思っている。
こんなことが自分の身に起こるとは、1年前の自分には想像すらできなかっただろう。それまでは「Webサービス」なんて言葉は自分とは一切縁がないと思っていたから。
欲を言えば10年前、いや5年前でもいいからこのコースに出会ってPythonを身につけていたら、今とはまったく違った人生を歩んでいたかもしれない。
コースを開講した教授との相性もよかったのだろう。彼の人柄にも好感をもてたし、「for Everybody」というだけあって、非常にわかりすい説明だった。英語だということを差し引いてもこのコースはおすすめだ。
たくさんのコメントありがとう。こんなチラ裏の文章がホッテントリ入りしてかなりびびっている(笑)
いくつかのコメントに返答したい。
こういう反応があることは投稿したときに予想はしていた。だが、何がきっかけでプログラミングを身につけたのかを具体的に書かないと、何の役にも立たない本当のチラ裏になってしまうので、コース名を書くことにした。だがこのコースをはてブで見つけたのは単なる偶然だ。このとき見つけたのがドットインストールのRuby講座だったら、Coursera→ドットインストール、Python→Rubyになっていただけのことだ。ここで言いたかったのは、断片的でも一度触れたことのある知識は後になってどこで役に立つか分からない、ということだ。Steve Jobsも言っていたが、「人生を振り返ったときに点と点をつなぐことはできるが、その点がなんの役に立つかをあらかじめ予想することなんてできない」ってやつが自分にも起こった、それだけのことだ。
なお、Courseraのこの教授は自分の授業内容をすべてオープンにしている。http://www.pythonlearn.com/ 教科書さえもここで無料で手に入る。Courseraに登録するのに抵抗があり、自習上等という人はここで俺が受けたのとまったく同じ内容を確認することができる。ちなみに授業はすべてYoutube上で公開されている。
これについてはまったくその通りだ。ただ、もう新たな言語を覚えることにまったく抵抗がなくなったのと、PHPとRuby on RailsがWebサービス界ではメジャーらしいので、とりあえずPHPもやってみよう、くらいの軽い気持ちで思いついただけだ。ひょっとしたら実際にはPython+Djangoとかで開発するかもしれない。
Unixという考え方という本を読んだ。もう図書館に返してしまったので、これから書くことはあまり正確じゃないと思う。〜的なという表現が多くなってるのはそのためだ。
この本で最も印象に残ったのが、梃子(てこ)の話。著者の叔母がちょっとしたマルチ商法で大金を稼いだ話を例にとり、「プログラミングもこういうもんさ、梃子を使うんだよ」的なことが書かれているが、倫理的な問題はおいといて、そういう感じでプログラミングをすることってどうすれば可能なんだ?と疑問が湧いた。自分のようなクズ野郎はもちろんのこと、たとえ修行僧のように淡々と技術を磨いているプログラマでも、本節を読めば自分の技術を使って著者の叔母のように大金が欲しいと思うはずだ。
プログラミングの梃子らしい部分は自動化だ。少なくとも、本にはそう書いてあった。梃子の具体例としてシェルスクリプトがあげられて、たった一行のスクリプトが賢いプログラマたちが作った何千行のプログラムを実行するんだ。これこそ梃子だ、的なことが書いてあった。いや、でもちょっと待って欲しい。こっちは叔母のように大金が欲しいわけだ。Unixの素晴らしさは他の章でも散々書いてあるし、ここでシェルスクリプトの話をされても困る。話をそらさないで欲しい。
著者が言いたいことはわかる。この節ではあくまでもシェルスクリプトの凄さを語りたかったわけで、叔母が大金を稼いだ話はそのための撒き餌に過ぎないんだろう。でも、ほとんどの人間にとって、本気で考える価値があるのは大金の方だろう。優秀なプログラマが生産性を上げた結果、それだけで幸せになれると思うか?むしろ仕事が増えているじゃないか。資本家はいつだって労働者を限界までこき使う。プログラマが創造的な仕事だということは、プログラマにしか理解されない。梃子をプログラマの幸福につなげるには、どうしても社会で使える通貨にしないといけない。
さあ、シェルスクリプトの梃子を使って金を生み出すとして、どういう具体的な手段があるんだ?
ソフトウェアで大金を稼いだやつを思い浮かべろ、と言われたら真っ先にビル・ゲイツの顔が浮かぶだろう。彼がやったことはなにか。ソフトウェアを作って、ライセンスを刻んだ。そのソフトウェアがどこのメーカーのハードウェアで動作しても、ソフトウェアはMicrosoft社のものだということがはっきりしている。そこから、利益を得るわけだ。これはまさに本に書いてあった梃子(著者の叔母はタッパを販売して、さらにその販売先の客に販売を勧め、その利益の一部を手にしていた。マルチ商法だ。)と同じ類のものだろう。
「I'm CEO, bitch.」
学生時代にFacebookを作り上げたマーク・ザッカーバーグは、FacebookがダサいSNSになった今でも、若い起業家の憧れの的だ。
彼がやったのはなにかというと、広告だ。
学生たちが楽しめるようなプラットフォームを無料で提供し、そこに広告を掲載することで大金を生み出した。広告のどこに梃子があったかというとソーシャル・ネットワークだ。広告で稼ぐにはたくさんの人に見られる必要があるわけだが、SNSという特性自体が梃子になり、ユーザー数がみるみると増大していったことが、広告による大金を生み出した。
主に日本で見られた現象が、ソーシャルゲームだ。これは偶像を売る商売だ。一度イラストレーターが作成したものは、いくらでも複製できる。それを消費者の射幸心に訴えかけながら売っていく。この電子的な麻薬が、なぜか日本では異常なほど受け入れられる。梃子の力は複製が容易ということだけでなく、消費者の脳内でも起きている。消費者自身の購買行動が次の購買を促す仕組み、中毒性こそがこの商売にユニークな梃子だ。
___
飽きた。ブクマがたくさんつけば書き足す。
ブクマの伸びがゆっくりなのでここらで書き足しておく。上に書いたのは、本を読んで率直に感じた疑問と、それに対する、偏見なども大いに含んだ主観的な考察だ。しかし、こんなことをしたのは、他の誰のためでもない、自分のためだ。興味本位でプログラミングを始めてしまって、それが楽しくなってしまった自分の行く先を少しでも認識したいという切実な願望があったからだ。
ちょうど他の増田に漫画家の話が書かれていたけれど、ソフトウェアエンジニアだってああいったことになりかねない。いや、もうなっているかもしれない。創造的な人たちがつくりあげた偉大な製品が、資本家に食い尽くされることが、平気で行われている。以前ネットで知り合ったインドネシアのプログラマーは、自分の仕事が不当な扱いを受けていると嘆いていた。「海外の安い人件費」として働く彼らは、高度な技術を持っているにも関わらず、正当な報酬を手にすることができない。
まどろっこしいので言いたいことを言おう。梃子は生産性を高めるために使うだけじゃだめだ。自分や他の創造的な人々の権利を守るために使わないといけない。でなければ結局、プログラミングを始めたときに感じた魅力や全能感、思考力を捨てて、資本家の歯車になるような未来しか待っていない。
全ての機能がpecoやpercolのようなものを使ってインクリメンタルサーチしてアクセスできればいいと思う。
そうすれば抽象的に覚える事すら不要で、機能名の断片を覚えていればよいだけなので機能名の断片をタイプするとそっこーで機能にアクセスできる。
そう思ってなんでもpecoで選択するようにしたらzsh(+vim + unite)だけで全てが事足りるようになった。
機能のなにかが変わっても糊付けしてるpecoをwrappしてるシェルスクリプト変えるだけなのでたやすく変更にも追従できる。
GUIみたいなまだるっこしいものに頼るよりCLIで過ごせばイイ。ほんとpecoとかpercolオススメ。
そんでこれらはエンジニア向けの機能じゃねーかってつっこみがあるかもしれないが、インクリサーチを使う条件自体は
「タイピングできること」、「機能名や選択候補の断片を記憶してればいい」だけなので、バカに優しいし実は一般の人向けなUIなんじゃねえかとおもう。
例えばOfficeはリボンみたいなものを用意するのと同時に、大量の作業を素早くこなしたい人向けにインクリメンタルサーチつければいいとおもう。
例えばintellij ideaのSearch everywhereみたいなかんじに。選択候補が絞られる度に選択候補機能のリボンUI位置がユーザにわかるように絞られる演出がされてればなおベター。
そこまでまとまった時間も取れないので、毎日十分程度プログラミングを勉強する方法は無いだろうか
例えば電車の中で単語帳を覗いたり、文法問題を解くような感覚で勉強したい
具体的に言えば
「あるファイルが更新されたらメールを送るようなシェルスクリプトを書きたい。更新をチェックするにはどうしたら良いか?」
vimの使い方として「このような文章があるとき、複数行にまたがって先頭にコメントアウトを入れたいがどうすれば良いか?」
もちろん「次のfor文はある処理に時間がかかっている。その場所と解決策を上げよ」みたいなものでも良いが
私はそのようなレベルにまだ達していない
何か心当たりのある方、教えて下さい
関数型やらオブジェクト指向やらの話に反応してるんだから、ある程度規模のあるソフトウェアを人間にとって分かり易く構成する話するんじゃないの?
まあ一応Python
print [line.split(",")[0] for line in file("file.csv").readlines()]
シェルスクリプトを物凄く詳しい人は、自分の事をzsh/bashでのプログラムが得意なんです!なんて絶対言わないと思う。
補助的なもので、ホントに巨大な物を作ろうと思えば遅すぎて使いものにならないし。
その辺詳しい人ってのは、普段からターミナルベースで仕事してる人だろうし、「プログラム」は別の物をメインで必ずやってるだろうし。
その中で、PHP/JavaScriptは「それしか使えない」人間が多いと思う。
ある程度のことは理解なんてしてなくてもコピペでできるし、設計書通りに組み立てるくらいならもはや一昔前の事務作業と同じレベル。
C#なんかもそう言った事務作業レベルのことをやらせる職場が沢山あるから同じように受ける。
その辺の人に、他の言語をやってみて、って言ったら全く使い物にならない感を受ける。
俺はターミナルを快適に使える+普通の作業(Excel, Word, インターネット)もできるっていうのが好きだよ
perlやらシェルスクリプトやらでパパっと処理を書いたりするので、ターミナルが使えるととても助かる
fink、macport、homebrewなんかでCUIプログラムでも導入しやすいし。まあこれはLinuxならたいてい同程度以上の機能を持ってるけど。
Winでcygwinやらmingwやらも使ったことあるけど、Macみたいに基板がUNIXってわけじゃないからかどうも使いづらかった
あとはemacsみたいなショートカットキー(Ctrl+kとかCtrl+aとか)が大体のアプリで使えるっていうのも、無いとストレスが溜まるレベルでありがたい
何が言いたいのかわからないんだけど、
なんでUnixのコマンド使うとソートの種類について理解できるの?
もしかして、ソートって、頑張って自分で書いてみろ、とかそういうこと言ってるの?シェルスクリプトで???
そうじゃなきゃ、sortコマンドの中身を見てみろ、とかそう言う話?それって結構ハードル高いと思うけど。
増田はsortコマンドのソース見たことあるの?そういや、ちょっとまえに「lsコマンドを読め」みたいな本出てたけど。確かに勉強になるけど、かなり高いレベルじゃね?
とてもじゃないけどドットインストール見てる人間がやることではないと思うけど。
ってwww