第一篇:致误入歧途的码农同学,各类程序员学习路线图
致误入歧途的码农同学,各类程序员学习路线图
程序猿这个群体在互联网上被各种调侃,其中一部分是自黑,但是一大部分是被黑。作为码农的一员,看着身边一批又一批人进入这个行业,也看着一些人离开这个行业,深感人生苦短,码海无涯何处是岸。程序猿这一种非常特殊的、可以从事程序开发、维护的动物。一般分为程序设计猿和程序编码猿,但两者的界限并不非常清楚,都可以进行开发、维护工作。
互联网发展这么多年,互联网技术日新月异,每个从事程序技术开发刚开始或多或少会遇到技术的路线选择问题。小编对这些资料做了一个大概的整理。后面如果活着,会继续完善。前端工程师基础:HTML教程,CSS教程进阶:Javascript,jQuery高级:AJAX 教程,JSON 教程,XML 教程框架扩展学习:Bootstrap 教程,jQuery UI 教程,jQuery EasyUI 教程,jQuery Mobile 教程调试工具:Firebug 教程,chrome开发工具:PhpStorm,HBuilder,Dreamweaver,Notepad++,PhotoshopPHP 工程师基础:HTML教程,PHP 教程进阶:SQL 教程,MySQL 教程,linux服务器架构高级:正则表达式教程,Mongodb教程,AJAX 教程,JSON 教程,XML 教程,开发工具:Notepad++,phpMyAdmin,EasyEclipse for PHPPython 工程师基础:Python 教程,Python各种包和框架教程进阶:SQL 教程,MySQL 教程高级:正则表达式教程,Mongodb教程,AJAX 教程,JSON 教程,XML 教程,开发工具:PyDev for Eclipse,pycharm.NET 工程师基础:C# 教程,ASP.NET 教程进阶:SQL 教程高级:正则表达式教程,Mongodb教程,AJAX 教程,JSON 教程,XML 教程,开发工具:visual studio 2010JAVA 工程师基础:Java 教程,JSP 教程进阶:SQL 教程,MySQL 教程高级:正则表达式教程,Mongodb教程,AJAX 教程,JSON 教程,XML 教程,开发工具:EclipseASP 工程师ASP 现在应该比较少用,建议学习路线为:HTML教程,ASP 教程,SQL 教程不说了,小编要通宵写代码去了。
第二篇:Java 程序员学习路线图
第一阶段:Java核心部分
JavaSE
Java核心语法、Java核心API、面向对象程序设计、Java容器类(集合)、GUI 用户界面编程、I/O体系结构、多线程并发模型、网络编程、数据结构.掌握Java核心语法与面向对象思想,能熟练运用常用设计模式与编程技巧完成桌面应用或网络通信类程序的开发.140
Java5.0新特性
Autoboxing/unboxing(自动装包/拆包)、Enums(枚举)、Varargs(可变参数)、Static Implements(静态导入)、for each(增强)循环、Generic(泛型)程序设计、Annotation(注释)无侵入式程序设计等
掌握全新java设计思想, 把握未来java技术发展趋势.16
Java高级技术
Java反射(Reflect)与动态代理(Dynamic Proxy)
深入研究Java语言高级技术,设计更加灵活、扩展性更强的动态程序.Java开发IDE
各种Java常用开发工具(如:Eclipse、NetBean等)的使用
掌握Java开发IDE的使用与代码调试技巧
软件测试
黑盒、白盒测试.Java测试框架Junit.理解测试的重要性.学习使用Juni进行单元测试、参数化测试、测试套件的开发和测试运行器的使用...............第二阶段: 数据库编程
Oracle/SQL语言
以Oracle为平台,介绍Oracle数据库的安装、Oracle体系结构、物理组件、权限分配、数据管理、分析各种关系数据库设计的常见问题,深入讲解数据库设计范式.全面讲解各类SQL语句的使用和优化策略.深入学习Oracle数据库对象:index(索引)、view(视图)、sequence(序列)、tirgger(触发器)、comment(注释).理解Oracle数据库体系结构,掌握Oracle数据库基本操作,数据库设计,开发和管理知识,熟练掌握SQL和Oracle对象使用.PL/SQL
PL/SQL语法,作用.使用游标、存储过程、函数、触发器解决数据库性能问题.掌握PL/SQL的使用,能够使用存储过程开发高效的数据处理系统,解决数据库性能瓶颈并
实现数据优化.MySql
以MySql为平台,介绍MySql数据库的安装、权限分配、数据管理.数据库使用.掌握MySql数据库的使用.JDBC
使用Java操作数据库,包括:数据库连接、结果集处理、存储过程调用、元数据、大数据类型处理、事务管理,批更新,可滚动、可更新的结果集,SQL3.0新特性,连接池技术,数据库应用架构.熟练掌握Java数据库编程技巧,能使用高级API、DAO编程模式编写高性能的数据持久层应用....................第三阶段: Web应用
XML
XML的概念与作用、基本语法、验证、XML模式定义(DTD、Schema)、XML解析(SAX、DOM)、Jdom和Dom4j、xpath、XSL.掌握XML使用及XML文档的处理技术.使用XML进行信息配置、数据存储以及数据交换.Html
介绍Web原理.Web页面开发的基本过程,超文本标记语言(HTML)基本标签的使用,CSS 层叠式样式表
掌握HTML基本标签的使用,能利用CSS优化页面设计的方法
JavaScript
JavaScript 脚本语言基本语法,常用函数,JavaScript高级DOM编程及页面组件控制掌握基于对象的JavaScript程序设计,能通过W3C DOM模型完成动态页面脚本开发
Web容器之Tomcat
Tomcat的下载、安装、启动分析、体系结构、基本配置、应用程序部署、管理和性能调优.掌握使用Tomcat的使用.Java Web编程Servlets
HTTP协议详解,Servlet核心对象操作,Servlet生命周期,Session与Cookie的应用场景,过滤器与监听器.分层结构.全面掌握Servlet 2.5 API的使用,能够独立分析设计基于N层体系结构的Web 应用,熟练使用各种Java EE应用服务器
Java Web编程JSP
JSP介绍、创建、部署JSP程序,JSP的三个指令、六个动作和九个内置对象.JSP中异常处理,自定义标签,EL和JSTL
掌握JSP2.0规范技术,掌握JSP进行动态页面开发的专业技术,能结合Servlet完成B/S应用的设计与开发工作
...............第四阶段: 流行框架技术
J2EE容器之JBoss
JBoss的下载、安装、启动分析、体系结构、基本配置、应用程序部署、管理和性能调优.掌握使用JBoss的使用.Struts
MVC设计思想,Strust1的体系架构、控制器组件、视图组件、框架的扩展、国际化、验证框架、常用标签库等.理解MVC模式,掌握基于struts1的java EE解决方案
学习Struts1和WebWork结合而成的Struts2.包括:Struts2的无侵入设计,控制器组件、视图组件、动态方法调用、包、拦截器、annotaction的支持、国际化、验证框架、常用标签等.深入学习Struts2,完成从Struts1到Struts2的Java Web应用的升级.Hibernate
学习领域建模思想与O/R Mapping,各种对象关系映射、实体状态、继承关系、组件映射、查询缓存与二级缓存配置、事务锁机制与性能调优.能以领域建模思想完成持久化层的设计,使用Hibernate完成持久化层的开发工作.40
AJAX
全面讲解AJAX应用的设计与开发方式,内容包括: XMLHttpRequest对象操作、W3C DOM模型操作、jQuery与DWR快速开发Ajax.能通过AJAX开源框架实现Web 2.0应用中的异步通讯.掌握DWR的开发原理,并熟练使用DWR简化Ajax的开发
SVN/CVS及编程规范
掌握SVN/CVS的配置和使用;软件编程规范
SVN/CVS的配置和使用;软件编程规范
Spring
学习最新Spring2.0技术.包括:IOC、AOP,使用Spring的ORM支持完成DAO层的开发,事务层管理,Springde MVC框架,使用Spring与EJB3、Struts1(Struts2)、Hibernate等流行框架进行整合.通过Spring完成多层架构应用的设计与开发工作,掌握面向接口编程的重要性.通过Spring去简化企业开发.第五阶段: JavaEE企业应用
Linux
学习Linux的安装和基本操作,通过SSH2访问Linux,在Linux安装JDK,安装Web服务器、安装数据库服务器,安装和部署Java应用程序。
掌握Linux的基本操作,掌握在Linux发表基于Java的Web应用程序。
OOAD
学习面向对象的分析和设计
掌握面向对象的分析和设计。
Java设计模式
学习Java经典设计模式。包括单例模式、命令模式、工厂模式、拦截器模式等。学习经典的软件设计思想,能够写出易于维护和更容易扩展性的代码。
8J2EE容器之WebLogic
Weblogic的下载、安装、启动分析、体系结构(Domain、Cluster、Machine、Server、Administrative Server、Managed Server、Node Manager)、基本配置、应用程序部署、管理和性能调优.集群的概念和配置.掌握使用WebLogic的使用.JAVA EE/EJB
高级编程
创建基于JAVA EE5.0规范的EJB中间件学习将EJB融入分布式企业级应用程序的编程技术,学习Session Beans,Entity Beans,Message-Driven Beans,JTA/JTS,JAAS,JNDI,RMI等技术同时讲解最新EJB3.0技术规范。
掌握基于EJB3.0规范的企业应用架构编程接口及访问EJB技术实现,掌握开发和运行基于 JAVA EE 应用程序所遇到的常见问题,包括安全性,伸缩性和负载平衡管理等。
Web Services
了解Web Services技术,使用JAX-RPC和JAXWS开发Web Services项目,SOA系统的设计与开发,流行的XFire实现Web Services.能使用Web Service技术完成SOA系统的设计与开发和使用XFire完成企业应用.
第三篇:码农故事:一位中级程序员的自白(写写帮推荐)
码农故事:一位中级程序员的自白
我是一名中级程序员。
我有相当不错的基本技能。我犯了足够多的错误才明白为什么那些被称为错误。我很清楚我还需要了解更多东西。最重要的是,我知道那些东西大概是什么,并且我正在努力而积极地提升自己。
勇敢地承认自己不过是水平一般的程序员,这花了我一些时间。我不再感觉有必要去抓住那些我并不了解的观点。当人们发现我对某样东西不了解时,我也不再感到害怕。事情并非从来如此。你可能对此不以为然,但是我曾经自诩为编程大师。
这种对自己能力的不正确的评估,很大程度归因于我在一个相对封闭的环境中学习技能。在过去那些日子里,有电脑就已经很特别了;更不用说知道如何使用了。
在我自己看来,我当时是一个知识渊博并且经验丰富的程序员。在我不到20岁的时候我已经用C++、Pascal、C#、JavaScript写过程序。当然我最引以为傲的是,曾经徒手用PHP编了一个电子商务平台。
事实上,我可能只是人们平时谈话中提到的“我有个朋友的儿子很会写网站”。我和别的程序员没有任何交流,所以我仅有的比较对象是我周围的人;要么是一些根本不在意电脑的人,要么是那些会用电脑,但是在IE窗口中塞了5个没用的工具栏的人。那些可能会说“我的网坏了”这种话的人。
接下来这个故事就是讲我如何产生自己很厉害的幻觉的。
天才的起源
当我九岁的时候,我的一个朋友家里有卫星电视。而在我们家里,我们只能收到四个英国的频道(你能想象第五频道出现之前的日子吗?),我热切地盼望有一台普通的电视机。我们所需要的只是那些“卫星盘子”,或者我称为“卫星”的东西——那样我就随时可以看QVC台或者Eurosport台。由于隐约意识到自己的某种天分,我开始搭建自己的卫星!我的设计包括了一把打开的伞和一条铜质音频线,一段接在伞的金属柄上,另一端接在电视机天线上。必须承认我的设计有一些缺陷,并直接导致我没有得到想要的结果。但是这个小故事仅仅想表达我童年和青少年时期对技术的渴望。我认识的人中从没人想过制造“卫星”。几年后,当我父亲的办公室得到一个14.4k的猫时,我成为了最早一批网民一员。我能回忆起花了整个星期六下午的时间等待这个火焰漫画图标被加载,每个帧的动画大概要过一分钟才显示。我甚至用Netscape搭建了我自己的网站。由于不知道互联网的架构,我把所有的HTML文件存放在本地,并且期待有一天他们会出现在互联网上。然而这些细节并没有削弱一个事实:我认识的人中没有一个制作了他们自己的网站。
在我十多岁的时候,我发现了自己天才中的黑暗面。在装备了Jolly Rogers的食谱后,我和一群小伙伴们准备动摇整个九十年代英格兰的技术和道德根基。破解电话系统是我们的专长。我们用手提式声音耦合器和公用电话,给我们在ICQ上认识的美国姑娘们打免费国际电话,以及在私人交换机上设立语音信箱。最终学业和滑板阻止了我们在这条路上越走越
远,如果没有这些干扰,我们无疑已经在制造凝固汽油,黑进政府网站并且徒手杀人了。尽管我们没有把自己的能力发挥到极致,但事实是除了我们没有其他人哪怕拥有声音耦合器。
尽管到那个时候我已经经历了一些冒险和失败,我还是缺少一些东西。我的想法总是要超前我自身能力好几步-正如在“卫星”一节里体现出来的。我需要一种把我脑海中想法表达出来的方式。我需要一个直接的介于我想象和现实之间的接口。
Fuck 生成器
真正的转机出现在我十四岁的时候。我购买了一份PC Plus杂志,其中附赠了带有完整版Borland C++编译器的CD。我安装了,并且认真学习了杂志上的“hello world”教程。
就这样,一个崭新的世界在我面前打开了。物质世界对于我想象力的限制消失了。我的创造力被解放了,我脑海中的大教堂要成为现实了!我该把这个新工具用于怎样崇高的事业呢?很显然,Fuck生成器。
简单而优雅的Fuck生成器是一个命令行程序,也是我即”hello world”之后第一个里程碑。程序开始运行后会提示用户输入一个数字n,然后它会输出字符串”fuck”,n次。最后用户被提示可以重复以上过程或是退出。尽管功能有限,我还是沉醉于我所品尝到的成就。这是任何程序员都能享受到的一种快感,即看着机器执行你的命令,不管这个任务有多简单。它在运行了,并且你知道为什么它能够运行。它除了在那里运行不会做任何别的事。
过了些时日,另一期的PC Plus附赠了一个完整版的Borland Delphi。有了这个,我把程序升级为带有窗口界面并且可以随机生成彩色的4种不同的脏话。当别的孩子在玩PlayStation的时候,我正在投身于一项更有意义和创造性的事业,我在生成很多fuck。
到那时,一切都预示着我是注定要成大事的。我要向世人展示我真正可以做的事情。我的巨著
在90年代晚期,我为一家小型并且扩张迅速的邮件订购零售商创建了一个网站。一开始,这个站点只包含一些静态的页面——关于商品的小册子,一个导航菜单和一个访问数量计数器。
当我们的访问量越来越大时,我们决定加入电子商务功能。我们遍历了一些现成的工具包,它们的质量从差到极差不等。我印象中第一个版本大部分建立在摆弄cgi脚本以及怪异地把
不久后我们意识到,如果我们想要一个真正可用的甚至体面的在线商店,我们需要一个自定义解决方案。我想到了我过去的成功经验:fuck生成器系列,以及截至那时我所编写的优秀网站,这其中:我的 Manic Street Preachers吉他谱收藏网站非常具有权威性。我认为是时候看看我能真正做些什么的时候了。我要自己从头开始干。
从头开始?即使那个时候开源框架已经存在,我也不会知道他们。我有自己的计划。我买了一本关于PHP和MySQL的书,一边学习一边着手搭建新的网站。
幸运的是,这本书把一个非常简单的购物网站作为它的核心例子。所有的部分都在那儿:“category.php”会列出一个目录中的所有物品;“product.php”会显示商品信息以及
把该商品加入购物车的按钮;以及最重要的“cart.php”,它是所有奇迹发生的所在。这就是我想要的东西!
我孜孜不倦地学习这个例子,充满自信地实现所有巧妙的而且毫无疑问也是最新潮的技术-那些方便的“mysql_”函数;用于建立查询的字符串连接函数;把不同的函数放进“functions.php”文件;通过加入“header.php”和“footer.php”来维护整个网站的一致性;为了代码的快速运行而回避了笨重的面向对象的设计方式(管它是什么玩意)。我的技能在飞速成长。
像一个人的王国一样,我建造了高塔和迷宫般的地道。我每添加一个特性,就好像整个结构在向天空伸展同时也向地下蔓延。顾客帐户、商品评价、购买历史、优惠点数、帐单号、特殊优惠、日志、A/B测试、支付信息加密,等等。一个蔓延的迷宫,一整个星系的函数,大的小的,缓缓围绕一个不变的核心:“cart.php”。
经过八个月的激情工作,我终于完成了。
现在,你们这些读者一定在期待我会详述当网站正式运行时发生了怎样恐怖的事情。恐怕我要让你们失望了。
它成功运行了。
最糟的方法
尽管我现在把这当作我最糟的设计,但是这个东西确确实是能够运行。它在每一个糟糕的教程,每一个反php的帖子里都能找到。搅成一团的代码?是的。不一致的数据和方法名称?是的。介绍和业务逻辑混在一起?是的。魔幻数和全局变量?是的。
对我而言,面向对象的设计只是一堆不必要的开销和公式化的代码,并且有很多片面的理论支持我的观点。我知道有关测试的所有,点击一些你设计的特性,看上去不错,上传运行。我不太知道别的架构,但是据我所知,我所采用的是最明智的方法。
一些事实能“证明”我所做的都是正确的:我从零开始,白手起家,用智慧创造了一个功能齐全的电子商务站点。更重要的,它运行完好并且还在扩张。
在我的眼里,我和那些写了亚马逊的程序员们没什么太大区别。当然亚马逊要大一些,但是我没有看到任何我的网站不能扩张成那样的理由--尤其考虑到我采用的高速运行的架构。
我认为我的技术水平已经到了巅峰了。并不是说我对学习新技术不感兴趣了,我只是不再对此感到紧迫。毕竟我创造了一些不错的产品。任何在此之上的东西只是附加奖励,是蛋糕顶端的樱桃而已。
回到地表
我很遗憾,我在这种心态下生活了好几年。我只是将一小部分时间用在这个网站上,而把主要时间用在完全不同的领域。在之后多年的维护和偶尔添加特性的过程中,我确实意识到了之前做的一些选择是有问题的。我意识到有时候要花很长时间才能找到我要找的文件。有时候当我做一个改动时,一些看上去毫无关联的地方会出现bug。
我的学习没有停止,但它确实进展缓慢。我意识到我曾经写的mysql函数是有风险的,因为后面版本的PHP减少了对它们的支持。在一段时间里,我克服对此的恐惧的方法是坚信我的无懈可击的设计可以弥补这些风险。毕竟我尝试了所有形式的我能找到的SQL注入,一切看起来都没有问题。
去年的一天我接到了一个紧急电话,网站挂了。所有的请求都得到500错误。在工程师们重新启动并且分析了事故原因后,这被证实是一起来自国外的sql注入攻击,是我从来没见过的一种。
好吧,我想,这也许是我该转向PDO的时候了。
觉悟
当我坐下来准备重写所有的数据存取方法时,我意识到了一些深层次的问题。我意识到这将会很困难。而且我知道为什么它会这么困难。
因为这些方法散落在所有地方;因为我无法知道是否会不经意地破坏一些东西;因为代码是如此不一致以至于我要小心地研究不同对象的细微差别;因为很多代码和别的部分紧密相连,这也会导致我会不小心造成破坏。简单地说,这将会很困难。不仅因为所有这些坏的实现方法,还因为我对它们所将造成的后果缺乏预见。
所有的辩护,借口,逃避都无法继续下去了。我错了。我不是那个幻想中的天赋卓越的程序员。这么多年来,我一直都没有认清这一点。
我的愚蠢已经显而易见,尽管这对我的自尊心是极大的打击,但这也是很宝贵的一个教训。我通过亲身经历(而且是非常痛苦的),学到了为什么做一件事的方法有对错之分。这不仅仅关系到品味或者时尚。这不是比谁的方法更聪明。正确的方法可以在现实生活中找到,并且能让你和那些使用你代码的人的生活更好。错误的方法让人沮丧,浪费时间。我在这里不想说明哪些东西是组成“正确方法”的要素。只要说不是我做的那些就够了。
真正的错误
我实现了PDO。同时开始第一次使用PHPUnit。我决不想尝试通过单元测试去改造那样的代码。
现在我有意识地迫使自己无论何时都尽量去学习。我正在读一些每个程序员都应该读的书。我在关注别人的博客。我在收听播客。我会看会议视频。我正在参加一些当地的社团并且在其中做演讲。我在做副业并且挑战自己学习新的技术。我在学习用正确的方法做事。
对你们所有献身于这项事业中的人来说,有一个对我们很重要的有利条件。即编程是这样一个完全抽象的活动,任何其他领域都会受到的现实世界中的限制在这里不存在。在这里,你的极限是你自己。
我要以一些真正的箴言结束这个故事。我在开始写这片博客的时候正好刚看完第二版的《代码大全》。在书的最后,第825页的底部,作者准确地描绘了我在写这篇文章时的想法。可以说他只用了两句话就表达我在这数千字里想表达的东西:
“作为一个初学者或者进阶者,这并没有什么错。当一个有能力的程序员而不是领导者,这也没有什么错。真正的错误是,当你知道应该如何去提高时仍然选择做一名初学者。”
第四篇:码农学习分析(知乎)
我写了一篇码农入门的文章,希望对一些学生,或者想转业的人有帮助。
这篇文章是我原创的,并且已经先发到了另外一个论坛,这个论坛同学比较多,如果有兴趣要当码农了可以来瞧瞧。
昨天看到有一位铁路工作的工程师说想要放弃现在稳定的职业,投入码农的怀抱,我觉得很多人把码农这个职业看得太高,也许是社会浮躁的气氛造成的,我作为一名大漩涡的坚定捍卫者,入行也快8年了,有义务进行一番科普,让漩涡众找准自己的定位。
申明一点,我说得一切都是站在我自己的角度,周围的环境进行阐述,可能有坐井观天的情况,其他码农不认同也希望说出您的观点,大家互补。自我介绍:
我以前得帖子介绍我自己不少了....还是简单介绍一下,我自己毕业于某渣985的计算机学院,从毕业到现在工作接近8年的时间。标题说了我自认为是一名乞丐版的全栈工程师,所以我身上的技能包很多,有的比较精,有的比较浅,后面再介绍。因为我接触的东西很多,所以对码农的各个方面都略知一二,各种文档,各种语言,各种主流的设计模式都略知一二。我下面就把整个码农的框架以及里面细项写出来,不敢保证非常准确,但是至少是有实践过的。
1.码农的角色 1.1 编码人员
编码人员会收到需求文档或者设计文档,被要求要实现什么样什么样的功能,然后进行编码实现和需求文档,设计文档要求一致的东西。编码问题具体后面说。
1.2 设计人员(我们所说的系统架构师其实就是高阶的设计人员)设计人员分2类,一类是UI设计人员,一类是系统设计人员会收到需求文档,被要求要做一个什么功能,要实现什么为目的,设计文档包含系统架构,语言,数据结构,数据流向,安全性评估,可行性评估等等等,产出一份设计文档交给开发进行开发。1.3 需求人员
需求人员会和用户或者产品经理进行需求访谈,引导用户交出合理并且准确的需求,准确的逻辑,然后产生一份需求文档,并将需求文档交于设计,进行可行性分析。可行性分析通过则设计人员会开发进行设计,编写设计文档。需求人员要求必须能够拿到准确的需求并且传达给设计,因为一旦需求错了,整个设计和开发都要重新来过,浪费的人力物力可不是一点半点。用户或者产品经理提出问题,需求人员根据需求问题找到可以实施的解决方案或者优化现有的作业流程。在完全需求的同时,提出的解决方案要尽可能的为设计开发考虑,降低设计开发成本。1.4 产品经理(创意团队)考察市面上的产品,针对自己的产品进行规划,要做哪些功能,什么样的功能受众大,什么样的功能可能能打击到竞争对手等等情况进行分析,然后发展产品,对产品周期进行规划。产出为产品规划书,产品生命周期,产品介绍等等相关文档,并且和需求人员合作产生需求文档。1.5 测试人员
当然了就是对开发的功能,模块,产品根据需求文档进行测试,有猴子测试,白盒测试,灰盒测试,黑盒测试,压力测试,测试工具测试,自己编写代码测试等等等.....产生的文档 就是 测试计划,buglist文档回馈给开发人员。补充一句,所谓的bug是指凡是和需求文档不一致的结果都是bug,并不是代码出了问题才叫bug。1.6 运维人员
运维人员就是有管理员权限,可以操控产品,功能的一些参数来管控,对产品和功能使用是非常熟练,并且会一些简单的编码和数据库原理,第一线对系统产生的问题进行处理并且修复数据,如果能找出根源的问题就是优秀的运维。产出的东西有 troubleshooting 文档,问题反馈文档,另外很多运维也会写用户说明书,因为他们对系统是最熟的。
1.7 项目经理(PM,PMA)这部分人不是严格意义上的码农角色,只是管理项目的进度,风险,人员,成本,协调资源(和建楼房的项目经理没有本质区别)。这里就不写了。2 工作流程
所以整个工作流程 大概就是这样 用户/产品经理--->需求人员--->设计人员---->编码人员----->测试人员----->运维人员。不是指等级越高的人员编码能力越强,只是在上流的人员的容错率很低,所谓差之毫厘谬以千里,上游错了一点点,下游必定错得很惨。人员越多,也会导致流程越长,耗费在沟通上的时间就越多,沟通上容易出错的风险就越大。所以很多公司基本是 设计/编码 或者 需求/设计是同一个人。或者一个人身兼数职,比如我,就是兼了所有角色.....3 码农的基本素养 3.1 逻辑能力
逻辑能力一定要强。逻辑能力可能有天赋的原因,可能也有后天学习的原因。逻辑能力强的人一般体现为数学,化学,物理等方面比较出众,所以理科生转码农会容易很多(比如码农里面有大量的自动化,物理系,数学系的学生),因为理科生在逻辑方面被训练得很多。虽然我大学是混过来的,但是高等数学上和下我都拿了90多分.....逻辑能力强会让你在写代码的时候看到推算,各种算法,加减乘除的时候不会紧张,操作 链表,堆栈,数组的时候得心应手。做需求分析的时候能够抓到矛盾点,能够分析出流程,功能是否合理,是否能够实现等等等。所以逻辑能力是很重要的。3.2 沟通能力
沟通能力可以让你快速融入团队。沟通能力体现在你能够快速接受并且正确理解别人告诉你的事情,你也可以清晰并且准确的表达出你自己的想法。这样你的沟通成本就会大大降低,然后你就能够花更多的时间在代码的编写,需求的分析上面,提升自己的工作效率。3.3 学习能力
旧的技术你可以通过一些例子,项目代码,文档然后快速进行掌握,并且在项目上可以开始快速上手开发新功能。新的技术进来,你有兴趣花个人的时间去专研,并且能在你们团队第一个的搭建出模块,平台供你的团队成员学习,使用,那么毋庸置疑你在哪个地方都会很吃香。
3.4 阅读文档能力(英文水平)很多旧技术,新技术其实都是要靠阅读文档,和自己尝试编写代码结合进行学习的。这样学习起来效率会很高,所以会阅读文档,并且理解文档就显得格外的重要的。对于旧的技术或者问题有很多中文文档进行阐述,但是更多的新技术,新问题只有英文文档进行描述,这个时候你的英文水平就显得格外重要了,因为好的文档可以减少你学习的时间,提升你学习的效率,而大部分好的文档其实真的都是英文写的。所以要成为高阶的码农,英文是要有一定的水平的。3.5 搜索引擎的使用能力
其实现在码农这个职业现在使用搜索引擎是必不可少的,百度,Googel,github,stackoverflow,csdn都是比较主流的。我一直坚信一个理论,你所做的东西你所遇到的问题肯定已经有人遇到并且解决,你要做的就是去网上有目的的海底捞针,然后看别人是如何解决,你进行复制和简单修改。不要认为这就是复制就能解决,前提是你要能找到在哪里可以复制。当然大部分的东西还是英文的比较好,所以这里又考验你英文水平的时候到了。(我们经常调侃,现在已经不是面向对象编程了。而是面向搜索引擎编程,网络挂了,今天就不要做事了。)举个简单例子,我曾经接收到一个需求,用户经常要把上万的数据导入到系统里面,因为数据库是sql,而系统是.net的平台,后来我google到可以使用bulkcopy来进行处理,接收这个需求之前我是完全不知道bulkcopy的。这样你在使用搜索引擎在完成任务的同时自己也得到了提升,学到了你周围人都不知道的知识。3.6 态度
态度决定一切,你必须有好的态度,好的职业修养,才能被人看得起。遇到问题不甩锅,有责任心,是自己的东西就有一定要把它干出来为止的那种冲动,不眠不休的尝试解决!我手底下曾经有一个程序员,职高毕业,也没参加什么培训。逻辑能力,基本理论知识可以说是差极了,沟通也挺费劲,如果是我去面试,这类人我一般来说是不通过的,不过是老板派给我的,我也只能收着。还好他大部分是做UI和H5的样式,CSS3的动画。可是后来我发现他的态度非常的端正,责任心很强,自己也很有耐心去学习新的技术知识并且运用到实际进行解决。虽说进入状态花的时候有点长,他写的 代码也是乱得不行,但是能帮到我解决问题,而且态度很好,不管工作难或者不难都不推诿。所以最后还是可以的,现在也慢慢开始成长,转到了其他团队。3.7 定位
其实码农是属于第三产业,服务行业,你怎么样让你的上司爽了,让用户爽了,你就牛B了。不一定要用写代码的模式才可以,好的创意,好得理念,好的沟通,好的态度,都在这范围里面。写代码做功能做产品的终极目的就在于做服务,提供服务。你能搞清楚你服务的对象,搞清楚你服务对象想要什么,你能提供什么服务满足他们,并且你实现了,你就成功了。最后来说说我的整个成长过程,给大家一个启发。
4.1.最开始入行,接手一个asp.net + sql server的项目,开始学习asp.net + sql server
4.2 asp.net + sql server 有了一定能力,并且熟悉了业务,开始做一些简单得设计,和需求,开始学习设计模式,什么工厂模式,批处理模式,单例模式,建造者模式等等等....并且编写 概要设计文档和详细设计文档
4.3 本来开始做设计了,一心要往构架师上靠,可是公司缺需求分析人员,怎么办没办法,自己顶上,开始编写 BRD ,TBD,SOW 等等一些列需求人员的文档并且和用户沟通需求,提高自己提出解决方案的能力。
4.4 好了,有项目来了,我最有经验,组织就决定你来当项目经理了。好了 又要开始做项目经理的事情,写项目风险评估报告,写人员评估报告,每天写项目进度,和各个部门leader进行撕逼,拿资源(真新累,不想当项目经理)。
4.5 好了 公司决定要做一个产品,你这方面经验最多,你来当。好了开始写竞品分析报告,产品生命周期,产品发展概要,产品功能预想......4.6这个产品不行,公司决定组织一批精英另外做一个产品,你来负责web端和移动端,对就你一个人负责。日了狗了!但是我不会java 不会 Object-C 我做毛的移动端啊。好了发现市面上流行用 hybird的开发模式 用 H5+简单原生来进行移动开发。研究了国内的DCloud 和 国外的 Cordova Apache,开始一步学习,H5和 cdth加上简单的Object-C 和 java,毕竟C#好几年经验,面向对象语言学起来快。cdth也还行。后来也算做出来点东西了。
4.7 嗯,美国有项目,但是我们人手不够,你一个人去国外把这个项目吃了吧.....好的,我现在一个人只身来到国外,没有其他人员的支持,得益于我 乞丐版 全栈工程师 这个项目也顺利完成。就在今天!本来已经计划好了下周回国,可是国内一个电话过来,“你签证停留时间明年才到期吧,另外有一个州也需要你,机票给你改签了,你直接飞过去,再干2个月再回国.....回国之后去把加拿大签证办了吧......” 4.8 我的技能包
4.8.1 C# 方面: ASP.NET(精通)Winform(熟练)WPF(熟练)(其他.net wcf ws 等等也算比较熟了)4.8.2 其他语言 : H5(熟练)cdth(熟练)Java(入门)Object-C/Swift(入门)abap(入门)
4.8.3 数据库 : SQL SERVER(精通,如果我说我是DBA,别人也信),mysql(熟练),DB2(入门),Oracle(入门)4.8.4 网络以及安全编程:AES DES加密,ajax以及跨域调用,网络爬虫,https,ssl,sso,socket,web socket,web worker,sql注入,html注入等都做过一些开发或者学习。
看了下,只有ASP.NET 和 SQL SERVER 我敢说精通,这两个基本不会难倒我(也可能有万一,被打脸也正常.....),其他的几个熟悉的虽然我很有经验,但是也不敢写精通,没自信。因为在码农的世界,当你学习得越多,你就会发现你知道的越少。打个比喻,码农的知识是海洋,我现在学到的也不过是一叶扁舟而已。
结论:Win,安卓,IOS,数据库我都能开发。不分什么前端后端。需求分析,系统设计我也都能自己做,所以我可以一个人在没有任何支持下完成项目。也喜欢研究一些新的东西,学一些我不知道的。因为行业的原因,我从来没接触过C 和 C++,不过真的有机会去做的话,我也能很快上手。
4.9 其他一些小事情我稍微炫耀一下
4.9.1 优化一个计算逻辑,以前一直是30-35分钟计算完,我优化之后只需要3分半(其实优化说起来很简单,就是把工厂模式改成了批处理模式,但是代码确实写了太多,也需要改表结构,用空间转换时间)。
4.9.2 一天时间就完成了微信平台的开发(在完全不懂微信平台的情况下,周围人都不会),可以用微信平台和公司内网数据交互,并且做出了案例,以后大家可以根据我的案例进行微信平台延生功能的开发。4.9.3 各种优化数据库,什么查询3分钟变查询3秒,处理数据10分钟变处理数据10秒。
4.9.3 被美国这边看上,希望我留下来常驻(用绿卡诱惑我....)。4.9.4 等等等.....5 转行建议
5.1 你至少含有3-4项码农的基本素养,如果你是文科生或者逻辑理解能力较弱,请慎重考虑。
5.2 学习一门语言最好能找到一些成熟的框架,在框架上依样画葫芦,其实就是照抄完成想要的功能,在抄的同时能做适当的修改。5.3 第一份码农的工作慎重选择,因为第一份码农的工作大概率的决定了你以后的方向以及你可能高度。第一份工作最好要找到团队协助,周围有编码氛围,随时可以进行技术讨论或者交流环境的公司。这样你的成长会很快,否则你在入门的时候举步维艰,会让你度日如年。
5.4 学习码农是需要坚持持续学习的工作,不断的接触自己不懂,不断的提高自己,不会是因为你有几年经验了就可以吃老本的,如果有这种心态迟早会被淘汰的。
5.5 3分钟热情的人就不要来转了,转这行是需要花大时间,大精力,耐得住寂寞,受的了孤独的人才行。
5.6 能找到一个带你入门的启蒙老师你转行会非常有效果。5.7 干码农不一定非要写代码,如果有条件,你可以当猴子测试入门,你觉得你文档能力,理解能力,沟通能力强,你可以尝试做需求分析,也可以先学一些系统知识,从运维入手。
5.8 基础理论知道是比较重要的,有可能的话尽量多得进行了解。5.9 如果你英文厉害,建议直接阅读英文文档/书籍进行学习。码农误区
6.1 加班多。
加班多最大的原因在于你拿的任务是和你当前能力不匹配的,一个好的码农效率比一个差的高了不止10倍。好的码农半天做完的事情,差的可能就需要一周。因为不一样的思想,不一样的经验,花在找资料,做设计,写代码的时间差距是非常大的。所以你加班多 1.你是大牛,真的是事情多并且deadline要到了。2.当前的工作难度比你能力高,你需要查找大量资料来完成,或者写了大量的冗余代码,冗余设计,代码写得不严谨,BUG太多,甚至不知道BUG出在哪里。3.其他团队成员拖累了你的进度。我的经验看来,大部分加班都是因为 第二个原因。所以通常说来(当然有例外)能力越强的人加班越少,加班多说明工作效率太低,能力匹配不上你接受到的任务。6.2 码农是吃青春饭
码农不是青春饭行业。码农只是一个需要不断进行学习的行业。年龄大了不能代表学习能力差,年龄大的码农有大量的编码设计经验,在学习新技术的时候就已经领先人一步了。当然了你说年龄大了,精力就不够好了。哪个行业不一样的?我这次到美国,看到了满头银丝的码农,一样干得挺好。所以码农本身并不是一个青春饭,是一个需要不断进行学习不断进行提升的行业。年龄大了不一定是非要转管理,做技术也是可以的。
好了,花了一下午,打了这么多出来。这都是一家之言,如果你觉得对你有启发,你就看看,你觉得都是屁话,你就无视好了。其他资深码农也可以提出你们的看法,毕竟我只是处在我现有环境,有坐井观天的可能性。
备注一下,虎扑为了防止js注入,用cdth替代了 Java!!Script
第五篇:黑马程序员:PHP零基础同学如何学习
零基础大学生们该如何学习php?
我们都知道,php语言作为一种专业建站的语言,没有华而不实,而是经受住了时间考验,成为一种值得学习的语言。现在国内众多的php学校也说明,php语言在当今有着广泛的市场需求。那么零基础的大学生们如何学习php呢?
对于零基础的大学生们来说,学习php肯定是非常需要毅力的。任何语言的学习都不可能一蹴而就,而是需要花大量时间,消耗大量精力才能学会的。也并不是报了某个班就一定能够学会。这绝不是打消想立志从事php从业的同学的积极性。想想学会php,要接触的东西实在是太多,不仅html标记,div+css,js这些前台知识需要懂得,而且php语言,samrty模版,ajax,jquery,mysql,linux等等也都需要学习和了解,就是应用工具如框架,也不是一天两天就能够掌握的。
学php难吗?难!但是任何一门技术,如果轻易就能够让人学会,那也不会称作为技术,因为那样,工作的可替代性太强了。技术,只有难学才会更有价值。学php有没有技巧,当然有,这也是我在这篇文章想说明的。
php学习第一要点:心态。虽然目前php语言市场火爆,而且php语言相对于其他的语言来说也更容易学习,但是千万别把php想的太简单,不要全信培训学校的宣传,仿佛零基础的人也能够随随便便就将php学会。失败的案例肯定不少。当然我们也不要把php想的太难,既然你想从事这方面的工作,那么就要准备全力以赴,破釜沉舟。4个月学会不会,那就坚持到5个月,5个月还不会,那就坚持到6个月。总有一天,你会全面掌握php知识,拿到自己满意的薪酬。
php学习的第二要点:就是学习方法。在这里,建议大家还是报一个班。一个人学习php,太难,如果说有一群人一起来学习,就能够营造出一种学习php的氛围,有老师教,学习php碰到的问题也可以得到解决。在这里,就会碰到一个问题,那就是一个班,有零基础的,有从事过这方面工作的,php水平可谓是参差不齐,如果是一个零基础的同学学习php,你如何跟上学校的讲课进度? 这里就是我要讲的学习方法,在我们报班前,可以先去网上下载php学习的相关视频,比如网上非常流行的韩顺平的php系列视频(声明:韩老师没给我啥好处费,我也不是托,隔着大老远,我连他老兄的面都没见过的说-_-),就讲的非常好。韩老师的视频讲的很深入、生动,而且有笔记可供下载学习。如果我们把韩老师的视频都看了一两遍再去报班学习php,效果肯定和没看视频效果不一样。
php学习的第三要点:那就是坚持坚持再坚持。抵御诱惑,ASP/PHP/JSP/.NET的对比也许会让我们新手无所适从,也许学了一半PHP,我们又开始打C#的主意,或者有人说JAVA很强,这个时候的我们绝对不能动摇,哪怕我们真想学,也得学会了PHP,然后再学。见异思迁是最不可取的,狗熊掰玉米就是这个道理,如果经常中途放弃,只能是一无所获,还浪费了N多的时间和经历。当我们花费了大量精力后却又放弃了php,相信我们的心里面会很难过,对未来又会陷入到迷茫中。如果不想有这种体验,那就坚持学会php吧。