在《第一步-编程语言篇》中,小夕为大家较为详细的介绍了做机器学习(及其相关应用方向)的编程语言的选择问题,这一篇便是小夕为大家推荐的各个编程语言的开发环境/工具。

习惯性扫盲开篇。鉴于可能有部分同学的软件开发经验稍有欠缺,因此首先讲讲基本概念。

代码编辑器:

代码编辑器就是写代码的地方啦,其实任何文本编辑器都可以作为代码编辑器,毕竟源代码是写成纯文本的形式的。

但是效果往往就是像上图一样简陋而低效。由于写代码涉及到代码自动补全、语法关键字高亮、智能缩进等高效排版和代码检查的需求,因此像windows下自带的文本文档这种编辑器是不适合直接拿来用的。

除了上面这类众所周知的图形化模式下的系统自带的文本编辑器,还有命令行模式下的编辑器,比如众所周知的vim编辑器。

对于资深程序员/喵来说,vim完全可以被DIY成写代码神器,但是对于初学者,小夕强烈不建议基于这类编辑器去DIY,很费时费力,而且除了可以装X以外,对机器学习算法和工程的研发几乎没有实质性的帮助。而且实践证明,哪怕DIY的一身神装,还是不如下面小夕会推荐的代码编辑器强大。

一般意义上的代码编辑器的话,大家也应该比较熟悉啦。比如各种IDE中内嵌的,比如上个世纪的产物VC6.0、windows下的VS、mac下的xcode、跨平台的Eclipse、Qt等IDE中内嵌的文本编辑器也是非常强大的,除此之外,Sublime等非IDE内嵌的代码编辑器也是各具特色,在性能上甚至远超过IDE内嵌的编辑器。

编译器:

很多初学者认为,他们在用的VC6.0,VS就是编译器,这就比较尴尬了。其实编译器的功能很直接,就是将上面用纯文本写成的源代码按照它会的编程语言的语法规则编译成可执行文件。

生成的可执行文件可以运行在你的操作系统里,比如windows下的exe文件,也可以运行在某语言的虚拟机里,比如运行在Java虚拟机JRE下的class文件。

比如我们写了这么一段(C语言)源代码。文件名叫hello.c。

