データサイエンスと人工知能の専門家がプログラミングスキルを向上させる方法

データサイエンスと人工知能の専門家がプログラミングスキルを向上させる方法

[[379310]]

ビッグデータダイジェスト制作

出典: medium

編集者: Hippo

プログラミングは嫌いです!

これは私が7年前のインターンシップ中に同僚に言ったことです。まったくその通りです。私はバスに乗っている無表情な人たちのような、感情のないプログラムされた機械にはなりたくない。

現在、私はプログラミングの大学院学位を 2 つ取得しており、5 つの異なる企業で Web 開発者として働き、現在はコンピューター ビジョン エンジニアとして働いています。

プログラミングが大好きです!

これは、なぜ私がテクノロジーにそれほど興味を持っているのかと聞かれるすべての人に私が答えていることです。私がプログラミングを好きになったのは、コードで実装されたアプリケーションが、今日のテクノロジー主導の社会に真のチャンスをもたらすという認識からです。

この記事では、プログラミングスキルを養い、向上させる方法を紹介します。プログラミング スキルを向上させるために使用できる 5 つの戦略を紹介します。

アルゴリズム演習

アルゴリズムは、私を含め、多くの機械学習実践者を怖がらせることが多いです。機械学習分野の台頭により、ヒューリスティックアルゴリズムによるパターン検出という従来の方法は不要になり、特徴検出はニューラルネットワークに任されるようになりました。

それでも、アルゴリズムはソフトウェアとコンピューティングの世界、そして機械学習の世界では確実に重要な役割を果たします。アルゴリズムの練習はプログラミングスキルを向上させる最良の方法の 1 つです。

コードのメモリ効率を高めるためのインスピレーションを得られるという明らかな利点の他に、アルゴリズムを研究することのもう 1 つの利点は、問題を解決するための適切な考え方が養われることです。

選択したプログラミング言語で、さまざまなデータ構造とデータ変更方法を探索するアルゴリズムを実装します。データ オブジェクト、メソッド、その他の便利な関数を使用してプログラミングの効率を高める方法を学びます。

データ サイエンティストは、データ マイニングや Web クロールのアルゴリズムをよく使用します。アルゴリズムとデータ構造を十分に理解することで、実際に実行速度が速い効率的なコードを作成し、プロジェクトの納期をさらに短縮できます。

アルゴリズムによって複雑さのレベルは異なりますが、ここではアルゴリズムについて簡単に説明します。関連リンクはここにあります:

https://towardsdatascience.com/algorithms-for-data-scientists-insertion-sort-6caa69f906b3

個人的な経験:

モバイル コンピューター ビジョン エンジニアとして、私はポーズ推定、オブジェクト検出などの一般的なコンピューター ビジョン (CV) タスクに多くのディープラーニング モデルを使用しています。

PyTorch、TensorFlow、Keras などのプラットフォームはモデル実装の複雑さを軽減しますが、特定のユースケースにはカスタム アルゴリズムを実装する必要があることがわかりました。

たとえば、コサイン類似度に基づいてポーズ マッチング アルゴリズムを作成したり、機械学習モデルの出力であるデータ構造を効率的に走査したりします。

さまざまなアルゴリズムのリスクを十分に理解していることを確認するために、非常に優れた教科書「アルゴリズム入門(第 3 版)」を購入しました。ただし、この教科書は初心者にはあまり優しくないかもしれません。この場合、HackerRank などのプラットフォームが特に推奨されます。

技術書

本で勉強すると、まるで学校に戻ったような気分になります。生き生きとした言葉と詳細な内容の本ほど有益なものはありません。

キャリアの初期には、私は「忍者レベル」のプログラミングスキルを習得したので、最終的には YouTube チュートリアルを見たりプログラミングの本を買ったりしなくなるだろうと常に思っていました。

しかし、長年かけて、どんなレベルに到達したとしても、プログラミング言語について学ぶことは常にあることに気づきました。私は YouTube のプログラミング チュートリアルで学ぶのが大好きですが、古典的なプログラミング技術書に記載されている豊富で簡潔な知識に代わるものはありません。

たとえば、Python はデータ サイエンティストが習得しやすい標準的なプログラミング言語です。構文、データ構造、一般的な関数を数週間学習すると、カスタム Python スクリプトを簡単に実装して実行できるようになります。さらに一歩進んで、ビデオを通じて Python の中級スキルを習得することもできます。

