前言

        你是否以为自己从学校毕业的时候只做过小玩具往往的程序?走入职场后哪怕没有什么履历也可以把以下这些课外操练走一遍(朋友的抱怨:学校课程总是从理论出发,作业项目都看不出有什么执行作用,不如从工作中的需求出发)

       建议

       不要乱买书,不要乱追新技术新名词,基础的东西经过很长时间储存而且还会正正在未来最少10年通用。

       追忆一下汗青,看看汗青上时间线上技术的发展,你能力明白明天会是什么样。

       一定要由来,例子不管众么简单,建议最少自己手敲一遍看看是否理解了里头的细枝末节。

        一定要学会思考,思考为什么要这样,而不是那样。还要举一反三地思考。

       :你也许会很奥秘为什么下面的东西很偏Unix/Linux,这是由于我以为Windows下的编程可能会正正在未来很没有前途,途理如下:

       现正正在的用户界面几乎被两个东西主宰了,1)Web,2)移动竖立iOS或Android。Windows的图形界面不吃香了。

       越来越众的企业正正在用本钱低功能高的Linux和种种开源技术来构架其编制,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)

        为什么要学剧本言语,由于他们实正正在是太便当了,很众时候银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站需要写点小东西或是剧本来帮银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站解决问题,你就会发现正规的编程言语太难用了。

       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简单众了。学会运用Unix/Linux你会发现图形界面正正在某些时候实正正在是太难用了,相当地相当地降低工作效率。

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

        未来必定是Web的天下,学习WEB基础的最佳网站是W3School。

       学习HTML根蒂语法

        学习CSS怎样选中HTML元素并运用一些根蒂样式(关键词:box model)

       学会用  Firefox + Firebug 或 chrome 查看你以为很炫的网页构制,并动态修改。

       学习运用Javascript驾御HTML元件。理解DOM和动态网页() 网上有免费的章节,足够用了。或参看 DOM 。

       学会用  Firefox + Firebug 或 chrome 调试Javascript代码(设置断点,查看变量,功能,控制台等)

        正正在一台机器上装备Apache 或 Nginx

        学习PHP,让后台PHP和前台HTML进行数据交互,对效劳器相应浏览器请求形成出处认识。实现一个表单提交和反显的功能。

        把PHP结合当地或者长途数据库 MySQL(MySQL 和 SQL现学现用够了)

        跟完一个名校的网络编程课程(例如: ) 不要以为需要众于一学期时间,大学生是全职一学期选3-5门课,你业余时间一定可以跟上

        学习一个javascript库(例如jQuery 或 ExtJS)+  Ajax (异步读入一个效劳器端图片或者数据库实质)+JSON数据格式。

       HTTP: The Definitive Guide 读完前4章你就明白你每天上网用浏览器的时候发生的事情了(proxy, gateway, browsers)

       做个小网站(例如:一个小的留言板,支持用户银河文娱有哪些网站_云顶文娱场7610_bet9九州 网站,Cookie/Session,增、删、改、查,上传图片附件,分页显现)

       买个域名,租个空间,做个自己的网站。

       进阶加深

       1、 C言语和操作编制调用

        浸新学C言语,理解指针和内存模型,用C言语实现一下种种经典的算法和数据构制。引荐、和。

       学习(麻省理工免费课程)打算机科学和编程导论

        学习(麻省理工免费课程)C言语内存牵制

        学习Unix/Linux编制调用(Unix高级情况编程),,了解编制层面的东西。

       用这些编制知识操作一下文件编制,用户(实现一个可以拷贝目录树的小程序)

       用fork/wait/waitpid写一个众历程的程序,用pthread写一个众线程带同步或互斥的程序。众历程众历程购票的程序。

       用signal/kill/raise/alarm/pause/sigprocmask实现一个众历程间的信号量通讯的程序。

       学会运用gcc和gdb来编程和调试程序。

       学会运用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 核心技术编程》和。

        学习JDK,学会查阅Java API Doc

       了解一下Java这种虚拟机言语和C和Python言语正正在编译和执行上的折柳。从C、Java、Python思考一下“跨平台”这种技术。

        学会运用IDE Eclipse,运用Eclipse 编译,调试和开发Java程序。

        建一个Tomcat的网站,执行一下JSP/Servlet/JDBC/MySQL的Web开发。把前面所说的那个PHP的小项目试着用JSP和Servlet实现一下。

       3、Web的幽静与架构

       学习HTML5,网上有很众很众教程,正正在这里就不分列了。

        学习Web开发的幽静问题。

       学习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语句,明白表结合的种种意睹。

       学习怎样优化数据库查询。

        执行任务:陈设一个论坛的数据库,最少满足3NF,运用SQL语句查询本周,本月的最新文章,评论最众的文章,最活跃用户。

       5、一些开发东西

        学会运用SVN或Git来牵制程序版本。

       学会运用JUnit来对Java进行单位测试。

       学习C言语和Java言语的coding standard 或 coding guideline。

       引荐阅读

       高级深化

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

        我个人以为学好C++,Java也就是举手之劳。但是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可能会太难了,但是如果你能了解其中的陈设模式和陈设那就太好了)

        Java是真正的面向对象的言语,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编制范围中的陈设和开发哲学、思想文化姿态、原则与履历。你一定会有一种醍醐灌顶的以为。

       这是一本看完你就明白网络编程的书。浸要帮理TCP、UDP,以及众路复用的编制调用select/poll/epoll的折柳。

       - 这是一本看完后你就可以当网络黑客的书。了解以太网的的运作途理,了解TCP/IP的协议,运作途理以及怎样TCP的调优。

       执行任务

        理解什么是抨击(同步IO),非抨击(异步IO),众路复用(select, poll, epoll)的IO技术。

       写一个网络聊天程序,有聊天效劳器和众个聊天客户端(效劳端用UDP对限制或所有的的聊天客户端进Multicast或Broadcast)。

       写一个简易的HTTP效劳器。

        信号量,管途,共享内存,消歇等种种IPC…… 这些技术好像有点老掉牙了,不过还是值得了解。

       执行任务

       浸要执行种种IPC历程序通讯的方法。

       执行写一个管途程序,父子历程通过管途交换数据。

       执行写一个共享内存的程序,两个历程通过共享内存交换一个C的构制体数组。

       学习一书。把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等。

        写了那么众,追忆一下,以为自己相当的有成就感。希望大家不要吓着,我自己这十来年也正正在不断地学习,今天我也正正在学习中,人生本来就是一个不断学习和练级的历程。不过,一定有漏的,也有错误的,还希望大家补充和更正。

转自:酷壳

除非特别注明,鸡啄米文章均为原创
转载请标明本文地址:http://www.sygjbus.cn/software/409.html
2015年6月25日
作家:鸡啄米 分类:软件开发 浏览: 评论:8