タグ

プログラミングに関するm_ogawaのブックマーク (63)

  • プログラミングというより物事が出来る思考法~実践編|牛尾 剛

    大変多く読んでいただいた「プログラミングというより物事が出来る思考法」というポストや、世界一流エンジニアの思考法の書籍で紹介した内容がある。 私の職場でも、ものすごく出来る人が「実践」しているところを何回も目撃しているので「実践編」として皆さんにシェアしようと思って今回のポストを書いてみた。 タイトルにもある通り、私はエンジニアだが、ビジネス書である書籍と書かれた多くの思考法と同じく、あまりエンジニアリングというものに関係ない要素であると感じている。 上記のポストや書籍でシェアした内容を端的に言うと「理解には時間がかかるがかける価値が十分あり、それによって自分が物事をコントロールしている感覚を身につけることが出来る」という自分の小さな発見だ。私がこのことを最初に発見したのは、新卒の出来る人々との出来事がきっかけだが、今回その小さな自分なりの発見を後押しするような出来事がいくつかあった。それ

    プログラミングというより物事が出来る思考法~実践編|牛尾 剛
  • Enumとてもつらい、でも負けない - エムスリーテックブログ

    列挙型、JavaでいうならEnum型、使っていますか。使わないわけにいきませんよね。 でも、Enumを使っていたせいで辛い目にあったことありませんか。ないですか。それならきっともうすぐに辛い目にあうと思います。 Enumはすべてのプログラマに等しく辛みを与えてくれるからです。そんな辛みについて、ちょっと一緒に直視してみましょう。 エムスリーエンジニアリンググループ、Unit1(製薬企業向けプラットフォームチーム)三浦(@yuba@reax.work) [記事一覧 ]がお送りいたします、エムスリー Advent Calendar 2023の6日目です。 アプリケーションプログラミング上の辛み 1. 既存のif文が偶発的に意図しない方に倒れる 2. switch文に至っては「どちらでもない」で処理不発に アプリケーションプログラミング上の対策 1. 分岐条件をEnumに持たせる 2. swi

    Enumとてもつらい、でも負けない - エムスリーテックブログ
  • アウトプットガチ勢が作った高速記事作成フレームワーク - Qiita

    はじめに 記事はアウトプットの心構えのカレンダー | Advent Calendar 2023の4日目の記事です こんにちは!!@Sicut_studyです! 私はアウトプットの大切さを日頃から発信しており、実際にQiitaにたくさんの記事を投稿しています そんな中で、自分なりに高速に記事としてアウトプットできるフレームワークを使っているのでそのフレームワークについて紹介していきます アウトプットの大切さ まず言っておきたいのはアウトプットは質より量です 量が増えるとだんだんと質もあがります 私は駆け出しのエンジニアの方に普段から「100記事を書けば人生変わる」と言っています。 そもそも世の中に100記事を書いたことのある経験をしたことがある人はごく僅かです そんなごく僅かな人になれれば絶対人生が変わります。 多くの人ができないことをやり遂げられる。しかも記事という形で目に実力が見え

    アウトプットガチ勢が作った高速記事作成フレームワーク - Qiita
  • リファクタリングをする際にソースコードの設計からはじめてはいけない - MonotaRO Tech Blog

    どうも、レコメンド商品のシステム開発をしている野川と申します。 私は、2021年にモノタロウに新卒入社し、2022年5月からレコメンド商品の開発に関わり始めました。 モノタロウのレコメンド商品は、下の図の①~④の流れでクライアントサイドで表示しています。大部分の処理はJavaScriptで構成しており、UIもそのHTML部分をjQuery(JavaScript)で作成しています。 図:レコメンド商品表の流れ 入社当時私は、ソフトウェアエンジニアとして、「可読性の低いコードは駆逐するべきだ」「読みやすいコードだけが正義である」「理解しやすいシステムだけが皆を幸せにする」と心の底から考えていました。加えて、「なぜ先輩たちは可読性の低いコードを放置して平気なのか?」と疑問を持つこともしばしばありました。 レコメンド商品周りのコードはまさに可読性の低いコードベースとなっていたため、当事者となった私

    リファクタリングをする際にソースコードの設計からはじめてはいけない - MonotaRO Tech Blog
  • はじめに - Writing an OS in 1,000 Lines

    書では、小さなOSをゼロから少しずつ作っていきます。 OSと聞くと腰が引けるかもしれませんが、OS (特にカーネル) の基機能は案外単純です。巨大なオープンソースソフトウェアとしてよく挙げられるLinuxでさえ、バージョン0.01はたった8413行でした。様々な要求に応えるために次第に肥大化していっただけで、当初は大変素朴な実装になっていました。 書では素朴なコンテキストスイッチ、ページング、ユーザーモード、コマンドラインシェル、ディスクデバイスドライバ、ファイルの読み書きをC言語で実装します。これだけ様々な機能が詰め込まれているのに、コードは合計でたった1000行未満です。 「1000行なら1日でできそう」と思うかもしれませんが、初学者には少なくとも3日はかかるでしょう。OS自作のハマりポイントは「デバッグ」です。アプリケーション開発とは違うデバッグ手法・能力を習得する必要がありま

    はじめに - Writing an OS in 1,000 Lines
  • 最小限のコードで動く最も汚いコードから始める

    最小限のコードで動く最も汚いコードから始める 2023.09.02 コードを書く際の重要な要点は、読みやすく他人に理解される「良いコード」を書くことです。しかし、完璧を目指して最初から書こうとすると行き詰まります。代わりに、荒削りながらも動くコードを作成し、徐々にリファクタリングして完成度を高めます。型エラーやリントエラーを無視しても構わないので、まずは動くものを作成しましょう。それからリファクタリングして「良いコード」を作成できます。 コードを書くときに最も大切なことってなんだろう?聡明な読者諸君ならご存知だろうが、コードは書く時間よりも読む時間のほうが長い。だから他人に読まれることを意識して、読みやすい「良いコード」を書かなくっちゃならない。コンポーネントは適切な粒度で分割されていて、適切な名前がつけられている。型システムに安全性だって守られてるし、最新のなんとかアーキテクチャにも準拠

    最小限のコードで動く最も汚いコードから始める
  • まだOpenAI使ったことないの?この記事で全員ハンズオンさせてやんよ!

    目次 はじめに 今回作成するシステムの概要 Azure OpenAI セットアップ Azure DevOps の Azure Repos をセットアップ Next.jsフロントエンド構築 Azure Static Web Apps へ Pipelines を用いて Deploy 動作確認 お片付け はじめに 昨今ちまたで話題の OpenAIchatGPT はさらっと触ったけど、API までは触ってないなぁ…という方向けのハンズオン 🖐️ となります。 この記事の目標としては、OpenAI を触ってみたい全てのアゲアゲエンジニアがハンズオン出来ることです。 セットアップで詰まるところはどんどんコメント欄に質問していただいたら、がんがん返していきますので、ご遠慮なく質問してください! では、Let's ハンズオン! 今回作成するシステムの概要 今回作成するシステムは Azure 上で作

    まだOpenAI使ったことないの?この記事で全員ハンズオンさせてやんよ!
  • strong, b, em, i, u, …、違いがわからんHTML要素の仕様を調べて「新しい見た目」を考えてみたら理解が深まった

    「strongもbも太字になるのにどう違うんだ…?」 「emもiもイタリック体になるけど、そもそもイタリック体ってなんなんだよ…?」 「strongの重要と、emの強調って何が違うんだ…?」 などなど、使い方がよくわからなくなりがちな HTML 要素(主にテキストレベルセマンティックスに分類される要素)の違いを調べてみました。 長めの記事になっていますので、気になる要素だけつまみいしてもらうのもよいかと思います。 今回の調査対象はこちら span strong b em i dfn cite var mark u ins del s strike big small ブラウザのデフォルトの見た目確認用 CodePen 調査する内容 HTML Standard の仕様に書かれている説明 一部、HTML 4.01 から HTML 5 での変更が理解の助けになるものもあり、HTML 4.01

    strong, b, em, i, u, …、違いがわからんHTML要素の仕様を調べて「新しい見た目」を考えてみたら理解が深まった
  • モブに早く慣れたい人のためのガイド

    生成AI・LLM時代における 機械学習エンジニアとしてのキャリア戦略・開発戦略 / my-career-and-development-strategies-for-ml-engineer-2024

    モブに早く慣れたい人のためのガイド
  • ゲーム開発者ら、ロード画面の“進捗バー”を「わざとガクガクさせている」と明かす。進捗バーは、プレイヤーのために嘘をつく - AUTOMATON

    ゲームのロード画面においては、ロードの進行を表す“進捗バー”が用意されていることもある。この進捗バーは、わざと不規則な速さで進むように設計されていることが多いという。開発者たちがSNS上で明かしている。 開発者の口からロード進捗バーについての意外な“真実”が明かされる発端となったのは、コメディアンのAlasdair Beckett-King氏のツイートだ。同氏はゲームのロード画面の進捗バーは均等な速度で動くべきであり、ロードにかかる時間を適切に反映する必要があると問題提起。そうした仕組みを用意してからほかの部分の開発を進めるべきである、との願望を伝えている。ゲームにおいてロード進捗バーが止まったり急に進んだりしがちという、いわば「あるあるネタ」を述べているのだろう。 Game developers need to invent a loading bar that moves at an

    ゲーム開発者ら、ロード画面の“進捗バー”を「わざとガクガクさせている」と明かす。進捗バーは、プレイヤーのために嘘をつく - AUTOMATON
  • 「有能なバカ」ChatGPTを使って1週間でiOSアプリを公開する方法

    初めまして、にわとろです。 さて今回は、ChatGPTを使ってiOSアプリをイチから作ってみました。ChatGPTの記事なんてもうオーバーフローするほどあるのですが、今のところiOSアプリを最後まで作り通した記事はありません。 理由は簡単で、ChatGPTは「バカ」なのでiOSアプリなんて複雑なモノを完成させられないからです。 しかしバカも使いようです。上手く使いこなしてやれば、アプリだって作ることができます。ChatGPTはバカですが、有能なバカです。でもあなたがヤツをわかっていなければ、やっぱり無能のままです。だから、この記事を読んで理解してあげないといけません。 それじゃあ、ChatGPTと仲良くなりにいきましょう。 ChatGPTを使う極意 早速ChatGPTを使う極意を教えます。全部読み通せなくても、これだけは覚えてください。 いい上司になれ。 何を言っているかというと、Chat

    「有能なバカ」ChatGPTを使って1週間でiOSアプリを公開する方法
  • やはりお前らの「公開鍵暗号」はまちがっている。

    ※タイトルの元ネタは以下の作品です。 はじめに この記事は、公開鍵暗号の全体感を正しく理解するためのものです。数学的な部分や具体的なアルゴリズムは説明しません。気になる方は最後に紹介するオススメ書籍をご覧ください。 少し長いですが、図が多いだけで文字数はそこまで多くありません。また、専門的な言葉はなるべく使わないようにしています。 ただしSSHやTLSといった通信プロトコルの名称が登場します。知らない方は、通信内容の暗号化や通信相手の認証(人確認)をするためのプロトコルだと理解して読み進めてください。 公開鍵暗号の前に:暗号技術とは 公開鍵暗号は暗号技術の一部です。暗号と聞くと、以下のようなものを想像するかもしれません。 これは情報の機密性を守るための「暗号化」という技術ですが、実は「暗号技術」と言った場合にはもっと広い意味を持ちます。まずはこれを受けて入れてください。 念のため補足して

    やはりお前らの「公開鍵暗号」はまちがっている。
  • オブジェクト指向はコードを複雑に読みにくくする - きしだのHatena

    「オブジェクト指向するとプログラムが読めなくなるから禁止」のような話は昔からあって、新しい技術についてこれない人を揶揄するようなニュアンスで使われていましたが、実際にはこれはオブジェクト指向迷路にうんざりした現場での率直な意見だと思います。 オブジェクト指向は、まじめにやるほどプログラムを読みにくくするという性質をもっています。 ※ 使い方次第というコメントついてますが、だからこそちゃんと性質をしっておく必要があると思います。 オブジェクト指向の代表的な指針を3つあげると次のようなものがあります。 オブジェクト同士の連携としてプログラムを組む 単一責務の原則 インタフェースと実装の分離 まず、オブジェクト同士の連携でプログラムを組むと、コードが飛びまくって追いにくくなります。そして単一責務の原則により、小さいクラスが大量に生成されて、追いにくさがさらにあがっていきます。 ダイクストラ先生が

    オブジェクト指向はコードを複雑に読みにくくする - きしだのHatena
  • もし「リーダブルコード」を弁護士が読んだら? - MNTSQ Techブログ

    こんにちは。「リーダブルコード」を先月読破して、感銘を受けた弁護士の人です。 なにに感銘を受けたかというと、「エンジニアが高級言語を効率的にコーディングするための工夫」は、契約という言語をコーディングするために援用できることがとても多いということです。 例えば、リーダブルコードは「関数には空虚な名前(tmpとかretvalとか)でなく、エンティティの実体に即した名前をつけよう!」と提案しています。 これめっちゃわかります!!!なぜなら、契約言語では当事者というクラスの表現のために「甲」「乙」という定義を未だに使います。そして、甲と乙を逆に書いてしまったままReviewを通過することが実際によくあります。オライリーさんには激怒されるでしょう。 しかし、よく考えると高級言語と契約言語が似ているのは当然だと思うようになりました。それは、どちらも「一定のインプットを入れると、必ず一定のアウトプット

    もし「リーダブルコード」を弁護士が読んだら? - MNTSQ Techブログ
  • Emacs をとにかくそれなりに使えるようにする

    最近 GNU Emacs 関連の諸々をいろいろ見直していてしみじみ思ったのだが、やはり Emacs は一通り使えるようにするまでがめんどくさいですな。昔に比べればインストール自体は簡単になったが、そこから先がよく分からない。素のままの Emacs はかなり使いにくい代物で、VSCode あたりに慣れた今の目からすると、見ため的にもちょっとしょぼい。設定を解説するウェブページ等はいくらでもあるのだが、何せ約40年の歴史があるソフトウェアで、おまけになんだかんだ言って結構活発に開発が続いているので、解説といっても内容が古くなっていることが多く、混乱に拍車を掛けている。そのあたりが人々を Emacs から遠ざけているとしたら残念なことである。 近年は Doom Emacs や Spacemacs といった設定フレームワークがそのへんを補おうとしているようだが、個人的な好みで言えば、これらはちょっ

    Emacs をとにかくそれなりに使えるようにする
  • 君には今から3時間で機械学習Webアプリを作ってもらうよ

    新人: 「日データサイエンス部に配属になりました森です!」 先輩: 「お、君が新人の森さんか。僕が上司の馬庄だ。よろしく!」 新人: 「よろしくお願いします!」 先輩: 「さっそくだけど、練習として簡単なアプリを作ってみようか」 先輩: 「森くんは Python なら書けるかな?」 新人: 「はい!大学の研究で Python 書いてました!PyTorch でモデル作成もできます!」 先輩: 「ほう、流石だね」 新人: 😊 先輩: 「じゃ、君には今から 3 時間で機械学習 Web アプリを作ってもらうよ」 先輩: 「題材はそうだなぁ、写真に写ってる顔を絵文字で隠すアプリにしよう」 先輩: 「あ、デプロイは不要。ローカルで動けばいいからね。顔認識と画像処理でいけるよね?」 新人: 😐 新人: (えぇぇぇぇぇぇぇ。3 時間?厳しすぎる...) 新人: (まずモデルどうしよう。てかもら

    君には今から3時間で機械学習Webアプリを作ってもらうよ
    m_ogawa
    m_ogawa 2022/05/30
    三銃士…
  • オンラインゲームでは、お互いの位置がだいぶ離れていても (日本とブラジルくらい) 何故素早く同期できるのですか?どのように通信しているのでしょうか?に対するNakamura Yutaさんの回答 - Quora

    回答 (7件中の1件目) 通信するデータ量が増えれば増えるだけ、遠距離間における反応は遅くなることは感覚的に理解できるのではないかと思います。 そういう意味で、反射速度を上げてゲームむを滑らかに遂行させるためには、なるべく通信するデータは少ないのがベストです。 なので、単位時間当たりのプレーヤーの位置、入力コマンド、標的の座標といった、操作に関わるデータを何かしらのデータ圧縮を用いて通信し、そのうえで遠隔地にいるプレーヤー同士の対戦を実現しているのだと思います。 その時に、なるべくデータを小さくするためにある程度の操作などをテーブルにまとめておいたのを用意し、一回のデータで複数のコ...

    オンラインゲームでは、お互いの位置がだいぶ離れていても (日本とブラジルくらい) 何故素早く同期できるのですか?どのように通信しているのでしょうか?に対するNakamura Yutaさんの回答 - Quora
    m_ogawa
    m_ogawa 2022/05/12
    すごくいい質問
  • 教える側が知らないプログラミングの3つのこと

    2022/3/25に行われた「第一回プログラミング教育について話し合う会」でのLT資料です。 https://opt.connpass.com/event/240392/

    教える側が知らないプログラミングの3つのこと
    m_ogawa
    m_ogawa 2022/03/27
    「プログラムの理解が必要」は分かりみ。レベル、分野、背景、目的などが多様すぎてなかなか簡単には語りきれない感がある。
  • 真面目なプログラマのためのディープラーニング入門

    はじめに: 講座は「機械学習ってなんか面倒くさそう」と感じている プログラマのためのものである。講座では 「そもそも機械が『学習する』とはどういうことか?」 「なぜニューラルネットワークで学習できるのか?」といった 根的な疑問に答えることから始める。 そのうえで「ニューラルネットワークでどのようなことが学習できるのか?」 という疑問に対する具体例として、物体認識や奥行き認識などの問題を扱う。 最終的には、機械学習のブラックボックス性を解消し、所詮は ニューラルネットワークもただのソフトウェアであり、 固有の長所と短所をもっていることを学ぶことが目的である。 なお、この講座では機械学習のソフトウェア的な原理を中心に説明しており、 理論的・数学的な基礎はそれほど厳密には説明しない。 使用環境は Python + PyTorch を使っているが、一度原理を理解してしまえば 環境や使用言語が

    真面目なプログラマのためのディープラーニング入門
  • 表紙 - 本物のC

    このサイトは「物の C 言語」について学習する機会の提供を目的としています。 「物の」とはつまり、 標準規格(仕様)が C 言語をどういうものとして定めているか C プログラムが実際に CPU をどう動かすか という二つの意味合いに於いてです。 どうも巷間にはその辺りを気にせず何となくで書かれた資料が多い様なので、このサイトにより少しでも世界が最適化される事を期待します。 権利について 当然ですがこのサイト全体は著作権法により保護されています。法と良心に則って御利用下さい。 連絡はcontact<アット>real-c.infoまで。

    m_ogawa
    m_ogawa 2022/03/02
    unionあるやん…