ただし、Python ではプログラミング スキルを向上させるために探索できることがさらにたくさんあります。 Python 言語についてより詳しい情報を学んだ方法の 1 つは、技術書、具体的には Fluent Python を読むことでした。この本は初心者向けではなく、中級者以上のプログラマーがプログラミング能力を向上させることを目的としています。

要約すると、技術書は、プログラミング言語のシンプルで明確な紹介を提供することでデータ サイエンティストのプログラミング スキルを向上させることができます。また、プログラミング言語の詳細な説明を提供することで、データ サイエンティストの既存のプログラミング スキルを向上させることができます。

他の開発者のコ​​ードを読む

[[379311]]

最近、ディープラーニング畳み込みニューラルネットワークInception Networkを実装してみました。

私はすでに Python と TensorFlow ライブラリを使用したアプローチをとっていましたが、他の機械学習実践者がどのようにそれを行っているのか興味がありました。

私はいくつかの GitHub リポジトリを調べ、他の開発者のコ​​ードを研究し、間違いなく、既存のソリューションを改善し、既存のプログラミング スキルをより適切に適用する方法を学びました。

勉強や学習に利用できる公開 GitHub リポジトリが多数あります。 Google や Facebook のようなテクノロジー企業で働いていなくても、その開発者から学ぶことができます。エンジニアが開発したプロジェクトの公開リポジトリを閲覧するだけです。データ サイエンティストにとって、これは最近リリースされた Detectron2 やその他のオープン ソースの機械学習ツールなどのコード リポジトリを調査することを意味する場合があります。

職場の社内開発チーム内でコードレビューを実施することも適切な学習方法です。他の開発者の実装方法の背後にある理由や考え方を理解することで、間接的に自分の視野やプログラミングの知識を広げることができます。

さまざまなプログラミング言語を学ぶ

プログラミング言語の多様性を追求することが、プログラミング スキルを向上させる唯一の方法です。プログラマーはコードを使用して問題を解決しますが、複数のプログラミング言語の知識があれば、問題解決に利用できるツールが広がります。

Python を習得すると、データ サイエンスの中核となる実用的なアプリケーションを学習できるようになります。しかし、専門的かつ実用的な環境では、ソフトウェア開発にはさまざまなプラットフォームが含まれ、それぞれに機能にアクセスして実装するための特定の言語があります。

プロの機械学習実践者は、次のようなアプローチでさまざまなプログラミング言語を適用する場合があります。

  • JavaScript でインターネットからデータを取得する
  • SQLの変更とデータベースのクエリ
  • アルゴリズムと機械学習モデルのPython実装
  • 統合機械学習モデルを備えたモバイルデバイスアプリケーションの Swift/Kotlin/Java 開発
  • その他のツールと方法

1 つのプログラミング言語に習熟すると、新しい言語を習得するのがはるかに簡単になります。オブジェクト指向プログラミング、関数型プログラミングなどの一般的なソフトウェア開発パラダイムを理解していれば、物事をスムーズに進めやすくなります。さまざまなプログラミング言語に適用できるソフトウェア開発パラダイムに関する知識。

ソフトウェア開発の原則に従う

シンプルさを重視し、繰り返しを避け、読みやすさを向上させます。

これらは私が長年プログラミングをしてきた中で蓄積してきた経験です。これらは単純に聞こえますが、ほとんどの開発者はこれに従わず、私自身も時々これらの原則を忘れてしまいます。

[[379312]]

そのため、ソフトウェア エンジニアリング業界では、開発者が簡潔で効果的なソフトウェアを開発できるように、いくつかのガイドラインが繰り返し提唱され、施行されています。いくつかはリストアップされています。

(1)KISS原則

Keep It Simple Stupid (KISS) は、ソフトウェアを開発する際のシンプルさの概念を重視します。問題の解決策は複雑である必要はありません。ソフトウェア開発の設計および実装フェーズでシンプルさを採用することで、コードの理解と保守が容易になります。

 確かに、技術者は自慢したがりますが、読みやすさのためにシンプルにしておきましょう。

——アメリカのテレビシリーズ「You Are Not MR.Robot」

(2)SOLID原則

Solid 原則は、オブジェクト指向開発者が再利用可能、拡張可能、保守可能、かつ効率的なプログラムを構築できるように設計された一連の原則で構成されています。 SOLID で取り上げられている原則の使用と実践について詳しくは、Katerina Trajchevska によるこのビデオをご覧ください。

