質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

Q&A

6回答

2001閲覧

アルゴリズムの素養について

tomoharu

総合スコア107

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

0グッド

1クリップ

投稿2020/10/07 07:39

編集2020/10/07 08:14

文系からエンジニアになった26才ですが、正直アルゴリズム問題が苦手です。
fizzbuzzとかフィボナッチとかはまあわかるんですが、より高度になってくるとわからないことも多々あり。。。

理系とか情報学部とか出てる方って練習とかせずにパパッと解けてしまうものなのかと思い、そういう人たちとこれからどう戦っていけばいいか時々不安になります。もちろん練習問題をときまくるというのも一つの手ですが。。。

こういう素養というか本来的な素質が足りないと感じたとき、皆様はどう対応していたか、もし実体験等あればお教えいただきたいです。

何卒よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/10/07 07:42

>理系とかcsとか この場合の「cs」とは何でしょうか。 そして、何を目指しているのでしょうか。 実務においてアルゴリズム問題を解くような場面って試験でも受けない限りないかと思うのですが。
Zuishin

2020/10/07 07:44

> fizzbuzzとかフィボナッチとかはまあわかるんですが、 これらが本当にわかるなら(つまり応用問題を自分一人の力で何も見ず解けるなら)素養はあります。わかったのではなく覚えただけなら未来はありません。 FizzBuzz で、通常の出力にくわえてさらに 2 の倍数の時だけ「!」をくわえてみてください。たとえば 6 なら Fizz! になります。
tomoharu

2020/10/07 07:56 編集

> m.ts10806さん 言葉足らずですみません。csはコンピューターサイエンスです。日本で言えば情報学部とかです。 目指すという意味でいくと、海外に出てエンジニアをやっていきたいと考えています。レイヤーは特にまだ決めておらずフロントでもインフラでもやっていくつもりです。試験でも受けない限りないとは思いますが、優秀なエンジニアはみんなアルゴリズムが得意なような気がしたので。。。 >Zuishinさん ありがとうございます。本当にわかっているのかの判断が自分では難しいですね。。。FizzBuzzはやってみます。何もみずに解けるかは問題によりけりですね。。。もちろんその後答え見たときに理解しようと努めてはいます。
mjk

2020/10/07 08:00

アルゴリズムを学習したいのでしたらAtCoderがオススメです。 競技プログラミング=競プロと呼ばれているものです。 実務に直結するかどうかは別としてご存知無いなら一見の価値はあるかと思います。 (私は実務では無く趣味として勉強してる程度の者なのであしからず)
m.ts10806

2020/10/07 08:11 編集

質問は編集できます。 CS 非常に多くの意味があります(IT業界に限っても) https://ja.wikipedia.org/wiki/CS 変に略さずきちんと書いたほうが良いでしょう。文脈から読み取れないケースも多いです。
tomoharu

2020/10/07 08:15

> mjkさん ありがとうございます。見てみます。 >m.ts10806さん 修正しました。申し訳ありませんでした。
hentaiman

2020/10/07 08:24

アルゴリズム限定の話か
tomoharu

2020/10/07 08:49 編集

>hentaimanさん アルゴリズム限定ではなく、エンジニアとしてのそもそもの素質的な意味合いですね。その一例としてアルゴリズムを出させていただきました。
m.ts10806

2020/10/07 08:54

>エンジニアとしてのそもそもの素質的 質問の内容で方向性が決まります。 タグにもタイトルにも「アルゴリズム」とあり、質問内容もアルゴリズムに特化した内容になっているので、「エンジニアとしての」と思う人はそこまでいないのでは。 ただ「エンジニアとしての・・と」となると意味が広すぎて、プログラミングとは直接関係なくなります。 聞きたいことは変に例えたり隠したりせず、ストレートに書いたほうが良いでしょう。見ている人は質問者の人となりも事情も前提も何も知らない赤の他人です。
m.ts10806

2020/10/07 08:56

プログラミングを「する」、コードを「書く」だけがエンジニアではないですしね。
tomoharu

2020/10/07 11:46

