技术员本事练级计策(转发)

本文转发自左耳朵耗子的博文,地址:http://coolshell.cn/articles/4990.html

谨以此文献给仍庸庸碌碌,却渴望成功的Me!,码农路漫漫,须求有1颗坚定的心

启蒙入门

一、 学习1门脚本语言,举个例子Python/Ruby

能够让你摆脱对底层语言的恐惧感,脚本语言能够让您飞速开采出能用得上的小程序。执行项目:

  • 管理公事文件,只怕csv (关键词 python csv, python open, python sys)
    读多个地点文件,逐行管理(比如 word count,或许管理log)
  • 遍历当和姑件系统 (sys, os,
    path),比方写三个先后计算二个目录下具备文件大小并按种种标准排序并保留结果
  • 跟数据库打交道 (python sqlite),写多个小脚本总结数据Curry条款数量
  • 学会用各样print之类轻便残暴的法子举行调养
  • 学会用Google (phrase, domain, use reader to follow tech blogs)

何以要学脚本语言,因为他俩实际是太方便了,诸多时候大家须求写点小工具或是脚本来帮大家化解难点,你就会发觉正规的编制程序语言太难用了。

二、 用熟1种程序猿的编辑器(不是IDE) 和壹部分骨干工具

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

接纳那几个东西不是为着Cool,而是这个编辑器在查阅、修改代码/配置小说/日志会更加快更有功能。

三、 熟识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轻松多了。(参看笔者4年前CSDN的博文《其实Unix很简单》)学会运用Unix/Linux你会发觉图形分界面在好曾几何时候其实是太难用了,格外地格外地回落工作效能。

四、 学习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代码(设置断点,查看变量,品质,调节台等)
  • 在1台机械上配备Apache 或 Nginx
  • 学习PHP,让后台PHP和前台HTML进行数量交互,对服务器相应浏览器请求造成早先认知。完毕一个表单提交和反显的职能。
  • 把PHP连接本地也许远程数据库 MySQL(MySQL 和 SQL现学现用够了)
  • 跟完2个名校的互连网编制程序课程(举例:http://www.stanford.edu/~ouster/cgi-bin/cs142-fall10/index.php )
    不要认为必要多于一学期时间,硕士是专职一学期选3-伍门课,你业余时间一定能够跟上
  • 上学多少个javascript库(比如jQuery 或 ExtJS)+  Ajax
    (异步读入三个劳务器端图片也许数据库内容)+JSON数据格式。
  • HTTP: The Definitive Guide
    读完前四章你就理解你天天上网用浏览器的时候发生的事情了(proxy,
    gateway, browsers)
  • 做个小网址(举例:1个小的留言板,协助用户登六,Cookie/Session,增、删、改、查,上传图片附属类小部件,分页显示)
  • 买个域名,租个空中,做个温馨的网址。

前言

你是还是不是感到温馨从这个学院毕业的时候只做过小玩具一样的程序?走入职场后固然未有怎么经验也能够把以下那些课外演习走贰次(朋友的埋怨:高校课程总是从理论出发,作业项目都看不出有啥实际职能,比不上从专业中的要求出发)

建议:

  • 不要乱买书,不要乱追新技巧新名词,基础的事物通过很短日子积淀而且还会在现在最少10年通用。
  • 回看一下历史,看看历史上时间线上技艺的提升,你技能通晓明天会是哪些。
  • 早晚要入手,例子不管多么轻巧,提出至少自个儿手敲三次看看是或不是知晓了里头的细节。
  • 一定要学会思索,思虑为啥要这么,而不是那样。还要举一反叁地揣摩。

:你或许会很想获得为啥下边包车型客车东西很偏Unix/Linux,这是因为自个儿觉着Windows下的编程恐怕会在现在很未有前途,原因如下:

 

  • 今昔的用户分界面差不多被五个东西主宰了,一)Web,贰)移动设备iOS或Android。Windows的图形分界面不吃香了。
  • 一发多的店四在用开支低质量高的Linux和各个开源手艺来构架其系统,Windows的资金财产太高了。
  • 微软的事物变得太快了,很不持久,他们全然是在调戏程序员。详细的情况参见《Windows编制程序革命史

就此,小编个人认为今后的来头是前者是Web+移动,后端是Linux+开源。开采这边基本上没Windows什么事。

进阶加深

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

重新学C语言,掌握指针和内部存款和储蓄器模型,用C语言完结一下各样杰出的算法和数据结构。推荐《Computer程序设计艺术》、《算法导论》和《编程珠玑》。

学习(德克萨斯奥斯汀分校无需付费课程)计算机科学和编制程序导论

