施陪了全套青春之《魔兽》

 

有人的地方,就来江湖。

程序员技术练级攻略

 

程序员技术练级攻略

翻阅评论408,051 人阅读    

 

转载自: 酷壳

网址:   http://coolshell.cn/articles/4990.html

月光博客6月12日发表了《写于新手程序员的一致查封信》,翻译自《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 ……)

咱曾经以外一个世界里并肩作战,感受着一样客不同的悲喜。十几年过去了,曾经同组团的战友大多数也许已经afk了杀遥远,你还早已忘记了上一样差他的ID亮起是呀时,毕竟流年已一去不返,他们总未克永远的预留在是梦被之伊甸园。总会感概,那些回不错过之上。

前言

汝是否认为好从学校毕业的早晚只是做了些微玩具一样的次?走符合职场后即没有呀经验啊得将以下这些课外练习走相同整整(朋友之抱怨:学校课程总是从理论出发,作业项目都扣留不发出有啊实际作用,不如从工作中的急需出发)

建议:

  • 绝不乱买书,不要胡乱追新技巧新名词,基础的物通过好丰富时积淀而且还见面在未来最少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 Definitive Guide
    读毕前4节而就是亮你每日上网用浏览器的时段发的事务了(proxy,
    gateway, browsers)
  • 开只稍网站(例如:一个微的留言板,支持用户登录,Cookie/Session,增、删、改、查,上污染图片附件,分页显示)
  • 贾只域名,租个空中,做只协调的网站。

无到底上卡拉波神殿和沙塔斯吧,除了刀锋山,其他的地方都来德莱尼的据点或原遗留下来的废墟。而兽人原住种族,
貌似除了纳格兰及刀锋山几乎任何地方还不显现出她们生居住过还是现住的建造(补充个地狱火的玛格汉台地),记得官方发说罢德莱尼仅仅只是生活于德拉诺的一个角落,现在总的来说怎么发稍反过来了,感觉还稍地方包围中央了。德拉诺
(Draenor),兽人原来住的地方,但出于种种原因已经不合乎继续居,兽人起不停搬迁逃离这里。

进阶加深

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
    程序设计 ,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程序。
  • 修建一个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、学习涉及项目数据库

  • 君可装MSSQLServer或MySQL来上数据库。
  • 上学读本里数据库设计之那几单范式,1NF,2NF,3NF,……
  • 习数据库的存过,触发器,视图,建索引,游标等。
  • 攻SQL语句,明白表连接的各种概念(参看《SQL
     Join的图示》)
  • 学习如何优化数据库查询(参看《MySQL的优化》)
  • 推行任务:设计一个论坛的数据库,至少满足3NF,使用SQL语句询问本周,本月底新型篇章,评论顶多之文章,最活跃用户。

5、一些开发工具

  • 学会用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)和自身交流。

—– 更新  2011/07/19 —–

1)有意中人奇怪为什么自己当这篇稿子开始说了web+移动,却从不于末端提到iOS/Android的前端开发。因为我心坎有同一种感觉,移动设备及之UI最终也会见给Javascript取代。大家可就此iPhone或Android看看google+,你就是见面掌握了。

2)有意中人说我这里的物最好多矣,不可知为上而读书,我可怜同意。我当文章的眼前为说了一旦想想。另外,千万不要以为我说的这些事物是一些初的艺,这卖攻略里95%上述之通通是基础。而且还是砥砺的底蕴技术。即是好被您平通百通的艺,也是可以让您找到同样卖对工作的技巧。

3)有意中人说学这些东西学了还40了,还不设想怎么去挣钱。我想报大家,一是自己今年还不曾40年度,二凡学无止境啊,三是自个儿未看赚钱有差不多麻烦,难的凡怎么被您值那么多钱?无论是打工或创业,是呀事物让你自己之价值,让你公司的值再贵?别的地方我不敢说,对于互联网或IT公司吧,技术实力绝对是内部某。

4)有意中人说技术还是工具,不应该这样着迷这词话没错,有时候我们得重新多的凡抬起头来看看技术外的工作,或者是说咱以发作技术之时刻不失去思维为什么会出是技术,为什么不是别的,问题未在技术,问题在于我们很读书,读死书,成了技术的书呆子。

5)
对于NoSQL,最近于火,但我对那个有些保守,所以,我只是说了解就得。对于Hadoop,我当那个于分布式系统上发生高大的潜力,所以待上。 对于涉及项目数据库,的确是可怜重点之物,这点是自我之不经意,在原文里上。

(全文了,转载时要注明作者和出处)

实际上我大看好这首文章,不仅仅是坐它们的始末针对我比可,更重要之是起码是独样子。

感谢,陈皓。

有人的地方,就生人间。

某女说,《魔兽》是讲话超人打怪兽的故事呢?

某君竟无言语对。。。。。。

科普一下,《魔兽》的重点剧情讲的是呀?

主线是泰坦创世,其中一个泰坦:萨格拉斯底日趋的蜕化变质,然后起了燃烧军团企图掠夺与损毁一切文明。他在阿古斯世界引诱了污染者阿尔蒙德以及欺诈者基尔加丹,艾瑞达人因此堕落而改为了烧军团的一致各项。但是艾瑞达人的别一样各首脑:先亮维纶得到了一个名为也纳鲁的种族的点化,带领没有堕落之族人逃离了阿古斯
并以艾泽拉斯世界安家。得知维纶的反叛后,基尔加丹愤怒之誓,即使追到宇宙与日之底限也只要铲除维纶。后来烧军团成功入侵艾泽拉斯,但让古卡姆利多大陆的本来著民所负。半神塞纳留斯的老爹
一匹巨大的雄鹿,以及任何神灵统统战死。而萨格萨斯想只要依暗夜精灵们守护的固定的井来至这个世界之计划也宣告破产。

使起主线衍生的任何分支非常之大幅度,毕竟这是一个因此了数十年之年华构建的同等名目繁多之故事。当然,那或一个没充值玩家的一代。这是一个玩网游的极其好之时了。君不见,现在之某部联盟网游,随处可见的买装备升级。

予最好之后生,最惦记的网游。

—致陪伴了我任何青春的《魔兽》

章配图

发表评论

电子邮件地址不会被公开。 必填项已用*标注