大数据文摘出品
来源:medium
编译:Hippo
我讨厌编程!
这是我七年前在实习期间告诉同龄人的话。千真万确。我不想像公交上那些面无表情的人那样成为没有感情的编程机器。
时至今日,我已经获得了2个编程相关专业的研究生学位,先后在5家不同公司中担任网络开发人员,目前担任计算机视觉工程师职位。
我热爱编程!
这是我告诉所有问我为何如此热衷技术的人的话。我对编程的热爱源于这样一个认识:使用代码实现的应用确实为如今这个技术驱动的社会带来了机遇。
本文介绍培养和提高我的编程能力的方法。这里将提供5种可以用来提高编程技能的策略。
算法练习
算法常常会吓跑很多机器学习从业者,我自己也不例外。机器学习领域的兴起使得通过启发式算法来检测模式的传统方法不再成为必须,我们将特征检测留给了神经网络。
尽管如此,算法仍在软件和计算领域中占有一席之地,并且肯定在机器学习领域中也不可或缺。算法练习是提高编程技能的利器之一。
除了在提高代码内存效率的灵感方面具有显而易见的好处,研究算法的另一个 好处是能很好的培养解决问题的思维方式。
用你所选择的编程语言实现探索各种数据结构和数据修改方法的算法。了解如何利用数据对象、方法和其他有用的函数提高编程效率。
数据科学家经常使用数据挖掘和网络爬虫算法。充分了解算法和数据结构有助于生成高效的代码,在实践中执行速度更快,进一步减少项目交付时间。
不同算法的复杂程度也不尽相同,这里有一个供你热身的简单算法说明。相关链接可以参考这里:
https://towardsdatascience.com/algorithms-for-data-scientists-insertion-sort-6caa69f906b3
个人经验
作为移动计算机视觉工程师(Mobile Computer Vision Engineer),我将许多深度学习模型用于常见的计算机视觉(CV)任务中,例如姿势评估、对象检测等。
尽管PyTorch、TensorFlow和Keras等平台转移了模型实现的复杂性,但我发现有必要针对特定用例实现自定义算法。
例如,创建基于余弦相似度的姿态匹配算法或有效地遍历作为机器学习模型输出的数据结构。
为了确保我对各种算法的风险有足够的了解,我买了一本很好的教材——《Introduction to Algorithm(第三版)》。不过这本教材可能对初学者并不是特别友好,在这种情况下,特别推荐诸如HackerRank这样的平台。
技术书籍
书本学习让我感到自己回到了校园,没有什么能比语言生动、内容详实的书籍更让人受益匪浅。
在我职业生涯的早期,我一直以为自己最终会停止观看YouTube教程或是购买编程书籍,因为我已经获得了“忍者级”的编程技能。
然而几年来,我意识到无论已经到了哪个程度,都能了解到更多关于编程语言的知识。尽管我喜欢通过YouTube编程教程进行学习,但没有什么能取代经典编程技术书籍中丰富而简洁的知识。
例如,Python对于数据科学家来说算是一种易于掌握的标准编程语言。经过几周的语法、数据结构和通用函数的学习,可以轻松实现和运行自定义python脚本。你可以进一步通过视频学习具备Python的中级技能。
但是,Python中可以探索的内容还有很多,而且都可以提高你的编程技能。我学习有关Python语言的更深入内容的方式之一就是通过技术书籍,更具体地说是《Fluent Python》。本书并不适合初学者使用,而是主要针对中等以上水平的程序员提高编程熟练程度。
总之,技术书籍可以通过对编程语言简单清晰的介绍来提高数据科学家的编程水平,也可以通过对编程语言的深入阐述,提高数据科学家的现有编程技能。
阅读其他开发者的代码
最近,我尝试实现深度学习卷积神经网络Inception Network。
尽管我已经有利用Python和TensorFlow库实现的方法,但我对其他机器学习从业人员如何实现很是好奇。
我探索性的浏览了几个GitHub库,研究了其他开发人员的代码,毋庸置疑,我学会了改进已有方案的方法,并且更好的应用了我现有的编程技能。
有大量的公共GitHub库可供研究和学习。你不需要在Google或Facebook之类的技术公司工作就可以向他们的开发人员学习。只需浏览其工程师开发的项目的公共库。对于数据科学家来说,这可能意味着探索诸如最近发布的Detectron2或其他开源机器学习工具之类的代码库。
在工作场所的内部开发团队中进行代码审查也是一种合适的学习方法。通过了解其他开发人员实现方法背后的理由和思路,你可以间接扩展自己的视野和编程知识。
学习不同的编程语言
致力于编程语言多样性是提高编程水平的不二之法。程序员用代码来解决问题,多种编程语言的知识扩展了可用于解决问题的工具。
掌握Python可能会帮助您学习数据科学核心的实际应用。但在专业和实践环境中,软件开发包含不同的平台,每个平台都有用于访问和实现功能的特定语言。
专业的机器学习从业人员可能会在以下所示的方法中应用不同的编程语言:
JavaScript从互联网上抓取数据
SQL修改和查询数据库
Python实现算法和机器学习模型
Swift / Kotlin / Java开发具有集成机器学习模型的移动设备应用程序
其他工具和方法
一旦您精通某种编程语言,掌握一种新的编程语言会容易很多。如果您了解常规的软件开发范例,例如面向对象的编程、功能编程等,你将更加容易进入状态。软件开发范例知识适用于各种编程语言。
遵守软件开发原则
拥抱简单,避免重复并提高可读性。
这些是我多年编程后积累的经验。它们听起来很简单,但是大多数开发人员都没有遵守,我自己有时也会忘记这些原则。
因此,在软件工程业内,一些准则被反复提倡和强制实施,以确保开发人员进行简洁有效的软件开发。一些列出其中的一部分。
KISS原则
去繁就简(Keep It Simple Stupid,KISS)在开发软件时强调了简洁这个概念。解决问题的方法不必太复杂,在软件开发的设计和实现阶段采用简洁原则可以确保代码容易理解和便于维护。
是的,技术人员往往喜欢炫技,但为了便于阅读,请保持简单——美剧you are not MR.Robot
SOLID原则
Solid原则包含一组旨在确保面向对象的开发人员构建可复用、可扩展、可维护和高效的程序的原则。要了解有关SOLID中涵盖的原理的使用和实践的更多信息,请查看Katerina Trajchevska视频中的内容。
相关链接:
https://www.youtube.com/watch?v=rtmFCcjEgEw&ab_channel=LaraconEU
单一责任原则(Single responsibility principle)
开闭原则(Open-Closed principle)
里氏替换原则(Liskov Substitution principle)
接口分离原理(Interface segregation principle)
依赖倒置原则(Dependency inversion principle)
DRY原则
不要重复自己(Don’t Repeat Yourself)。在编写程序时,编写执行已有功能的代码会浪费你的开发时间。避免重复的一个好习惯是利用项目文件夹中的实用程序文件。实用程序文件包含在源代码中经常执行的常见任务。
特别提及
个人项目
开展个人项目可以将数位机器学习从业者带入新的领域、库、平台、框架和编程语言。
开展个人项目来提高你的编程技能的主要优势在于开发软件产品时会遇到各种问题。编程解决的每个问题都会增加你的整体技术水平。
分享经验
教他人如何应用你擅长的语言编写程序是一种行之有效的方法,可以提高编程技能并展示你的专业知识。
你可以通过YouTube视频、在线课程或我最喜欢的媒体博文等多种方式分享经验。
结论
提升编程技能是一次没有终点的旅程。您总是可以在编程方面学习或改进。
尝试着享受学习过程。
有时情况确实很棘手,StackOverflow可能无法解决所有问题,但请记住磨练你的技巧所花费的每一分努力都是最终融会贯通所必需的。
相关报道:
https://towardsdatascience.com/how-to-improve-programming-skills-for-data-scientists-and-machine-learning-practitioners-d865d8aadab1
近期开课信息