m.ts10806さん ご指摘ありがとうございます。。。 確かにそうですね。。配慮が足りなかったと反省しております。
think49

2020/10/07 11:57

> 高度になってくるとわからないことも多々あり。。。 これは「できない」ですか? 「時間がかかる」ではなく?
tomoharu

2020/10/07 15:23

think49さん たまに答え見て、あーそういうふうにやるのかってなることがある感じですね。。。時間かけてもわからない時はわからないです
guest

回答6

0

アルゴリズムの問題が解けたからと言って現場で通用するかは別。

要は事象の洗い出しがどれだけできるかに尽きると思います。

個人的には確率の問題を解くのが良いのではないかと思います。
確率問題は事象を明確にしないと正しい答えは導き出せないので。

常に多角的な視点で物事を観察するようにすると、段々と物事の本質を捉え易くなってきます。
そうすれば、アルゴリズムでの抜け漏れが少なくなります。

補足

多角的な視点とは、例えば正面から見ると正方体に見えていたものが、視点をずらすと実は四角錐だったりするような事です。

アルゴリズムに於ける多角的な視点とは、例えばインプットを変えてみるという事です。
これは、アルゴリズムのテストパターンです。
どれだけのインプットを準備できるかは、どれだけ起きうる事象を想定できるかに掛かっています。
但し、抜け漏れではなく、良いアルゴリズムを描けるかは、知識や閃きに関係する部分です。

本質を捉える能力は、アルゴリズムの素養だけではなく、閃きも含め全てに通じるものだと思います。

投稿2020/10/07 08:40

編集2020/10/08 03:46
sazi

総合スコア25206

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

海外に出てエンジニアをやっていきたいと考えています。

まずは英語を。ドキュメントは原文で読み解く癖を。

私自身、海外経験すらないですが、文系出身ということで共感できる部分は多いです。
ただ、プログラミングは数学とは違い、ゴールが決まっていて過程は決まっていません。その過程を考えることが「アルゴリズム」だと私は個人的には思っています。
どこかの回答でも書いたのですが、
1+1の答えを求めるのではなく、2が答えとなる式を考える。

以前CMでやっていた記憶があります。
海外では〇+△=2という形で問題が出てきます。

パターンを身に着けることは重要かと思いますが、それが全てではなく場合によって別のパターンもその場で考えられるように柔軟な発想力は必要かと思います。
何が最適かはその時によって違います。

解法を漁るよりも、要件の整理と細分化、それらを部品・道具としてどうやって組み合わせて実現するかを考える癖をつけることです。

投稿2020/10/07 08:24

m.ts10806

総合スコア80861

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pepperleaf

2020/10/07 12:13

> 海外に出てエンジニアをやって 海外出張の経験しかありませんが、一部の方には英語、ペラペラと勘違いされてました。(学生時代、赤点多数) そんなモンと変な自信。 だから、 > まずは英語を。 以外は同意。(ま、分かる方が圧倒的に有利ですが)
m.ts10806

2020/10/07 20:46

コミュニケーションを取れるくらいは必要かなと思ってます。生活はしなきゃいけないですし仕事も会話無しでは成り立ちませんしね。 現地の新聞は読めないけど、テレビで言ってることはじゅうぶん分かる、とか。
guest

0

皆様はどう対応していたか

質問者自身が言ってる通り

もちろん練習問題をときまくるというのも一つの手ですが。。

ですね。自分の場合はアルゴリズムではないし練習問題でもないですが。

解きまくれるならそれでいいじゃないですか。凡人らしく何度でも何パターンでも繰り返してインデックス増やしましょう。
100パターン考え方があるなら100パターン暗記すればパターンにハマッた問題に対応出来るじゃないですか。
組み合わせて対応だって出来ます。

パパッと解けてしまう

それは一切の事前知識の学習無しで解決出来るような天才の話ですか?
技術者に限って言えば、天才と思える程IQ高い人(閃く人)なんて現実とteratail合わせて振り返ってみても今までで一人しか見た事ありません。
※技術力がどうとか博識かどうかは別です。技術力の高い人なら散見しています。