然后我们仅仅是调用编译器编译它一下。(在命令行里直接调用C语言的经典编译器——GCC。如下图:

即,调用gcc编译器,编译hello.c,目标文件名叫“hello”。

然后编译完成,我们通过这个命令看一下文件夹下的文件及其权限等信息:

发现文件夹下生成了hello这个文件,顺便看一下文件权限(第一列)。

发现生成的hello的文件权限里有x,而x就代表着可执行。运行一下,就可以看到printf出的信息啦:

就酱,这就是编译器的使命。

调试器:

但是,实际开发过程中,经常有编译错误或者运行时的错误,因此我们需要通过打断点(break point)来暂停程序运行,实时查看运行时代码中变量的值等,来帮助我们调试代码,找到错误。

初学者完成这个过程往往是在vc6.0、VS等IDE中,以为这是IDE的专利。实际上这个也是跟编译器一样,是可以独立运行的一个程序。有兴趣的同学可以在命令行试一下用GDB来调试代码,小夕就不演示啦。

集成开发环境:

集成开发环境(IDE)就是集成了一系列开发工具的环境,比如上面的文本编辑器、xx语言编译器、调试器等,往往还会包含开发环境(environments)管理、项目管理(projects)等功能。诶?那么开发环境和项目管理有什么区别和意义呢?

开发环境:

其实,开发环境就可以看成一个虚拟机!凡是在这个虚拟机里进行研发的项目,都可以自由使用这个虚拟机里的资源。这里的资源就是指各种库/包。诶诶?弄这么一个虚拟机有什么用呢?我从来没有感受过它的存在呀~

所以说呀,在埋头苦推数学公式的时候,不要忘了编程经验的积累哦~想象一下,平常你都是用最新版TensorFlow(比如1.x版本)+最新版python(比如3.x版本)去验证你刚开脑洞想出的算法,然后有一天,你突然发现这个算法别人已经实现过了,挂在了github上。然后呢,你就想直接跑人家写好的代码看计算结果。

但是,不幸的是,他的代码是用旧版TensorFlow实现的,比如0.5.0的版本!python也是旧版的python2!而你电脑上一直用的是1.x的版本tf和3.x版本的python!而旧版跟新版的API风格差别很大,移植会特别费时间!那怎么办呢?把自己电脑上的TensorFlow和python卸掉吗?

当然这时就是开发环境发挥作用的时候啦~我们只需要新建一个开发环境(虚拟机),在这个虚拟机里,下载好旧版tensorflow等,这样既能进入到这个虚拟机里直接跑人家的代码,又可以关掉这个虚拟机,返回到你默认的环境里,去继续用你的最新版python和TensorFlow啦~

项目管理(project):

项目管理,其实就跟操作系统里的文件系统是一样的原理。

我们在做机器学习项目时,往往有不同源的数据集,因此需要一个Dataset文件夹里面放着各种数据集;然后需要由我们项目的核心代码,因此需要一个Source文件夹;然后有时用到一些冷门的第三方库,为了避免与我们的代码混淆,于是将它们放到Library文件夹;然后训练模型的过程中,比如训练一个深度神经网络,那么我们需要隔一段时间保存一下模型的训练结果呀,所以又需要额外的文件夹保存模型的参数日志等~更不用说测试的过程啦。

所以,将上面这些琐碎的目录纳入到一个框架下,那就是project了。至此有没有懂project和environment的区别呢?所以,我们同一个project完全可以放到不同的environment里去运行,只要这个environment有这个project所需要的资源(版本符合要求的库);而一个environment也当然可以用在多个project啦。

脚本语言与解释器:

还有一些现代编程语言,不需要被编译器编译成可执行文件后才能运行,这一类语言被称为脚本语言,比如python、matlab。

不需要编译就能直接运行有什么好处呢?那就是可以用一个称为“解释器”的程序来实时的解释你敲入的每一句话,比如在python解释器中,

单纯的解释器好像看起来并没什么卵用,只能当做玩具写写hello Xi Xiaoyao这种代码。但是在后面的讲解中,小夕将给大家看到它的强大应用——单元测试。

好啦,概念扫盲完成了~下面就开始正文了——工具推荐!

诶诶?快2000字了?那还是敬请期待《机器学习从理论到工程的第二步——开发环境与工具(下)》啦( ̄∇ ̄)

机器学习从理论到工程的第二步-开发环境与工具篇相关推荐

  1. 机器学习从理论到工程的第二步-开发环境与工具篇(下)

    好啦~继续昨天的<第二步--开发环境与工具篇(上)>~ 其实有点尴尬啦,本来想一篇讲完的,结果小夕太啰嗦了,还没有开始讲正文,就写了快2000字了...所以说,这一篇是上一篇的正文... ...

  2. [Java] Web开发环境搭建 - MyEclipse 篇

    Web开发环境搭建 - MyEclipse 篇 在前面,我们讲了使用 Eclipse Java EE 来搭建 Java Web 应用程序开发环境. 现在来说下比较流行的 MyEclipse 又是如何搭 ...

  3. Android SDK+Eclipse+ADT+CDT+NDK 开发环境在windows 7下的搭建

    Android SDK+Eclipse+ADT+CDT+NDK 开发环境在windows 7下的搭建 这几天一直在研究 Android SDK C/C++平台的搭建,尽管以前有成功在Windows X ...

  4. ESP32开发(一):搭建windows开发环境--ESP-IDF工具命令提示符操作

    目录 一.概述 二.开发环境搭建 2.1 获取installer 2.2 运行安装程序 方法一 修改virtualenv版本(未解决) 继续降级到16.7.9 方法二 卸载已安装python(未解决) ...

  5. Android连载之:第二章第三节:利用其他的开发环境和工具开发Android应用程序

    2.3 利用其他的开发环境和工具开发Android应用程序 推荐使用带有Android插件的Eclipse来开发Android应用程序,ADT插件提供了编辑.编译.调试功能并集成进了IDE中.然而,S ...

  6. DSP开发环境及工具之CCS

    DSP开发环境及工具之CCS CCS( Code Composer Studio)是美国德州仪器(TI)公司的嵌入式处理器的开发环境,可以用于TI公司的各个系列处理器的软件开发和调试,如DSP,MCU ...

  7. Golang开发环境搭建-Vim篇

    Golang开发环境搭建-Vim篇 转自:http://tonybai.com/2014/11/07/golang-development-environment-for-vim/ 虽说sublime ...

  8. 开发环境与工具部署服务_开发与部署之间的区别

    开发环境与工具部署服务 多年以来,我是一名Smalltalk程序员,这种经验使我从不同的角度来观察编程世界中的思想. 例如,将源代码存储在文本文件中的想法已经习惯了一些. 作为程序员,我们经常在&qu ...

  9. Vue整合nginx:(1)开发环境npm run dev下,通过nginx解决前后端分离造成的跨域问题

    Vue整合nginx:(1)开发环境npm run dev下,通过nginx解决前后端分离造成的跨域问题 参考文章: (1)Vue整合nginx:(1)开发环境npm run dev下,通过nginx ...

最新文章

  1. MATLAB实战系列(三十三)-技术和医疗的完美结合(续),基于最小二乘法的椭圆拟合
  2. 蓝桥杯-未名湖边的烦恼(java)
  3. Bundle savedInstanceState的作用
  4. 【机器视觉】 set_fuzzy_measure算子
  5. python爬虫入门必备正则_python 爬虫入门之正则表达式 一
  6. java中sql 语句格式转换_Java字符串转Sql语句In格式工具方法
  7. html 导航栏跟着动_“跟着导航来,现在不敢动!”浙江深山男游客吓坏,4岁儿子冻得直跺脚...
  8. 巧用DictionaryTKey,TValue,完成客户需求
  9. codeforces 1041A Heist
  10. 需求分析的文档模板的书写方式
  11. windows服务器设置开机启动的几种方式
  12. 数组除重和运用随机点名的简单运用
  13. OpenGL——顶点属性
  14. png文件格式详解【转】
  15. hihocoder 1251 Today Is a Rainy Day 2015北京区域赛C
  16. C++项目实战-先把项目跑起来看看
  17. 人工智能对生活有哪些方面影响?
  18. tcpdump抓包IP地址,导入wireshark分析?又名《~来抓包吧/ 向着前辈の步伐、Start / ~从零开始の抓包全过程流水账实录/// 成功吧~实验/ ~》
  19. 第二次结对编程——电梯调度算法UI贾伟王伟东
  20. 虾皮广告投放优化策略有哪些?

热门文章

  1. poj 1269 直线相交情况
  2. [翻译] python Tutorial 之一
  3. 02. Creating a Web Forms User Interface
  4. windows 下编译 jrtplib-3.9.1 和 jthread-1.3.1
  5. 给楠哥准备的入门单片机
  6. C语言无符号数运算问题
  7. RuntimeError: Can‘t call numpy() on Variable that requires grad. Use var.detach().numpy()
  8. 数据结构之优先队列:最小索引优先队列,Python代码实现——15
  9. vue @input带参数_Vue 全家桶开发的一些小技巧和注意事项
  10. JS高级——纯函数、柯里化(手写自动柯里化函数)、组合函数(手写自动组合函数)