フロントエンドのパラダイムを参考にバックエンド開発を再考する / TypeScript による GraphQL バックエンド開発
フロントエンドのパラダイムを参考にバックエンド開発を再考する / TypeScript による GraphQL バックエンド開発
ソフトウェアの世界には「悪い方が良い」原則という有名なエッセイがある。キレイにレイヤ分けされた一貫性のある良いデザインよりも、一見手抜きっぽい悪いデザインのほうが実は良いときもあるという話だ。この逆説的なデザイン原則を僕は身をもって体験したことがある。それについてちょっと書いてみようと思う。 僕はlldというリンカの現行バージョンのオリジナル作者だ。リンカというのはコンパイラと組み合わせて使うもので、実行ファイルやDLLを作るのに使用される。lldはプロダクトとしてはかなり成功していて、標準のシステムリンカとして採用しているOSがいくつかあったり、GoogleやFacebookなど皆が知っているような大規模サイトの中で広く使われていたりする。 現在のlldは2世代目で、第1世代のlldは僕がプロジェクトに参加する前から存在していたのだけど、数年前にそれを捨てて一から書き直すということになっ
以前に思いついたジョークでこんなものがある。 初級プログラマへのアドバイス コードを読みやすくするために、もっと抽象度を上げよう。 上級プログラマへのアドバイス コードを読みやすくするために、もっと抽象度を下げよう。 これはジョークなんだけど、抽象度が低すぎても高すぎてもコードは読みにくくなる、というのはある程度当たっていると思う。 抽象化が低すぎるケースを考えてみよう。数百行もある長大な関数に何十もの変数があり、ループのネストはやたら深いし、しかも変数は途中で別の用途に再利用されちゃっている、なんていうとんでもないことになっているコードを見たことがはないだろうか?私はある。というのも私は長いこと、そんなコードばかり書いていたからだ。複数の関数に分割するなり、状態を構造体にまとめるなり、変数のスコープを制限するなり、抽象度をあげることでコードを読みやすくできる、ということを学んだのはだいぶ
Google+に書いていたエッセイのアーカイブです。 すぐ置き換わるから大丈夫 #62 TeXの思い出 #61 Welcome to the industry! #60 ビルドという名のトンネル #59 キーボードを替えた話 #58 テストを実行するとログインシェルから追い出される問題 #57 シークレットストーリー #56 ドットコムバブルの思い出 #55 コミュニケーション能力とは何ぞや #54 メールで時間を無駄にしない方法 #53 パッチの数え方 #52 zipファイル中毒 #51 はじめてのIPv6 #50 最近の毛刈り #49 練習してもっと速くやるべし! #48 忍耐力指向プログラミング (Patience Oriented Programming) #47 VPNの謎 #46 ウェブプログラマへの道 #45 プログラムの見通しをよくする方法 #44 パイプがなぜか詰まってし
2016/08/02 開催 【アトラエ×ビズリーチ×LiB×レバレジーズ】HR×テクノロジー勉強会 Vol.2 の発表スライド http://eventdots.jp/event/593648
はじめに 普段システムやアプリケーションを作るのに、どういう手順でやるっけかなーというのを書き出してみた、というものです。 必ずしもこの通りにすればうまくいく、というものではなく、一例だと考えてください。 流れ 大雑把に次のような流れになります。 何をしたいのか、まとめる(企画、要件定義) 要件を満たすシステムの入力や出力の詳細、データの流れやシステムの処理をまとめる(仕様策定) 要件、仕様をどうやって実現するのか考えてまとめる(設計) 設計に対応する実装をする、システムを構築する(実装) 実装、構築して出来上がったものが、要件や仕様を満たしているか確認する(試験) 完成 各工程で、アウトプットしたものを後工程で使ったりします。 1. 何をしたいのか、まとめる(企画、要件定義) システムやアプリケーションに限らないですが、そもそも何をするのか決めていないと、始まらないので、やりたいことをま
プロダクト拡大フェーズでプロダクト検証サイクル効率化を目指す過程で見えたもの / Streamlining Product Validation in Growth Phase
こんにちは,yaottiです. 今日はQiitaやQiita:Team, Kobitoを開発するチームでぼくたちがどういう文化,価値観を大切にしているかをお話したいと思います. HRT, SPOF, LeanIncrements(あまり知られていませんが,Qiitaを作っている会社の社名です)の開発チームが特に大切にしているのは以下の3つです. HRTを大切にしたコミュニケーション属人性を極限まで排除する重要な価値に集中する以降でそれぞれ具体的に見ていきます. HRTを大切にしたコミュニケーションHRTとは HRTとはTeam Geek ―Googleのギークたちはいかにしてチームを作るのかという本にある考え方で(あらゆるチーム開発者に読んでほしい!),Humility(謙遜), Respect(尊敬), Trust(信頼)の3つを意味しています. 「驕り高ぶらないようにしよう」「相手を尊
Brainboard - Collaborative solution to visually build and manage cloud infrastructures from end-to-end. Cloud 66 - Free for personal projects (includes one deployment server, one static site), Cloud 66 gives you everything you need to build, deploy, and grow your applications on any cloud without the headache of the “server stuff.”. Pulumi — Modern infrastructure as a code platform that allows you
「技術的負債」をコントロールする定量評価手法への期待 からの続きです。 ソフトウェアサービス企業における技術責任者の最も重要な仕事のひとつが、エンジニアリングの効率化です。そのためには、サービスの初期開発コストだけでなく、運用コストを織り込んだ上で正しい技術的判断を行っていく必要があります。 「技術的負債」という言葉は、この運用コスト最適化の重要性を指摘する上で、とてもキャッチーなフレーズだと考えられます。しかし、「技術的負債」を産まないように、あるいは負債を早めに返していこうとすると、開発工数が大きくなってしまうという問題もあります。 初期開発コストと運用コストのバランス注1を、どのようにとっていけば良いのでしょう? 同等の機能を提供する「ソフトA」と「ソフトB」を考えてみます。ソフトAは、初期開発工数が6だが、2年目以降の維持工数が毎年4かかるとします注2。ソフトBは、初期開発工数が1
はじめに 現代では、ソフトウェアは一般にサービスとして提供され、Webアプリケーション や Software as a Service と呼ばれる。Twelve-Factor Appは、次のようなSoftware as a Serviceを作り上げるための方法論である。 セットアップ自動化のために 宣言的な フォーマットを使い、プロジェクトに新しく加わった開発者が要する時間とコストを最小化する。 下層のOSへの 依存関係を明確化 し、実行環境間での 移植性を最大化 する。 モダンな クラウドプラットフォーム 上への デプロイ に適しており、サーバー管理やシステム管理を不要なものにする。 開発環境と本番環境の 差異を最小限 にし、アジリティを最大化する 継続的デプロイ を可能にする。 ツール、アーキテクチャ、開発プラクティスを大幅に変更することなく スケールアップ できる。 Twelve-F
フロントエンドのパラダイムを参考にバックエンド開発を再考する / TypeScript による GraphQL バックエンド開発
はじめに 以下のエントリがHOTになっています。公開4日後の現在で949はてブです。 技術的負債という(非エンジニアにとっての)隠しパラメータが生産性100倍を起こす - mizchi's blog 私は企業で Software Engineer in Test としてソフトウェアの保守性に責任を持つポジションに就いている身ですのでこのテーマに関心があるのはよいことだとは思います。技術的負債そのものについてのエントリは過去にも沢山あるようですが、mizchi さんのエントリは誤解を恐れないシンプルで断定的な書き方ですので多くの人に刺さったのでしょう。 ただ、技術的負債(technical debt)というメタファーが万人に誤解無く伝わるのかは疑問です。時間を借りているのかはピンと来ませんし、財務的負債と異なり返済の義務はありません。また、エンドユーザーに提供する価値よりも負債にフォーカスし
カップル専用アプリPairyでおなじみ株式会社TIMERSのCTOの椎名アマドです。 先日うちの社員と話してて自分が普段使ってるChrome拡張機能をしれっと紹介したら、 「生産性が上がる」とだいぶ好評価でした。 なので今回は、モバイルアプリやスマートフォンWeb開発などに役立ってる、Chromeの拡張機能を紹介します。 使う使わないでかなり生産性が変わってくるものもあるので、是非活用してみてください。 API開発に最適 JSONView オススメ度:★★★★★ JSONで来たレスポンスを、綺麗に最適化して表示してくれます。 わかりやすく色分けハイライトされてたり、配列を畳むことが出来たりと、 APIを絡めた開発では必需品です。 Postman - REST Client オススメ度:★★★★★ REST リクエストをその場で作成して送信できるクライアントツールです。 GET/POST/D
年末にユビレジさんのところでちょっと仕事のお手伝いをさせていただいたので、その時の内容をご紹介させていただきます。 ■ユビレジって何? iPadをキャッシュレジスタに変えてしまうサービスです。会計からレシートの印刷までやってくれます。最近飲食店などでレジがなくiPadだけが置いてあるお店などを散見するかと思いますが、アレがそうです。一般的なキャッシュレジスタ+店舗システムよりもはるかに安価で導入でき、しかも使いやすいというのがウリです。 開発者的に言うと、Scalaモヒカンの@kmizuさんやiOSモヒカンの@k_katsumiさんなどが在籍されていまして、エンジニアのレベルが高いです。 ■開発スタイル 少人数のため、厳密なウォーターフォール管理やアジャイル/スクラムなどは無く、チケット/Issueベースの開発になっています。githubをフル活用します。すべてPull Request(以
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く