NoSQL程序员技术练级攻略

伯乐人才网6月9日发表了《描绘为即将入行的程序员的同等封闭信》,翻译自《An
open letter to those who want to start
programming》,我的恋人(他在本站的id是Mailper)告诉自己,他期望于酷壳上观看同一首更享有可操作性的篇章。因为他呢是欣赏编程和技术的刀兵,于是,我于他将他的组成部分学学Python和Web编程的部分点儿总结一下。于是他深受我发来了有些异的经验和经验,我于将他的体会做了无多的增改,并因本人之更多了“进阶”一节省。随即是相同首由新手和自身这个老家伙根据我们的阅历就的文章

  我之是朋友把立即首文章获得名叫Build Your
Programming Technical Skills,我骨子里不亮堂用汉语怎么翻译,但自身于描绘的历程中,本身觉得就特别像一个打网游开任务升级之一个经过,所以取名叫“技术练级攻略”,题目来接触异常,呵呵,这个题目纯粹是为有趣此间才是于享受Mailper和自身个人的攻经历。(注:省去了我当做一个初师都上过的片段技术(今天明确过时了),如:Delphi/Power
builder,也省了自家套了之一些自身觉得乏味的技术Lotus
Notes/ActiveX/COM/ADO/ATL/.NET ……)

  前言

  你是否认为自己打该校毕业的当儿只是做了小玩意儿一样的程序?走符合职场后即使没有啊更啊得以将以下这些课外练习走相同整整(朋友的抱怨:学校课程总是从理论出发,作业项目还扣留无产生有啊实际作用,不如从工作被的需求出发)

  建议:

  • 毫无乱买书,不要乱追新技巧新名词,基础之东西经过大丰富时积淀而且还见面在未来最少10年通用。
  • 忆一下史,看看历史及时间线上技术的上扬,你才会领略明天会是什么。
  • 一定要下手,例子不管多么简单,建议至少自己亲手敲一全方位看看是不是知情了里头之麻烦事。
  • 必然要是学会思考,思考为什么而这么,而非是那样。还要举一反三地思考。

  :你恐怕会怪想得到为什么下面的东西特别偏Unix/Linux,这是为我当Windows下之编程可能会见以未来充分无前途,原因如下:

  • 现今之用户界面几乎给简单个东西主宰了,1)Web,2)移动装备iOS或Android。Windows的图形界面不吃红了。
  • 逾多的商家在用本低性能大之Linux和各种开源技术来构架其系统,Windows的血本不过强了。
  • 微软的事物变得最好抢了,很不持久,他们全然是以玩弄程序员。详情参见《Windows编程革命史》

  所以,我个人认为今后的矛头是前者是Web+移动,后端是Linux+开源。开发这边基本上没Windows什么事。

  启蒙入门

  1、学习一派别脚本语言,例如Python/Ruby

  可以让你摆脱对根语言的恐惧感,脚本语言可以吃你飞开发出会就此得及的微程序。实践类:

  • 拍卖文件文件,或者csv(关键词 python csv, python open, python
    sys)读一个本地文件,逐行处理(例如word count,或者处理log)
  • 遍历本地文件系统(sys, os,
    path),例如写一个次统计一个目录下有文件大小并据各种规范排序并保存结果
  • 跟数据库打交道(python sqlite),写一个有点本子统计数据库里条目数量
  • 学会用各种print之类简单粗暴的章程进行调剂
  • 学会用Google (phrase, domain, use reader to follow tech blogs)

  为什么要效仿脚本语言,因为他俩实际上是无与伦比好了,很多上我们需要写点小器或脚本来帮我们解决问题,你就是会意识正规的编程语言最难用了。

  2、用成熟一栽程序员的编辑器(不是IDE)和组成部分基本工具

  • Vim / Emacs / Notepad++,学会怎么布置代码补全,外观,外部命令等。
  • Source Insight (或 ctag)

  使用这些东西不是为Cool,而是这些编辑器在查阅、修改代码/配置文章/日志会另行快又有效率。

  3、熟悉Unix/Linux Shell和广阔的命令行

  • 如果你用windows,至少学会用虚拟机里之linux,vmware
    player是免费的,装个Ubuntu吧
  • 一定要丢用少用图形界面。
  • 学会运用man来查帮助
  • 文件系统结构及基本操作
    ls/chmod/chown/rm/find/ln/cat/mount/mkdir/tar/gzip …
  • 学会以有文书操作命令 sed/awk/grep/tail/less/more …
  • 学会使用一些管理命令 ps/top/lsof/netstat/kill/tcpdump/iptables/dd…
  • 询问/etc目录下之各种配置文章,学会查看/var/log下的系统日志,以及/proc下之系运行信息
  • 了解正则表达式,使用正则表达式来查找文件。

  对于程序员来说Unix/Linux比Windows简单多了。(参看我四年前CSDN的博文《其实Unix很简单》)学会以Unix/Linux你晤面发现图形界面在少数时段其实是绝难用了,相当地相当地降低工作效率。

  4、学习Web基础(HTML/CSS/JS)+服务器端技术(LAMP)

  未来必定是Web的社会风气,学习Web基础之特等网站是W3School。

  • 习HTML基本语法
  • 攻CSS如何选中HTML元素并使有的着力样式(关键词:box model)
  • 学会用 Firefox + Firebug 或 Chrome
    查看你以为大炫的网页结构,并动态修改。
  • 上学用Javascript操纵HTML元件。理解DOM和动态网页(http://oreilly.com/catalog/9780596527402)网上发免费的回,足够用了。或参照
    DOM 。
  • 学会用 Firefox + Firebug 或 Chrome 调试 Javascript
    代码(设置断点,查看变量,性能,控制台等)
  • 当同光机械及配备Apache或Nginx
  • 学习PHP,让后台PHP和前台HTML进行数据交互,对服务器相应浏览器请求形成开始识。实现一个表单提交和反显的功力。
  • 拿PHP连接本地或远程数据库 MySQL(MySQL 和 SQL现学现用够了)
  • 和了一个名校的纱编程课程(例如:http://www.stanford.edu/~ouster/cgi-bin/cs142-fall10/index.php )不要认为用多于一学期时间,大学生是全职一学期选3-5门课,你业余时间一定得跟达到
  • 读一个Javascript库(例如jQuery或ExtJS)+ Ajax(异步读入一个劳动器端图片或数据库内容)+
    JSON数据格式。
  • HTTP: The Definite Guide
    读了前4段而便知道您每日上网用浏览器的当儿起的工作了(proxy,
    gateway, browsers)
  • 召开个小网站(例如:一个稍稍的留言板,支持用户登录,Cookie/Session,增、删、改、查,上传图片附件,分页显示)
  • 进个域名,租个空中,做只温馨之网站。

  进阶加深

  1、 C语言和操作系统调用

  • 又学C语言,理解指针和内存模型,用C语言实现转各种经典的算法和数据结构。推荐《计算机程序设计方》、《算法导论》和《编程珠玑》。
  • 学习(麻省理工免费课程)计算机对与编程导论
  • 学习(麻省理工免费课程)C语言内存管理
  • 学Unix/Linux系统调用(Unix高级环境编程),了解系统层面的东西。
    • 故这些系统知识操作一下文件系统,用户(实现一个可拷贝目录树的有些程序)
    • 于是fork/wait/waitpid写一个差不多进程的次,用pthread写一个几近丝程带同步还是互斥的主次。多进程多进程购票之次序。
    • 因而signal/kill/raise/alarm/pause/sigprocmask实现一个大抵进程之中的信号量通信的顺序。
    • 学会用gcc和gdb来编程和调试程序(参看我的《从而gdb调试程序》)
    • 学会运用makefile来编译程序。(参看我的《同我一块儿写makefile》)
    • IPC和Socket的物得以停放高级中来施行。
  • 学习Windows SDK编程(Windows
    程序设计 ,)

    • 写一个窗口,了解WinMain/WinProcedure,以及Windows的消息机制。
    • 描绘一些序来操作Windows
      SDK中的资源文件或者各种图片控件,以及作图的编程。
    • 学习怎么下MSDN查看相关的SDK函数,各种WM_信以及一些例程。
    • 当即仍开被产生多例程,在实践中请不要照抄,试着好写一个温馨的例程。
    • 绝不太多于精通这些事物,因为GUI正在被Web取代,主要是询问一下Windows
      图形界面的编程。

  2、学习Java

  • Java 的修要是圈藏的Core Java 《Java
    核心技术编程》和《Java编程思想》(有零星卷,我特链了第一窝,足够了,因为Java的图形界面了解就得了)
  • 上JDK,学会查阅Java API
    Doc http://download.oracle.com/javase/6/docs/api/
  • 问询一下Java这种虚拟机语言及C和Python语言在编译和实行及之区别。从C、Java、Python思考一下“跨平台”这种技能。
  • 学会使用IDE Eclipse,使用 Eclipse 编译,调试以及支付Java程序。
  • 修建一个Tomcat的网站,尝试一下JSP/Servlet/JDBC/MySQL的Web开发。把前所说之异常PHP的小类试着用JSP和Servlet实现转。

  3、Web的安康与架构

  • 学学HTML5,网上发出许多多课,以前酷壳也介绍了许多,我以此就是不摆了。
  • 念Web开发之平安题材(参考乍浪微博给口诛笔伐的斯从,以及Ruby的立即首文章)
  • 攻HTTP
    Server的rewrite机制,Nginx的反向代理体制,fast-cgi(如:PHP-FPM)
  • 学学Web的静态页面缓存技术。
  • 读书Web的异步工作流处理,数据Cache,数据分区,负载均衡,水平扩展的构架。
  • 履任务:
    • 利用HTML5的canvas 制作有Web动画。
    • 品尝以眼前开发了之酷Web应用中开展SQL注入,JS注入,以及XSS攻击。
    • 管前开发过之慌Web应用改化构造在Nginx + PHP-FPM +
      静态页面缓存的网站。

  4、一些开发工具

  • 学会用SVN或Git来管理程序版本。
  • 学会以JUnit来针对Java进行单元测试。
  • 习C语言和Java语言的 coding standard 或 coding
    guideline。(我N年前写了千篇一律篇关C语言非常简单的文章——《编程修养》,这样的事物而得上网查看一下,一不胜堆)。
  • 推介阅读《代码大全》《重构》《代码整洁的道》

  尖端深入

  1、C++ / Java 和面向对象

  我个人觉得学好C++,Java也就是是举手之劳。但是C++的求学曲线相当的赫然。不过,我道C++是太亟需效法好的语言了。参看两篇趣文“C++学习信心图”和“21天学好C++”

  • 学习(麻省理工免费课程)C++面向对象编程
  • 读我的“安学好C++”中所推荐的那些书至少少周以上(如果你对C++的理解能够一针见血到如本人所描绘的《C++虚函数表解析》或是《C++对象内存存局(上)(下)》,或是《C/C++返回内部静态成员的骗局》那便特别正确了)
  • 然后反思为什么C++要涉及化这么,Java则未是?你得要是学会对比C++和Java的不同。比如,Java中之初始化,垃圾回收,接口,异常,虚函数,等等。
  • 履任务:
    • 为此C++实现一个BigInt,支持128号之整形的加减乘除的操作。
    • 所以C++封装一个数据结构的容量,比如hash table。
    • 因此C++封装并落实一个智能指针(一定要以模板)。
  • 《设计模式》必用一念,两尽以上,思考一下,这23单模式的行使场景。主要是少数触及:1)钟爱组合要不是延续,2)钟爱接口而非是兑现。(也援引《通俗设计模式》)
  • 履行任务:
    • 动工厂模式实现一个内存池。
    • 采取政策模式制做一个近似那可以把文件文件进行不当对同,右对旅和丁针对旅。
    • 采用命令模式实现一个令执行计算器,并支持undo和redo。
    • 运修饰模式实现一个酒吧的屋子价格订价策略——旺季,服务,VIP、旅行团、等影响价格之元素。
  • 习STL的用法及该计划概念 -容器,算法,迭代器,函数子。如果可能,请读一下夫源码。
  • 实行任务:品味采取面向对象、STL,设计模式、和WindowsSDK图形编程的各种技术
    • 召开一个贪吃蛇或是俄罗斯方块的游艺。支持不同之级别及难度。
    • 召开一个文本浏览器,可以浏览目录下的文本,并得以对两样之公文发出不同的操作,文本文件可以打开编辑,执行文书则执行的,mp3还是avi文件可以播放,图片文件可以展示图片。
  • 读书C++的有的类库的筹划,如:
    MFC(看看候捷先生的《浅MFC》),Boost,
    ACE, CPPUnit,STL
    (STL可能会见极其为难了,但是只要你会了解中的设计模式和筹划那就是太好了,如果您能一针见血到自身写的《STL
    string类的描写时拷贝技术》那就算特别对了,ACE需要特别强当的体系知识,参见后面的“加强针对系统的刺探”)
  • Java是真正的面向对象的语言,Java的设计模式多得无克重新多,也是因此来读书面向对象的设计模式的极品语言了(参看Java中的设计模式)。
  • 推介阅读《Effective Java》
    and 《Java解惑》
  • 读Java的框架,Java的框架为是多,如Spring, Hibernate,Struts
    等等,主要是上Java的计划,如IoC等。
  • Java的艺也是烂多,重点上J2EE架构和JMS,
    RMI,等消息传递和长距离调用的技能。
  • 读书用Java举行Web Service
    (官教程在此处)
  • 尽任务: 尝试在Spring或Hibernate框架下构建一个起网络的Web
    Service的远距离调用程序,并可以片个Service中通过JMS传递消息。

  C++和Java都无是会当缺乏日外会学好的,C++玩是的不胜,Java玩的凡大规模,我提议两者选一个。我个人的攻经历是:

  • 追C++(我深究C/C++了十来年了)
  • 习Java的各种设计模式。

  2、加强系统摸底

  重要阅读下面的几按开:

  • 《Unix编程艺术》了解Unix系统领域面临之计划性以及开哲学、思想文化系统、原则和更。你必会生出相同种植醍醐灌顶的痛感。
  • 《Unix网络编程卷1,套接字》这是一律比照看了公虽知网络编程的书。重要注意TCP、UDP,以及多路复用的网调用select/poll/epoll的距离。
  • 《TCP/IP详解卷1:协议》-这是一模一样本看了晚若就足以当网络黑客的书。了解因太网的的运行规律,了解TCP/IP的商议,运作规律与哪TCP的调优。
  • 实施任务:
    • 略知一二啊是死(同步IO),非阻塞(异步IO),多路复用(select,
      poll, epoll)的IO技术。
    • 写一个大网聊天程序,有拉服务器和多独扯客户端(服务端用UDP对有的要享有的底闲话客户端上Multicast或Broadcast)。
    • 描绘一个简的HTTP服务器。
  • 《Unix网络编程卷2,进程之中通信》信号量,管道,共享内存,消息等各种IPC……这些技巧类有点老掉牙了,不过要值得询问。
  • 履行任务:
    • 要害实施各种IPC进程序通信的道。
    • 品写一个管道程序,父子进程经过管道交换数据。
    • 尝试写一个共享内存的顺序,两独过程经过共享内存交换一个C的布局体数组。
  • 学习《Windows核心编程》一挥毫。把CreateProcess,Windows线程、线程调度、线程同步(Event, 信号量,互斥量)、异步I/O,内存管理,DLL,这几乎充分块来通。
  • 实施任务:动用CreateProcess启动一个记事本或IE,并监督该次的运行。把前写过的不胜简单的HTTP服务用线程池实现转。写一个DLL的钩程序监控指定窗口的关事件,或是记录有窗口的按键。
  • 产生了大多线程、多进程通信,TCP/IP,套接字,C++和设计模式的核心,你可以研究一下ACE了。使用ACE重写上述的谈天程序及HTTP服务器(带线程池)
  • 推行任务:经过以上的富有知识,尝试
    • 写一个服务端给客户端传大文件,要求管100M的带宽用到80%以上。(注意,磁盘I/O和网I/O可能会见杀有问题,想同一相思怎么解决,另外,请留意网络传输最充分单元MTU)
    • 刺探BT下载的办事原理,用几近进程的主意模拟BT下载的法则。

  3、系统架构

  • 负载均衡。HASH式的,纯动态式的。(可以交Google学术里查抄一些至于负载均衡的稿子读读)
  • 大多重叠分布式系统–客户端服务结点层、计算结点层、数据cache层,数据层。J2EE是经典的几近重合构造。
  • CDN系统–
    就近访问,内容边缘化。
  • P2P式系统,研究一下BT和电驴的算法。比如:DHT算法。
  • 服务器备份,双机备份系统(Live-Standby和Live-Live系统),两玉机械如何通过心跳监测对方?集群主结点备份。
  • 虚拟化技术,使用这个技术,可以把操作系统当应用程序一下切换或重新配置和安排。
  • 学习Thrift,二进制的赛性能的报导中间件,支持数据(对象)序列化和多种类型的RPC服务。
  • 学习Hadoop。Hadoop框架中极核心之统筹虽是:MapReduce和HDFS。MapReduce的思索是由于Google的一律篇论文所提及要于传到的,简单的等同句子话讲MapReduce就是“任务的解说和结果的汇集”。HDFS是Hadoop分布式文件系统(Hadoop
    Distributed File System)的缩写,为分布式计算存储提供了底层支持。
  • 了解NoSQL数据库(有人说或者是一个接炒作之技能),不过坐超大规模以及高并发的纯动态型网站日渐变成主流,而SNS类网站在数量存取过程中具有实时性等刚性要求,这使得目前NoSQL数据库慢慢成为了众人所关心之刀口,并大有成为取代关系项目数据库而改为未来主流数据存储模式之大方向。当前NoSQL数据库很多,大部分还是开源之,其中较著名的发:MemcacheDB、Redis、Tokyo
    Cabinet(升级版本啊Kyoto
    Cabinet)、Flare、MongoDB、CouchDB、Cassandra、Voldemort等。

  写了那基本上,回顾一下,觉得自己一定的有成就感。希望大家不要吓着,我要好这十来年为当频频地修,今天自我啊在学习中,人生本来就是一个相接上与练级的历程。唯独,一定有漏的,也时有发生畸形的,还盼望大家补充及更正。(我会根据大家之申报随时更新此文)欢迎大家通过自之微博(@左耳朵耗子)和twitter(@haoel)和我交流。

网站地图xml地图