老曹眼中的开发学习环境

“工其事必先利其器”,对于一个全栈而言,一个与自己匹配的开发和学习环境,能够极大地提高个人的工作效率,很多时候都可以做到事半而功倍。环境也是一个外延很广的概念,这里我所涉及的包括硬件环境,集成开发环境与工具,数据库环境,操作系统环境,沟通工具和个人笔记本。

硬件环境

MacBook Pro 是硬件环境的不二之选。

笔记本电脑,至少要有i5 CPU、8G以上内存,SSD之类的,硬盘也最好在256G以上,在这样的要求下,MacBook无疑是很好的选择,和MacBook达到相同配置、具有相同续航水平的其它笔记本电脑基本都在和MacBook一样的价位。但考虑到MacBook的工业设计水平,MacBook确实成了合适的选择。

做iOS开发,那mac更是必须的。尽管xcode没有vs好用,但是搞iOS开发,默认就得用它,不要谈什么黑苹果,那是得不偿失的事。

更重要的是,Mac OS是类Unix操作系统,并且POSIX compliant,这意味着大量针对Linux编写的程序可以在OS X直接编译。也就是说,Mac下写C、C++的系统程序一般情况下也可以直接移植到Linux下运行。在类Unix操作系统里,只有gcc和clang可以选择,Linux选择的是gcc,OS X和FreeBSD选择的是clang。gcc的好处是在Linux下有最好的兼容性,系统内核、系统的library都是gcc编译的。clang相比gcc的优势大概就是编译速度,和对标准支持的速度。clang的编译速度是比gcc要快一些的,而且通常给出的错误信息更友好一些。在标准的支持方面,gcc 4.9才完全支持C++11标准(regex的bug到4.9才修正),而clang 3.3就已经完全支持C++11标准,clang 3.4已经完全支持C++14标准。gcc相比于clang也有一个优势,在有些情况下gcc的优化器比clang更好。

除了Unix哲学,如果看youtube上的各类技术分享,常见到的也是mac,记得前几年Hacker News上有个问卷,黑客们都用的什么操作系统,mac OS X 是排第一位的,甚至超越了linux 操作系统为用户提供编程环境。

总之,Mac比Linux更舒服的界面,比Windows更简洁的环境。

工具与IDE

Mac 上自带了很多工具,使开发和学习更加便捷。比如自带Git,可以直接从Terminal启动Git服务。最好会使用命令行操作,如果实在不习惯的话,SourceTree 应该是目前比较好用的Git图形化界面了。Mac 自带了Vi和Emacs,自带Apache服务器,配置wordpress做自己的博客是分分钟的事情。Mac 还自带了对Python、PHP等语言的支持,macport和homebrew 对应用的安装下载也很方便。

XCode

Xcode 是运行在操作系统Mac OS X上的集成开发工具(IDE),由苹果公司开发。Xcode是开发OS X 和 iOS 应用程序的最快捷的方式。Xcode 具有统一的用户界面设计,编码、测试、调试都在一个简单的窗口内完成。

Xcode 8能够方便创建漂亮的iPhone、iPad、Mac、Apple Watch和Apple TV 应用程序,是更快的一个IDE版本,使用编辑器扩展可以完全定制化自我的编码经验。新的运行时可以提醒隐藏的bug并部分指出内存泄漏,这都是蛮不错的。

Eclipse

Eclipse 是一个开源的基于Java的可扩展开发平台,本身只是一个框架和一组服务,用于通过插件组件构建开发环境。Eclipse 附带了一个标准的插件集,包括Java开发工具等。

Eclipse 是个通用的集成开发环境,是应用开发的必备免费工具。不仅是java,通过插件形式可以行程各种开发语言的IDE,例如PyDev 用于Python开发的,ADT 支持Android 开发,遗憾的是,近来google停止了对ADT的支持。

Android Studio

Android Studio 是一个Android集成开发工具,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工具用于开发和调试。

Android Studio基于Gradle的构建方式与ADT有着较大的不同,编译和运行的速度都有了明显的改善,是android 领域的XCode。

sublime Text

对于脚本话语言来说,尤其是Javascript,sublime 作为轻量级IDE还是不错的。Sublime Text 支持多种编程语言的语法高亮、拥有优秀的代码自动完成功能,还拥有代码片段的功能,可以将常用的代码片段保存起来,在需要时随时调用。

Sublime 支持 VIM 模式,可以使用Vim模式下的多数命令。支持宏,播放录制的操作或者命令。

数据库

数据库是全栈必须掌握的技能,数据库的种类很多,除了关系型数据库之外,还有各种的NoSQL, 拥有一个本地的数据库环境,可以更方便地开发调试。

MySQL

MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。 MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。

MySQL也有mac客户端—Sequel Pro ,可以轻松的进行MySQL的各种操作,关键还是免费的,有意思的是,可以通过一层SSH隧道进行MySQL的连接。

Redis

Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。

在Mac环境中,使用 sudo brew install redis 命令可以一键安装Redis。

MongoDB

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写,可以为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB 是NoSQL当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

在Mac环境中,使用 sudo brew install mongodb命令可以一键安装mongodb。

另外,Mac自带了SQLite数据库,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了,在iOS和Android 开发时是必备的选项。

多环境与多系统

对于多环境和多操作系统而言,不建议多分区的方式,用虚拟机比较好。VirtualBox号称是最强的免费虚拟机软件,它不仅具有丰富的特色,而且性能也很优异!它简单易用,可虚拟的系统包括Windows系列、Mac OS X、Linux、OpenBSD、Solaris、IBM OS2甚至Android等操作系统。

可以方便地在VirtualBox上安装并且运行上述的这些操作系统,与同性质的VMware相比,VirtualBox独到之处包括远端桌面协定(RDP)、iSCSI及USB的支持,VirtualBox在客户端操作系统上已可以支持USB 2.0的硬件装置了。

沟通与网络

沟通与协作是必须的,微信和QQ成了首选的工具,Mac上都有对应的客户端。

对于团队沟通而言,Trello 是个不错的云服务,国内的worktile 也很赞,其它的工具就因人而异了。近年来比较火爆的slack,最看好的是它web hook 特性,是工具化中的一种趋势。

对于上网查看资料而言,chrome 和mac 自带的safari 都很好。对开发者而言,更喜欢google,如果自己不购买VPN的话,lantern 就是一个无奈的选择了。

email 更是必备,有了VPN, gmail就可以作为一个邮件服务的候选。

国内的邮件服务商,163邮箱非常不错,当然QQ邮箱也是勉强可用的。

随手笔记

“好记性不如烂笔头”,不论是网络上的知识,还是自己的感悟都最好纪录下来,Evernote 是我的最爱。

EverNote界面类似于微软的OneNote,以超强的内容捕捉,实时搜索,标签分类,支持大数据库,图像内文字的识别和手写图形的识别而著称。EverNote支持多终端同步,可以随时随地访问自己的笔记,使在地铁上梳理心得变成了一段快乐的时光。

纪录的内容多了,就需要使用云盘,百度云盘不错。但是如果服务商关了服务,导出的成本还是蛮高的,360云盘的关闭估计倒霉了一批人。保险起见,还是要有自己的大型移动硬盘作为备份工具。

通过随手笔记和云盘等存储,逐步整理的所学所用,就可以初步形成自己的知识体系,完成个人的知识管理了。开发学习环境中还包括很多的工具集, 以后再逐一补充吧。

5