飽くまで閃き勝負をしたいなら無理なので諦めましょう。IQの高さは生まれ持った才能です。
競いたいなら違うところで勝負しましょう。

csはコンピューターサイエンスです。日本で言えば情報学部とかです。

これはむしろその分野の知識を持っている事の方が重要です。
その程度の事に気付けずにひたすらデータと向き合う技術力を上げようとしている人がいたとしたらそれは間抜けと思いますが・・・。

投稿2020/10/07 08:58

hentaiman

総合スコア6426

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

miyabi_takatsuk

2020/10/07 09:07

> IQの高さは生まれ持った才能です。 競いたいなら違うところで勝負しましょう。 すごく共感です。 プログラミングは比較的、努力などでカバーがしやすい、他者と差異をつけやすい分野だと思います。
hentaiman

2020/10/07 09:45

今はその努力すら世界中の先駆者達が代わりにやってくれるからありがてぇで事でござんすなあ ぐーぐる先生に感謝デスネ
miyabi_takatsuk

2020/10/07 10:27

ですねw それを見つけ出す調査力と組み合わせが逆に他者との差異になるんじゃないかなーと思います。 なんにせよ、本人次第なんだと思います。
guest

0

こういう素養というか本来的な素質が足りないと感じたとき、皆様はどう対応していたか、もし実体験等あればお教えいただきたいです。

ひとにきく.

相手にせねばならない目の前の具体的な問題について,「何をどうすば良いのかが自分には全くわからん/思いつかん/etc」という状況に実際になったならば,
それはもう自分だけではどうしようもない可能性が濃厚なわけで,まずはそれを素直に認めることです.
で,「その問題について他人と話す」というのが対応方法です.
周囲に自分よりもその分野に優れた人がいるならば好都合.そうでなくても,自分が思いつかなかった角度からの考え方の話みたいなヒントが得られるかもしれませんし,それ以前に問題点を他者に説明するという行為自体が自身の考えを整理する機会になったりします.

(「非常識な難易度の何かを」「自分1人だけでパパッと片付けることが日々求められている」ならばダメでしょうけど.)

投稿2020/10/07 10:26

fana

総合スコア11708

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

情報科学科中退でプログラマーをやっている者です。

自分も、周りの優秀なプログラマーたちと自分を比べて劣等感を覚えることがよくあります。
彼らは誰にも頼まれていないのに、僕が仕事でやっているのよりも遥かに高度なプログラミングを嬉々としてやっています。
勝てる気がしません。

僕自身はどうするべきか、という考えを整理しつつ回答します。
姿勢としては、

  • 技術的にはどう頑張っても彼らに勝てないことは諦めつつ、近づくことは諦めないこと
  • 技術以外の部分で稼ぐ道を模索する

と言ったところかと思います。

※質問者さんが「戦っていく」と表現しているのは、労働市場での競り合いの話だと仮定して話を進めています

より具体的な方策としては、彼らが積み上げてきたような知識を追いかけるように基礎から順番に積み上げていくしかないように思います。大学、高校、中学、ことによれば小学校の教科書を入手して離散数学、集合、論理などの数学を学び直す、とか。

教科書以外の本でも、プログラミングに必要な考え方や数学的な考え方を学ぶのに役に立つ本が多く出版されています。そう言った本を読むのも良いのではないでしょうか。僕が今まで読んで役に立った本を挙げると「あなたはコンピュータを理解していますか」や、タイトルを失念しまいましたが、ペアノの公理や加算と乗算の関係にについて解説したブルーバックスの文庫本などがあります。

投稿2020/10/07 08:55

AtsushiYonenaga

総合スコア116

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

それらのアルゴリズムをきちんと理解した上で、
常日頃、ひねくれた考え方、をするように意識することですね

投稿2020/10/07 07:58

y_waiwai

総合スコア87800

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tomoharu

2020/10/07 07:59

ありがとうございます。捻くれたと言いますと、これはもっとこうしたらよくなるんじゃないかみたいな、 疑ってかかる感じでしょうか?
y_waiwai

2020/10/07 08:03

あんまし凝り固まると、アタリマエのことしか出てこなくなります。 そこからひねくれていきましょう
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問