学习(北卡罗来纳教堂山分校无需付费课程)C语言内部存款和储蓄器管理

上学Unix/Linux系统调用(Unix高端情状编制程序),,了然系统层面的事物。

  • 用这几个系统知识操作一下文件系统,用户(完毕八个得以拷贝目录树的小程序)
  • 用fork/wait/waitpid写贰个多进度的顺序,用pthread写2个八线程带同步或互斥的先后。多进度多进度订票的主次。
  • 用signal/kill/raise/alarm/pause/sigprocmask达成3个多进度间的信号量通讯的顺序。
  • 学会运用gcc和gdb来编制程序和调节和测试程序(参看小编的《用gdb调节和测试程序》)
  • 学会运用makefile来编写翻译程序。(参看小编的《跟自身一齐写makefile》)
  • IPC和Socket的事物能够放置高档中来实行。

学习Windows SDK编程(Windows
程序设计 
MFC程序设计

  • 写三个窗口,驾驭WinMain/WinProcedure,以及Windows的音信机制。
  • 写一些程序来操作Windows
    SDK中的财富文件只怕种种图片控件,以及作图的编制程序。
  • 学学怎么样接纳MSDN查占星关的SDK函数,各样WM_新闻以及部分例程。
  • 那本书中有众多例程,在实行中请不要照抄,试着自身写三个和煦的例程。
  • 永不太多于精晓这几个东西,因为GUI正在被Web代替,首假使摸底一下Windows
    图形分界面包车型地铁编制程序。@virushuo 说:“ 作者觉着GUI确实不那么吃香了,但尽量知情GUI专门的学业原理是很重大的。包蕴运动设备支出,假若未有基础知识仍旧很伤脑筋。只怕说移动道具开销必须领悟GUI工作,也许在win那边学,大概在mac/iOS上学”。

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程序。
  • 建贰个汤姆cat的网址,尝试一下JSP/Servlet/JDBC/MySQL的Web开垦。把前边所说的足够PHP的小品种试着用JSP和Servlet达成一下。

叁、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 +
    静态页面缓存的网址

四、学习关系型数据库

  • 您能够安装MSSQLServer或MySQL来学习数据库。
  • 上学课本里数据库设计的那个范式,一NF,2NF,叁NF,……
  • 上学数据库的存过,触发器,视图,建索引,游标等。
  • 读书SQL语句,理解表连接的种种概念(参看《SQL
     Join的图示
    》)
  • 学习怎么样优化数据库查询(参看《MySQL的优化》)
  • 实施任务:设计两个论坛的数据库,至少满足3NF,使用SQL语句询问本周,前段时期的风靡篇章,商议最多的小说,最活跃用户。

伍、一些开垦工具

  • 学会使用SVN或Git来治本程序版本。
  • 学会使用JUnit来对Java进行单元测试。
  • 读书C语言和Java语言的coding standard 或 coding
    guideline。(笔者N年前写过壹篇关C语言分外轻易的文章——《编程修养》,那样的东西你能够上网查一下,第一次全国代表大会堆)。
  • 引入阅读《代码大全》《重构》《代码整洁之道

 

自家的那几个朋友把这篇小说取名为Build Your
Programming Technical Skills,笔者实在不通晓用汉语怎么翻译,但笔者在写的进度中,本人认为那很像四个打网络游戏做职责晋级的三个历程,所以取名为“本事练级战术”,标题有点大,呵呵,那几个标题纯粹是为了有趣此处仅仅是在享用Mailper和本人个人的学习经验。(注:省去了自己当做3个初学者业已学习过的有的技术(前日明显过时了),如:Delphi/Power
builder,也省去了本人学过的片段本身认为乏味的才具LotusNotes/ActiveX/COM/ADO/ATL/.NET ……)

尖端深远

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

自家个人感到学好C++,Java也正是举手之劳。不过C++的上学曲线极度的陡。可是,作者感觉C++是最急需学好的言语了。参看两篇趣文“C++学习信心图
和“21天学好C++

学习(哈佛无偿课程)C++面向对象编制程序

读我的
何以学好C++”中所推荐的那多少个书至少三回以上(借使您对C++的敞亮能够一语说破到像自身所写的《C++虚函数表解析》或是《C++对象内部存款和储蓄器存局)()》,或是《C/C++重返内部静态成员的骗局》那就至极不错了)

下一场反思为啥C++要干成这么,Java则不是?你一定要学会对比C++和Java的不如。比方,Java中的最先化,垃圾回收,接口,非凡,虚函数,等等。