関連リンク: https://www.youtube.com/watch?v=rtmFCcjEgEw&ab_channel=LaraconEU

  • 単一責任の原則
  • オープン・クローズ原則
  • リスコフの置換原理
  • インターフェース分離の原則
  • 依存性逆転の原則

(3)DRY原則

同じことを繰り返さないでください。プログラムを作成するときに、既存の機能を実行するコードを作成すると、開発時間が無駄になります。重複を避けるには、プロジェクト フォルダー内のユーティリティ ファイルを活用するのがよいでしょう。ユーティリティ ファイルには、ソース コードで頻繁に実行される一般的なタスクが含まれています。

特別賞

(1)個人プロジェクト

個人プロジェクトに取り組むことで、多くの機械学習実践者が新しい分野、ライブラリ、プラットフォーム、フレームワーク、プログラミング言語に触れることができます。

プログラミング スキルを向上させるために個人プロジェクトに取り組む主な利点は、ソフトウェア製品を開発するときにさまざまな問題に遭遇することです。プログラミングで問題を解決するたびに、全体的なスキル レベルが向上します。

(2)経験の共有

自分が使い慣れた言語でプログラミングする方法を他の人に教えることは、プログラミング スキルを向上させ、専門知識を示す実証済みの方法です。 YouTube 動画、オンライン コース、または私のお気に入りの Medium のブログ投稿など、さまざまな方法で自分の経験を共有できます。

結論は

プログラミングスキルの向上は終わりのない旅です。プログラミングはいつでも学習したり、上達したりできます。

学習プロセスを楽しむようにしてください。

状況が本当に難しい場合があり、StackOverflow ではすべての質問に答えられないことがありますが、スキルを磨くために費やすあらゆる努力が、最終的にスキルを習得するために必要であることを忘れないでください。

関連レポート:

https://towardsdatascience.com/how-to-improve-programming-skills-for-data-scientists-and-machine-learning-practitioners-d865d8aadab1

[この記事は51CTOコラムBig Data Digest、WeChatパブリックアカウント「Big Data Digest(id: BigDataDigest)」のオリジナル翻訳です]

この著者の他の記事を読むにはここをクリックしてください

<<:  機械学習とディープラーニングの違いを簡単に分析する

>>:  5分でPythonのランダムヒルクライミングアルゴリズムをマスターする

ブログ    

推薦する

...

人間の脳の視覚処理を模倣し、ニューラルネットワークが敵対的なサンプルに対処できるようにする

ディープラーニングは、小切手や封筒に手書きされた文字しか認識できなかった時代から、長い道のりを歩んで...

2019年にロボット分野で注目すべき5つのトレンド

2019 年に注目すべき 5 つのロボット トレンドは次のとおりです。 [[259551]] 1. ...

カスタムデータセットにOpenAI CLIPを実装する

2021年1月、OpenAIはDALL-EとCLIPという2つの新しいモデルを発表しました。どちらも...

...

ネットワークにおける機械学習の実用的応用

各 Web アプリケーションには独自の機能とパフォーマンス パラメーターのセットがあり、これらは動的...

中国がAI技術をリードしているのは数学が優れているからでしょうか?米誌、中国と米国の数学教育の格差を指摘

米国のコンピューターサイエンス分野の博士課程学生の 64% 以上と修士課程学生の 70% 近くが留学...

...

「ICV革新的アルゴリズム研究タスク」が正式にリリースされました!登録は11月18日に開始されます

中国自動車工程協会と国家インテリジェントコネクテッドビークルイノベーションセンターは、「2021年第...

機械学習について知っておくべき6つの革命的な教訓

私たちは、ロボット工学、スマート家電、スマート小売店、自動運転車技術などによって推進される新しい時代...

...

人工知能の知能を実現する方法

[[257748]]近年、ビジネスにおける人工知能 (AI) の重要性が急速に高まり、今では主要なテ...

強化学習は、抽象的思考を行うときに脳がどのように機能するかを明らかにする

[[418206]] 「すべての芸術はある程度抽象的である。」 20 世紀の世界的に有名な彫刻家ヘン...

...

コード生成のためのツリーベースのTransformerアーキテクチャ

導入:コード生成は、プログラマーの生産性を大幅に向上させる可能性を秘めた重要な AI 問題です。自然...