今年、クックパッドでは夏のインターンと題して20名弱のインターンを受け入れました。 このインターンは前半と後半に大きく分かれており、 後半が社員に混じって業務をするいわゆる普通のインターンで、 前半は7日間にわたってプログラミング関連の講義を受けるという仕組みです。 わたし(青木)はその前半の過程において、「プログラミングパラダイム」という 1 日の講義を担当し、 JavaScriptの処理系を書くという、ツッコミどころの多い課題を実施しました。 本稿では、その講義を開発する際に考慮したこと、特に難易度調整についてお話しします。 また講義のために開発したJavaScript処理系「JetSpider」についても軽くふれます。 ▼講義資料 Cookpad Summer Intern 2015 - Programming Paradigm from Minero Aoki JetSpiderコ
プロジェクトメンバーが無駄に多いのが、日本型SIの特徴のひとつである。「工数を人数で割れば工期が出る」と考えることが間違いであることは、ブルックスの著書「人月の神話」によって今から40年前に指摘されている。それにもかかわらず、相変わらず多くのプロジェクトで必要以上の人数が投入されている。 私がとくに不思議に思うのが、基本設計を何人もの要員で分担するやり方だ。DB設計と機能設計と業務設計の担当を分けるとか、サブシステム毎に担当を分けるといった体制がしばしば敷かれる。詳細設計の段階でというのならまだわかるが、基本設計でそれをやってはいけない。 なぜか。業務システムにはアーキテクチャ(意図された構造)が求められる。そして、そこに含まれる膨大な定義要素は、統一感や一貫性を保ち、かつMECEな形で切り出されなければいけない。複数の要員で分担などすれば、それらの課題が一挙に難しくなる。また、DB構成と
最近、 Visual Studio 2015 がリリースされました。Pythonにも対応しており、 Python Tools for Visual Studio (PTVS)を使うことで、編集やインテリセンス、デバッグ、プロファイリング、Azureへのパブリッシングなど、ほとんど全ての機能が利用可能です。その詳細や ビデオチュートリアルの一部、ドキュメンテーション、その他のソース はvisualstudio.comで見ることができます。また、 Python Tools 2.1 や Python Tools 2.2 beta についてはリンク先のブログ記事をご覧ください。今回の投稿では、Pythonで仕事を始める際にVisual Studioの使用を検討すべき理由について話していきたいと思います。 非常に便利なインテリセンス 何だかインテリセンスについてはいつも話していますね。Visual
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 本文書は、プログラミング言語向けのスタイルガイドに向けたスタイルガイドである。 本文書へのフィードバックはQiita上のコメントにて受け付ける。 構造 対象を明確にする そのスタイルガイドがどのような状況のどのような対象に向けたスタイルガイドであるか規定すること。 状況や対象は広すぎてはならない。 理由: 対象はスタイルガイド記述者には自明かもしれないが、似て非なる言語に誤用されたり、特定分野のアプリケーション向けスタイルガイドが他分野のアプリケーションを理不尽に拘束したりすることがある。これを防ぐべきである。 良い例: 「本文書はRu
高品質のコードベースは、反復作業やコラボレーション、メンテナンスを簡単にすることで、長期的な開発のスピードを上げてくれます。Quoraではベースコードの品質は重要だと考えます。 高品質のコードを維持することは利点がありますが、その反面かなりのオーバーヘッドが発生し、実際の開発のサイクルに時間が掛かってしまいます。このオーバーヘッドと利点の折り合いを付けるのは難しい問題です。この場合、2つの選択肢しかないように思えます。低品質でコードスピードが速いか、もしくは高品質でスピードが遅いか。スタートアップは素早い開発サイクルに最適化しているので、多くの人は低品質で進めたほうがいいと思っています。 このジレンマは解消できます。ツールやプロセスを工夫することで、コードベースの品質を維持したままスピードを速めることができるのです。この投稿では、コードの品質に関しての私たちの考えや、2つの世界を共存させる
Python の クラス(class)は次のように定義します。クラス名は慣習的に大文字で始めます。 class MyClass: """A simple example class""" # 三重クォートによるコメント def __init__(self): # コンストラクタ self.name = "" def getName(self): # getName()メソッド return self.name def setName(self, name): # setName()メソッド self.name = name a = MyClass() # クラスのインスタンスを生成 a.setName("Tanaka") # setName()メソッドをコール print(a.getName()) # getName()メソッドをコール クラス定義の冒頭には、"""...""" で ドキュ
プログラミング言語Pythonの習得を目的としたサイト、Python-izmです。 入門編、基礎編、応用編などカテゴリ分けされていますが、すでにPythonの基本構文、実行方法等を習得されている方は入門編を飛ばしてご利用ください。これからPythonを学習する、という方は入門編 – Pythonとはより順にご利用ください。また本サイトは主にPython 3系を用いていますが、3系と比較して大きく異なる場合は Python 2系のコードも掲載しています。バージョン2系と3系の違いは2系と3系の違いを参照してください。 お知らせ 2018/01 サイトのリニューアルに伴い、Python 3系への対応、SSL化を行いました。今後ともPython-izmを宜しくお願い致します。 Pickupコンテンツ 各プログラミング言語の実行までの手順をまとめました。Pythonは他の言語と比較しても容易に実行
NOTE: 本記事はすでに内容が古く、今読んでも役に立つ度合いはほぼないです。 本記事は、先日社内勉強会のために準備した、Webサービスのリアルタイム通信周りのまとめシリーズ の1つを転載して公開するものです。 まだまだわかっていないことが多いので、ぜひぜひ間違っている点などにご指摘いただければと思い公開します。 ぜひぜひ優しくマサカリをいただけると泣いて喜びます! はじめに プロトコルと手法 前世代のやり方であるComet について Polling 系 Streaming 系 過渡期といわれてる手法 将来有望といわれてる手法 Polling メリット デメリット 向いているシーン Long Polling (Comet) Polling の発展版 メリット デメリット LongPolling 自体は双方向通信ではない 接続が閉じられるケース 向いているシーン Server Sent Ev
README.md Go Kyoto (Go勉強会 そうだ京都、行こう) About 実施概要 2014/3/15 (土) 14:00 http://www.zusaar.com/event/4367004 前提 多言語で基本的なプログラミング知識(Web 系?) がある。 Go のインストール、開発環境(エディタとか)の準備済み。 http://go-tour-jp.appspot.com/ を一通り(24, 48, 60, 69, 70 は飛ばしてよし) タスク管理ツール タスク管理ツール的なものを作りながら、 Go のひと通りの機能を触る。 Go をひと通り触るのが目的なので、ツール自体の機能とかはこだわらない。 他の言語での経験がある方が対象なので、プログラミング言語の基本的な話は省略。 標準モジュールでできることのみ。 環境構築は終わっている前提。 1 ファイルで完結させる構成(
近況 打ち捨てられた過去について 要旨 この記事を興味深く読む一方で、やはり違和感を覚える人も多くいるようで、自分もその一人だった。恐らく、この違和感は、「抽象化」が「具体性を奪取していくもの」といったような対立項として述べられているからだ、というように思われる。しかし、果たして具体性無しに「抽象化」することが有益なことなのだろうか。それが一つの違和感のように思われる。 本文 プログラミングの世界には、YAGNI原則(You ain't gonna need it)というものがある。また、YAGNIという言葉を使わなくても、「過度な汎用化が足を引っ張る失敗例」というのは、プログラマとしての心構えを書いた本の中で、ちらほらと自嘲気味に述べられることがある。 僕も、一度そのような失敗例を見たことがあるけれど、なぜこういう失敗が起こるのか。確かにデザインパターンで組み立てられたアーキテクチャは「
<追記>いろいろ反応あってたしかになーって思いましたが、ここで説明されてるのは「汎化」とか「パラメタライズ」としたほうが正しいですね。抽象化というと、一塊の手続きをブラックボックスにして、実装を隠蔽する面のほうが正解に近いです。でもまあそこを差し引いて読んでいただければ、それなりに有用ではある記事だと思うので、このまま残しておきます</追記> プログラミングに限らない話かもしれませんが、ふだんの生活で触れないような概念というのは、一度わかってしまえば便利なんだけど、どうしてもとらえどころがない、というようなことが多いと思います。プログラミングにもそういう概念はたくさんあって、わたしのような凡人は新しい概念にぶち当たるたびに苦労しています。今日はそんな中で「抽象化」という言葉について、「昔の自分にこうやって説明してあげたかったな〜」という説明をします。 プログラミングを学んでいく中で、「とり
(この記事は 「アジャイルの破綻―原因、そして新たな提案」の続編にあたる記事です。) 前回のブログで、私はアジャイルの変動について、「調査と順応の概念は一体どこへいってしまったのか」、「近い将来起こり得る問題に対処できるよう手法の革新を図ろう、新たなやり方を導入しよう、という考えはどうなってしまったのだろう」、と問いかけました。 VersionONEによるアジャイル開発の2014年アンケートによると、アンケートに答えた56%のチームがスクラム、10%ほどがスクラムとXPの併用、8%がアジャイル手法の混合(XP, かんばん, リーンなど)を使っていることがわかりました。私からすると、アンケートに答えた18%はだいたい正しいことをしているように見えます。他は、もしかしたら、いつもしている単なる朝礼をアジャイルと呼んでいるかもしれません。 それは少し言い過ぎたかもしれませんが、同アンケートの別の
(注記:7/15、いただいた翻訳フィードバックを元に記事を修正いたしました。) 子供の頃、私の興味は互いに関係性のない様々な分野に及んでいました。数学も歴史も大好きでした。 ルネッサンスマン 、つまり 博学者 と言う、複数の分野に秀でた人になりたいと思っていました。これはとても難しい課題で、私は突如として、器用貧乏な人になってしまう危機に直面したのです。 私は特定の分野に特化しなくては、と考え始めました。そうすればたとえルネッサンスマンにはなれなくても、少なくとも、器用貧乏にならなくても済むと思ったのです。どうしたらソフトウェア開発をするのに必要な広い知識を保ちながら、1つの分野で専門性を高めることができるのでしょうか。 この記事では、過去5年間、私が良いJavaScript開発者になるために使ったテクニックとリソースの概要をお伝えしようと思います。 最近の多くのWeb開発者は、ある共通の
今回もラムダ書きますけど、重要なのはそこではないので勘弁してください。 java8でインターフェースでデフォルト実装が書けるようになりました。 参考:http://www.ne.jp/asahi/hishidama/home/tech/java/interface.html#h_default_method いつ使うの?abstractクラスの実装と何が違うの?と言われると「うっ」ってなりますが、 個人的な意見では仕様変更(機能追加)に強くなったのかと思ってます。 (関数型インターフェースでは多用しますけど今回はその話はしません。) 例(仕様) Containerインターフェースはkeyとuserから情報を返します。 実装クラスに下記の2種類1があります。 生成時に情報をロードしてキャッシュします。要求にはキャッシュから情報を返します。 要求に対して情報をロードして返します。一度ロードした
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? George Stockerの「How to destroy Programmer Productivity」の翻訳です(Georgeさんには報告済み)。 間違いがございましたら、ご指摘お願いします。 プログラマの生産性に関する次の画像は、インターネット中を徘徊しています。 ザ・シンプソンズが出てきそうだけれども、「真実だから面白い」。 私は、今まで生産的になる秘密について解明してきませんでした。それは、主には、私が一貫して生産的ではなかったからです。Joel on Softwareのジョエル・スポルスキは、ブログの記事でこのことについ
トップページ – アルゴリズムとデータ構造編 この章の概要 この章の概要です。 優先度付きキュー ヒープによる実装 まとめ 練習問題 参考リンク 更新履歴 優先度付きキュー(プライオリティキュー)は、要素1つ1つに優先度が割り当てられており、その優先度に従った順に取り出されるというデータ構造です。キュー(第6章)という名前が付いていますが、要素を取り出すときのルールがまったく異なります。 優先度のルールは自由に決めて構いません。たとえば、整数を格納する優先度付きキューであれば、その要素の値自体を優先度と考え、優先度の昇順に取り出されるといった具合です。この方法の場合、適当に複数の要素を格納した後で、取り出し操作を繰り返し行えば、昇順に並んだ要素の組が得られます。 優先度付きキューを実装する手段はいろいろとあります。単なる配列だけでも実現できますし、リスト構造や、木構造を使うこともできます。
「Objective-CがSwiftに置き換わる」っていうのがピンとこないのです。 それは、Swiftそのものがオープンソースになっても、あまり変わらないと思います。 以下はすごーくざっくりした知識で書いています。 Objective-Cの歴史 そもそもObjective-Cが何なのか、あまり知られていない気がします。 超ざっくり説明すると、AppleをやめたジョブズがApple OSの「次」として、当時としては革新的なオブジェクト指向OSだったNeXTSTEPを生み出しました。NeXTSTEPの存在は後の様々なOSに影響を与えました。OSXやiOS自体、NeXTSTEPの系譜です。 NeXTSTEPはオブジェクト指向のOS・開発環境・開発言語を統合し高い生産性を実現していました。その開発言語がObjective-Cでした。NSのプレフィクスの意味が、NeXTSTEPの略称というのは、比較
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く