试行职务:

  • 用C++完毕三个BigInt,协理127人的整形的加减乘除的操作。
  • 用C++封装三个数据结构的体量,举例hash table。
  • 用C++封装并得以达成四个智能指针(一定要选取模板)。

设计方式》必需一读,三回以上,思虑一下,那2贰个方式的应用场景。主如果两点:一)忠爱组合而不是继续,二)疼爱接口而不是贯彻。(也援引《通俗设计方式》)

施行职务:

  • 应用工厂方式落成一个内部存款和储蓄器池。
  • 运用政策格局制做三个类其能够把公文文件进行左对齐,右对齐和中对齐。
  • 使用命令情势落成二个命令行总括器,并援救undo和redo。
  • 运用修饰形式落成三个饭店的屋子价格订价战术——旺季,服务,VIP、旅团、等影响价格的成分。

读书STL的用法和其安顿概念  –
容器,算法,迭代器,函数子。借使也许,请读一下其源码。

推行任务:尝试使用面向对象、STL,设计情势、和WindowsSDK图形编制程序的各个才干

  • 做贰个贪吃蛇或是俄罗斯方块的游乐。协助差异的品级和难度。
  • 做3个文本浏览器,能够浏览目录下的文件,并得以对两样的文书有不一致的操作,文本文件能够张开编辑,实行文书则推行之,mp叁或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的技能也是烂多,重视学习J二EE架构以及JMS, 悍马H2MI,
等新闻传递和长距离调用的本事。

学习运用Java做Web Service(合法教程在那边

进行职分: 尝试在Spring或Hibernate框架下创设2个有网络的Web
Service的远程调用程序,并得以在五个Service中经过JMS传递音讯。

C++和Java都不是能在长时间内能学好的,C++玩是的深,Java玩的是广,小编提议两者选1个。小编个人的求学经历是:

  • 研究C++(作者深究C/C++了10来年了)
  • 读书Java的各个设计形式。

二、坚实系统摸底

根本阅读下边包车型客车几本书:

Unix编制程序艺术》领会Unix系统领域中的设计和开销军事学、观念文化体系、原则与经历。你势必会有1种发聋振聩的感到。

Unix网络编制程序卷一,套接字》那是壹本看完你就知道互连网编制程序的书。主要注意TCP、UDP,以及多路复用的系统调用select/poll/epoll的出入。

TCP/IP详解 卷1:协议》-
那是一本看完后你就足以当互联网黑客的书。通晓以太网的的运维规律,明白TCP/IP的商业事务,运作规律以及哪些TCP的调优。

施行职分:

  • 知情什么是阻塞(同步IO),非阻塞(异步IO),多路复用(select, poll,
    epoll)的IO技能。
  • 写二个网络聊天程序,有聊天服务器和多少个聊天客户端(服务端用UDP对某个或富有的的扯淡客户端进Multicast或布罗德cast)。
  • 写3个轻易易行的HTTP服务器。

Unix互联网编制程序卷贰,进度间通讯》时限信号量,管道,共享内部存款和储蓄器,新闻等各类IPC……
那几个才具好像某些老掉牙了,可是依旧值得询问。

实践职务:

  • 最首要实行各个IPC进度序通讯的章程。
  • 品味写3个管道程序,父亲和儿子进度经过管道沟通数据。
  • 品味写一个共享内部存款和储蓄器的主次,三个经过经过共享内部存款和储蓄器沟通三个C的结构体数组。

学习《Windows宗旨编制程序》1书。把CreateProcess,Windows线程、线程调治、线程同步(伊夫nt,
 时限信号量,互斥量)、异步I/O,内部存款和储蓄器管理,DLL,这几大块搞掌握。

推行职分:使用CreateProcess运维3个记事本或IE,并监察和控制该程序的运作。把前边写过的百般轻巧的HTTP服务用线程池落成一下。写1个DLL的钩程序监察和控制钦赐窗口的破产事件,或是记录有些窗口的按钮。

有了八线程、多进度通讯,TCP/IP,套接字,C++和设计形式的主导,你能够研讨一下ACE了。使用ACE重写上述的拉拉扯扯程序和HTTP服务器(带线程池)

实践职责:通过以上的享有知识,尝试

  • 写1个服务端给客户端传大文件,供给把100M的带宽用到4/5以上。(注意,磁盘I/O和互联网I/O大概会很有题目,想一想怎么消除,此外,请留心互联网传输最大单元MTU)
  • 叩问BT下载的办事原理,用多进度的不贰诀要模拟BT下载的法则。

三、系统架构

  • 负载均衡。HASH式的,纯动态式的。(能够到谷歌学术里搜一些关于负载均衡的文章读读)
  • 多层分布式系统 –
    客户端服务结点层、总括结点层、数据cache层,数据层。J2EE是特出的多层构造。
  • CDN系统 –
    就近访问,内容边缘化。
  • P2P式系统,钻探一下BT和电驴的算法。比方:DHT算法
  • 服务器备份,双机备份系统(Live-Standby和Live-Live系统),两台机械怎样通过心跳监测对方?集群主结点备份。
  • 虚拟化技能,使用那么些本事,能够把操作系统当应用程序一下切换或重新配置和布局。
  • 学习Thrift,贰进制的高性能的简报中间件,扶助数据(对象)连串化和7类别型的RPC服务。
  • 学习Hadoop。Hadoop框架中最基本的安插性正是:MapReduce和HDFS。MapReduce的思维是由谷歌的一篇故事集所谈到而被传出的,轻巧的一句话解释MapReduce正是“职务的表达与结果的聚焦”。HDFS是Hadoop布满式文件系统(Hadoop
    Distributed File System)的缩写,为布满式计算存款和储蓄提供了尾部协助。
  • 了解NoSQL数据库(有人说或者是八个对接炒作的才具),可是因为超大规模以及高并发的纯动态型网址日渐成为主流,而SNS类网址在多少存取进度中具备实时性等刚性须要,那使得近日NoSQL数据库慢慢成了芸芸众生所关注的要害,并大有成为代替关系型数据库而形成今后主流数据存款和储蓄形式的矛头。当前NoSQL数据库很多,抢先陆分之三都以开源的,在那之中相比较知名的有:MemcacheDB、Redis、Tokyo
    Cabinet(进级版为Kyoto
    Cabinet)、Flare、MongoDB、CouchDB、Cassandra、Voldemort等。

写了那么多,回看一下,感觉自身一定的有成就感。希望大家不要吓着,我要好那10来年也在频频地球科学习,明日自己也在求学中,人生本来就是一个不息学习和练级的进度。但是,一定有漏的,也有畸形的,还期待我们补充和改正。(小编会依据大家的报告随时更新此文)接待大家经过小编的博客园(@左耳朵耗子)和twitter(@haoel)和笔者沟通。

—– 更新  2011/07/19 —–

1)有意中人古怪为啥小编在那篇小说伊始说了web+移动,却未有在前面提到iOS/Android的前端开辟。因为本人心里有壹种以为,移动器具上的UI最终也会被Javascript取代。大家能够用Samsung或Android看看google+,你就会分晓了。

二)有情侣说自家那里的东西太多了,无法为了求学而学习,小编十分同意。笔者在文章的前头也说了要思想。此外,千万不要感到本人说的这一个事物是有的新的才具,这份计策里95%以上的全是基础。而且都以锤炼的基础才能。正是能够让您一通百通的本事,也是能够让你找到壹份不错职业的本事。

三)有朋友说学那一个东西学完都40了,还比不上思量怎么去挣钱。小编想告知大家,1是自己当年还并未有414岁,2是学无边无际啊,三是本人不感到赚钱有多难,难的是怎么让您值那么多钱?无论是打工依旧创业,是怎么样东西让您自个儿的股票总值,让你公司的价值越来越高昂?别的地方我不敢说,对于互连网或IT公司来说,才干实力相对是在那之中之壹。

肆)有意中人说才能都以工具,不应有如此着迷那句话没错,有时候我们必要愈多的是抬起初来看看本事以外的业务,或然是说咱俩在作技艺的时候不去思虑为啥会有那么些才能,为啥不是其余,难点不在于技能,难题在于大家死读书,读死书,成了技艺的书呆子。

五)
对于NoSQL,方今相当的火,但本人对其有个别保守,所以,笔者只是说驾驭就能够。对于Hadoop,小编觉着其在布满式系统上有巨大的潜能,所以须求上学。 对于关系型数据库,的确是很重要的东西,那点是自己的大体,在最初的文章里补充。

月色博客四月十八日登载了《写给生手技术员的一封信》,翻译自《An
open letter to those who want to start
programming
》,我的情人(他在本站的id是Mailper)告诉自个儿,他梦想在酷壳上来看壹篇更具操作性的稿子。因为他也是珍惜编程和才干的实物,于是,小编让她把他的一些学学Python和Web编程的一些零星总括一下。于是她给我发来了部分他的体验和经历,笔者在把她的体会做了不多的增改,并依附本身的阅历增添了“进阶”一节。那是1篇由菜鸟和自家这一个老家伙依据大家的经验成功的稿子

网站地图xml地图