业界新闻 gt;网站建设需上网要具备哪些条件的条件有哪些

&p&12306首秀被骂的狗血喷头后铁道部找来IBM、阿里巴巴等大企业要解决方案,给出的条件是资金管够但是问题得解决。几大企业最后都拒绝了(其中阿里巴巴最后负责了排队系统的建设)。12306开始自己尝试解决问题。他们发现市面上可以买到的成套解决方案都不足以应付春运购票负载,所以只能自己改进已有的数据库(注:其实是改用&a href=&///?target=http%3A///cn/products/vfabric-sqlfire/overview.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&VMware SQLFire/GemFire&i class=&icon-external&&&/i&&/a&,这里我之前理解错误)。以前12306用的是小型机,发现性能严重不足,遂改用x86系统+linux平台(原平台为&a href=&///?target=http%3A//en.wikipedia.org/wiki/HP_Superdome& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&HP Superdome&i class=&icon-external&&&/i&&/a&小型机,UNIX系统,&a href=&///?target=http%3A//en.wikipedia.org/wiki/Adaptive_Server_Enterprise& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Sybase ASE&i class=&icon-external&&&/i&&/a&数据库)。最后他们的核心系统用了十几个节点(现在应该是17节点)的多路Xeon E7(具体几路待考),每个节点配1TB内存,数据库全部在内存中运行。2013年春运,12306系统峰值负载11万tps,与2012年淘宝双11活动峰值负载相当,新的系统基本经受住了考验。&/p&&br&&p&&i&补充:以上内容是我在2013年7月得知的信息,彼时没有任何公开来源提到过12306新系统的技术细节。甚至,当时局外人没人知道12306已经在2012年开始做了技术改造。直到数日之前,铁总首次向媒体公开了技术改造的详情:&/i&&a href=&///?target=http%3A///151/.shtml& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&分布式集群内存数据技术引领12306技术革命&i class=&icon-external&&&/i&&/a&&i&。这篇文章给出的细节,与我之前看到的内容完全一致。由此我可以确信信息来源是此次技术升级的核心人士。&/i&&/p&&p&&i&另外,关于第三方合作对方给出的信息是IBM、Oracle、Sybase全部不能满足要求,主要是这些厂商的方案部署以后,要升级时不能做到不停机灵活扩展。也就是说,IBM没有做到是他们技术不足“搞不定”。阿里巴巴参与了改造,负责了排队系统。此外,虽然后端经受住了压力,前端却如大家所看到的那样还是频频卡死。到底卡死的原因是前端水平太低还是访问压力太大,暂时没有可靠的信息供判断。&/i&&/p&&br&&p&淘宝的问题是其系统架构是分散度较高的,各个订单之间关联度不大;而12306每出一张票都要对全线路做数据更新(因为一条线路存在多个站点),因此系统负载相较淘宝来说集中很多,直接搬淘宝的方案也无法解决问题。淘宝的应用类型决定了阿里巴巴可以通过部署大量的服务器来分散压力,但12306就不行。其实他们的核心系统的硬件成本不过数百万,不是他们不想采购更多服务器,而是买更多的服务器也没什么用途。最后,在经过软件层面的优化之后,12306的瓶颈其实是核心节点的CPU、内存性能。但是这个性能的提升不是朝夕的事情,而是受限于摩尔定律,基本上每两年才能翻一倍多些。(这段话是我自己的分析,不过现在12306的后端数据库系统应付现有需求已经够用了)&/p&&i&补充:关于座位实时复用,我看到的信息明确表明12306出票时,每出一张区间票都要实时调整该线路其他受影响区间段的余票数量,且这是很大的压力来源;另外,对方表示所使用的GemFire数据库与简单的memcache/redis数据缓冲不同,有着本质区别。&/i&&br&&p&==========================&/p&&p&然后我说点对铁路系统购票困难现象的看法:&/p&&br&&p&一种商品只要出现供不应求现象,那么结果只有两种:大家排队购买;出现黑市,变相提高商品的流通价格并抑制需求。&/p&&br&&p&12306这个事情,就是标准的限价商品供不应求之后出现排队与黑市现象的例子。因为供不应求,所以有了黄牛、抢票软件与秒杀。如果供应充足,一个车次直到发车前都有一两张余票,那么黄牛、抢票就毫无存在价值,旅客也用不着守在电脑前和其他人比拼手速和网速以及电脑性能网络性能了。&/p&&br&&p&现在供应不足的前提下,12306就算把系统做的性能再高,也只是会加快热门车次票务秒杀的速度而已——而这更会刺激抢票软件,大家为了在更短的时间里成功抢到队列名额就会不断提升自己的抢票性能。打个比方说就是一个店门前排队,消费者为了增加买到商品的概率去雇人代排,每个消费者都雇了好多人,造成店门口的通道拥挤不堪。为了减缓拥堵,商家不断拓宽通道,但每次一拓宽消费者们就会增加雇佣的排队劳力把新增的通道空间占满,形成恶性循环。这样下去,只要还存在供不应求的现象,这种循环就不会有终止的时候。也就是说,12306的问题主要不是出在网站本身。&/p&&br&&p&那么怎样解决供应不足的问题?这么多年来铁路不断升级运力修建新线,已经建成全球最庞大的铁路运输系统,可是到了春运还是只能勉强应付。从这个角度来说铁路部门在供应不足的问题上也不该承担太大责任,他们已经做得很不错了。&/p&&br&&p&那么问题的根源就出在不断增加的需求上了。为什么我国铁路系统需要承担如此庞大的客运流量需求?很显然,是因为全国范围的人口流动。大量务工上学人员过节要返乡,节后回驻地,这个刚性需求是合理的。可是为什么他们必须要到外地去打工上学?为什么数以亿计的人员要远离家乡去谋生求学?&/p&&br&&p&最后我们会发现,区域发展不平衡才是罪魁祸首。正因为多少人在家乡无法得到足够的机会与资源,他们必须到发达地区奋斗和实现自己的价值。只要这种不平衡现象还在继续,每年春节前后就不可避免地出现大批人员全国范围流动的情况,就不可避免地出现运输能力不足的尴尬。改进12306也好,增加铁路网投资也好,最终都只是治标不治本。如果这个社会不去直面根本问题,那么这些表象的症结永无解开的时候。&/p&&br&&p&说起来,有几个人愿意背井离乡呢?&/p&&p&=============================================&/p&&p&然后这个问题争了几天,我实在忍不住要吐槽一下了:&/p&&br&&p&12306这个事情,网上有多少网友从一开始就献计献策了,也有不少网友提供了很不错的建议。但不得不说,很多网友在提建议时完全就是一种居高临下、自以为是的态度,上来就先认定需求简单可以轻松应付,随便有点经验的工程师就能搞定,12306出问题全怪体制太烂,国企效率低下,一帮人光拿钱不做事,技术水平太低……&/p&&br&&p&淘宝2013年双11活动,峰值流量是一秒钟完成1.3万笔订单。1年1月6日全天网络出票400万张。看起来双11流量完爆12306是吧?等等!别忘了1万张票可不是全天悠悠闲闲平均地卖出去的,而是分成10个时段集中被抢走的。每个时段开始放票后数分钟之内大部分票就已经被抢光了。以每个时段40万票,峰值持续三分钟估算,高峰期一分钟出票在10万张以上毫不夸张。诚然,一分钟10万订单还比不上淘宝2013双11,但别忘了一年以前阿里巴巴也只是达到了一分钟15万订单的水平而已(并且在高峰期一样卡爆)。而且一分钟10万出票还满足不了需求的,以旅客购票的热情来看,达到一分钟50万票都不一定能让所有旅客满意。&/p&&br&&p&淘宝在2012年双11时已经是业界顶尖水平了,其软硬件技术皆为自主研发,既便如此面对一分钟十几万的订单量都会卡死。请问,觉得12306“需求简单,问题可以轻松解决”的,是不是水平已经高到了阿里巴巴都要请你们去领导整个技术团队的级别呢?是不是你们的方案可以轻松应付每分钟数十万笔订单,达到全球一流水平了?&/p&&br&&p&淘宝面临的需求是业界从未有过的,所以淘宝的路很艰难。12306面临的需求是其他人遇到过的么?全世界哪个国家、哪种客运票务系统敢说自己的负载达到12306三分之一的水平?面对空前庞大的压力,诸位“技术高手”只是凭着自己一点程序员的经验,在电脑前一个人思考上一会儿就给出个“简单、实用、省钱、轻松应付”的解决方案——你们知不知道“自大”这两个字怎么写啊?&/p&&br&&p&作为局外人,本来就难以了解铁路售票系统内部的业务逻辑。想出建议可以,那么是不是先收集些信息,了解下背景?是不是先拉出一份需求清单来,把客户的想法搞明白搞清楚了,然后再考虑技术实现?能不能不要上来就想着技术上怎么方便怎么做,把客户需求随意地简化?好多人提的方案在票务供应不足的情况下直接就超售了,难道你要让旅客前一分钟还为订到票高兴,下一分钟对着“您的票被取消”的提示破口大骂么?或者订票延迟确认——知不知道旅客看到选择的车次没能买到票后会做什么?马上去看其他车次有没有票啊!你延迟确认几分钟,然后对排队的账户做抽签,多少旅客会觉得自己被耽误了啊!旅客的要求就是速度越快越好,最好是下订单后一秒钟出结果才安心哩。这还仅仅是简单想一下就能知道的问题,局外人不了解或不能轻易想到的问题又有多少?诸位高谈阔论时,有没有虚心地去找找内部人士了解或者搜索类似的票务系统的研究论文?真觉得自己的头脑聪明绝顶,连背景调查都不做就可以轻松把握所有细节?还有,你们想出来的方案做没做过实验啊?考虑没考虑过硬件适配性啊?你们了解现在市面上能买到的硬件系统,什么样级别的能满足可靠性、性能和可扩展性、可维护性的需求么?你们在多路服务器平台上验证过你们的分布式数据库构想么?哦原来你们什么都没做过,怕是连多节点集群互联该用什么连接方式都不知道,你们拍下脑瓜,一句“那些问题都好解决”就完事儿了?就算你们自己没做过,找找类似的案例会累死么?研究下别人做过的经验就不够高贵冷艳么?就贬低自己技术水平了么?连类似的案例研究都没有,随口就是别人做得到我做得到,真觉得自己写过几行代码就多么伟大了么?&/p&&br&&p&还有一些人,看说IBM没做就一口认定是12306故意排挤IBM,认定IBM解决这问题肯定没压力。好嘛,IBM什么时候做过如此规模的票务系统了?你细节什么都不知就预设结论了?为啥淘宝当年没选择IBM作为方案提供商而是自主研发?IBM的大数据业务主要集中在金融领域,这不代表它在其他领域就样样精通好不好?它能拿出的方案无非是Power7小型机平台,Power7在数据库性能上又比Xeon E7强多点?然后Power7系统卖多少钱了解么?后续维护难度多大了解么?把适合银行金融行业的平台放到12306来真的合适么?说起来,不就是因为“12306”和“IBM”这俩名字放一起,诸位内心里首先就给前者打了负分对后者仰视么?要是把“12306”换成“nasdaq”,那结论就又是一回事儿了——哦正好nasdaq没用IBM方案,可见nasdaq是排挤IBM内部人赚黑心钱是吧?不过2013年工商银行系统升级故障,应该是和方案提供商IBM无关的,肯定是国企的体制问题无误!&/p&&br&&p&评价一个事物,首先不是了解背景、研究问题产生的原因,首先是看被评价者处于什么立场,打着什么标签。如果是“敌对阵营”那就毫不犹豫地踩上一脚再说话,接下来就算研究也只研究“它的错误在哪儿”,不考虑“它也有对的可能性”。在12306这个问题上就是:12306是国企,是铁总下属机构,所以它出了问题一定是自身原因。票务系统做不好一定是铁路方面不懂技术,把该用来请大企业做方案的钱自己贪掉了,一定不可能是大企业都没信心解决这问题。旅客普遍使用抢票软件也是12306的责任,不是供应不足的原因……&/p&&br&&p&最后呢?12306还是做到了全球最强的客运票务系统。一贯被认为是因循守旧的国企,在选择技术方案时放弃沿用多年的小型机/UNIX平台去拥抱业界还是新鲜事物的基于x86/linux的大规模分布内存数据库系统,承受住了堪比2012年淘宝双11的压力。在这个领域,12306可以自豪地说自己是做的最好的案例。它还在卡,还是偶尔崩溃,页面还是难看,可是这些迟早会改进。这个过程中也还是会有冷嘲热讽,还是会有所谓的大牛指点江山,但最终解决春运高峰期一天数百万张秒杀售票的,还是12306自己。&/p&&br&&p&所以,走自己的路,让别人去说吧。&/p&&p&=======================================================&/p&&p&下面我说说12306系统改进面临的一些问题,一些网友提出的解决方案的可行性。&/p&&br&&p&1.“超级计算机能不能用于12306?”——不能,详情见这个&a href=&/question//answer/& class=&internal&&页面&/a&;&/p&&br&&p&2.“能不能用一个服务器甚至一个集群处理一个车次来加快速度?”——没有意义,处理速度在硬件上主要受限于每个CPU线程获得的内存带宽与延迟,其中内存延迟更重要一些。一个核心处理还是一台服务器处理,内存延迟这个参数是没什么区别的;&/p&&br&&p&3.“能不能在多地建立集群,分别处理某地的车次?”——道理同上;&/p&&br&&p&4.“能不能取消座位实时复用,降低处理压力?”——如果所有区间站的票数都是预先确定的,那么到最后必然会出现有的冷门区间座位空置的情况,这是旅客不希望看到的;&/p&&br&&p&5.“能不能把座位实时复用改为延时复用,热门车次第一次放票后,根据区间之间的情况在下一个放票点调整各区间票额?”——这样做可以减轻计算压力,但是会让大量旅客在第一次订票失败后等待下一次放票,增加下一次放票的负载。而且这会干扰旅客的抢票计划,原来是一个车次没票后就去找下一个车次,现在是一个车次要抢两次甚至更多,反而让旅客更累;&/p&&br&&p&6.“能不能改成预先排队抽签,放票前订票旅客在网上选择进入队列,放票后抽签决定,避免争抢”——很多人提出类似这样的主意。注意热门车次放票被抢光后,没买到票的旅客会立刻去找其他车次是否有票。也就是说即便有这个预排队功能,也不能阻止没去排队的旅客在放票开始之后去买票。对于热门车次而言,参与预排队的旅客抽签失败的概率非常高,而他们抽签失败后多数会失去对这个功能的信任,转而继续选择抢票的方式,于是很快大多数人都会放弃抽签。如果设定为只有参与预排队的旅客才能买到票,那么抽签失败的旅客就失去了对其他车次的选择权,结果更是一场灾难。希望提出类似方案的网友好好思考我上面这些内容。&/p&&br&&p&7.“12306的负载不是比淘宝小很多么?”——淘宝2013年双11峰值订单数量一分钟79万笔,12306每次放票按500热门车次算,根据&a href=&///?target=http%3A//.cn/news/m//.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&央视直播春运火车票抢票&i class=&icon-external&&&/i&&/a& 这篇报道,热门车次峰值抢票速度在每分钟500票左右。很容易算出现在12306的峰值订单量在一分钟10万-30万的级别,与淘宝双11峰值是相同数量级。&/p&&br&&p&我在前面提过供求关系是12306面临的核心问题,可能很多没有经济学基础的网友不太明白,我这里再详细解释下。&/p&&br&&p&任何限价商品出现供不应求情况时,最终获得商品的大多数消费者支付的成本都是要超出商品本身的标价的。一个简单的例子,超市限量出售半价鸡蛋,大批顾客去抢购,虽然排队买到的顾客为鸡蛋本身花的钱少了,但是这些顾客付出了在那里排队的时间和人力成本。排了很久队才买到鸡蛋的顾客,为鸡蛋支付的时间与人力成本甚至可能超过了他买半价鸡蛋省下的金额。于此同时,限量供应的条件下必然有一些排队者最终没能买到鸡蛋。之所以有人买到鸡蛋有人没买到,大多数情况下是因为前者比后者付出了更多的成本;排队者是在跟其他排队者竞争,那些看到长长的队伍就放弃的潜在消费者就是竞争的失败者。&/p&&br&&p&12306的情况也是如此。在现有的车票限价限量供应体系下,在某些高峰期有乘车需求的旅客数量大大超过了铁路系统在这些时间段的运输能力。在这个前提下,必然会有大量旅客无法在这些时间段买到车票,被迫改变出行计划或者出行方式;而买到票的旅客为车票支付的成本,大多数情况下都是高于甚至远高于车票本身的标价的。超出的这一部分成本,可以体现为向黄牛买票支付的溢价,可以体现为在车站售票口排队付出的时间精力,而到了12306的时代,就可以体现为为了抢到票而付出的等待成本。&/p&&br&&p&因此,12306无论怎么改进,都不可能降低因为供求关系而产生的旅客获得车票的额外成本。12306改进的结果只是会改变这种额外成本的形式。以前没有网络订票,大家去售票厅排队或者一次又一次打电话;现在有了网络订票,大家在网上卡到骂娘。但大家吐槽12306的种种缺陷时,其实原因并不是旅客真的特别重视网站的美观程度、重视网页的代码是不是高水平,而是还有很多人没能按自己的心意买到车票。旅客对12306的需求只有一条——买到旅客需要的车票;可是12306无法解决这个需求。对于旅客来说,卡三个小时但买到了票的体验是60分,三次放票时每次都一秒钟就被告知票已售完的体验是0分。&/p&&br&&p&于是12306的未来就会很麻烦。随着系统的改进升级,整套系统的负载能力会越来越强大。可是性能的提升意味着热门车次放票后售空的速度越来越快。上面引据的例子里,一个车次一分钟就卖掉500张票;性能改进后,最终达到的效果可能是5秒钟就卖掉全部票额。而对于旅客来说,卖票速度提升并不会减少他们为了获得车票而付出的额外成本——以前是买一张票卡10分钟半小时,现在一个订单几秒钟就确认了,但是为了能在几秒钟里抢过其他旅客,你需要提升你的电脑性能,增加你的网络带宽,降低你的网络延迟;你需要更强大的抢票软件,一秒钟内发起更多的请求……最后,你在硬件设备上增加的投入就是你付出的额外成本,相比之前你在等待网页响应时付出的时间成本来说只是换了形式。以前售票厅时代大家比拼谁去排队排的早,以后大家比拼谁的网络性能好。而且,12306的响应速度越快,旅客之间的设备军备竞赛也就会越激烈。最后,大家会为了降低几十毫秒的延迟购买国内的vpn通道,改用表现更好的网卡,跑到号称能提供更高抢票性能的网吧去抢票……然后还是会有大量用户因为竞争不过其他旅客而被迫改变出行计划或出行方式。而且当旅客纷纷提升自己设备的性能时,对12306的压力也会越来越大,12306自己也必须同步增加性能,投入越来越高的成本。从技术的角度讲,12306面对的是一个随着它自身性能增长而同步甚至更快提升的需求,具有这样残酷要求的类似案例就只有股票、期货电子交易市场而已。甚至,12306最终的压力可能会超过这些市场。&/p&&br&&p&回到最开始的问题:12306包给知名大企业是否会更好?答案是,无论谁来做,最终结果都是一样。&/p&
12306首秀被骂的狗血喷头后铁道部找来IBM、阿里巴巴等大企业要解决方案,给出的条件是资金管够但是问题得解决。几大企业最后都拒绝了(其中阿里巴巴最后负责了排队系统的建设)。12306开始自己尝试解决问题。他们发现市面上可以买到的成套解决方案都不足以…
一个学期前我也和楼主差不多不知道这些都是啥,一个学期之后差不多都弄懂了,来讲讲自己的理解吧 & & 因为接触的时间不是很长,有错误的地方欢迎指正~&br&&br&首先要知道网站访问大概是什么个过程:&br&假设你在浏览器地址栏输入这个问题的地址&br&&div class=&highlight&&&pre&&code class=&language-text&&/question/
&/code&&/pre&&/div&访问过程和下图差不多,浏览器和服务器交流,服务器和数据库交流(有时候数据库就在服务器那台机子上)&br&&br&&img data-rawheight=&591& data-rawwidth=&842& src=&/581ae59a16e_b.jpg& class=&origin_image zh-lightbox-thumb& width=&842& data-original=&/581ae59a16e_r.jpg&&&br&&b&HTML 与 CSS&/b&&br&你家电脑拿到一个 html (就是上图 HTTP 响应的 body 里的内容)之后,就会对它进行解析渲染。HTML 就是一种标记语言。类比一下,大家在论坛上经常会用一些代码来添加富文本内容,举一些栗子:&br&&ul&&li&&div class=&highlight&&&pre&&code class=&language-text&&[img]图片地址[/img]
&/code&&/pre&&/div&
用来贴图&/li&&li&&div class=&highlight&&&pre&&code class=&language-text&&[url]超链接[/url]
&/code&&/pre&&/div&
用来贴地址&/li&&li&&div class=&highlight&&&pre&&code class=&language-text&&[del]呵呵[/del]
&/code&&/pre&&/div&
表示标签里的文字应该被删掉(默认添加删除线效果)&/li&&/ul&这种&b&论坛代码&/b&也是一种标记语言,HTML 的作用就和它差不多。服务器返回给你的html文件里面,写的是一些代码,大概是这样的:&br&&img data-rawheight=&384& data-rawwidth=&511& src=&/def15af96af6_b.jpg& class=&origin_image zh-lightbox-thumb& width=&511& data-original=&/def15af96af6_r.jpg&&浏览器拿到这些代码之后,分析一下给你渲染好页面显示出来,如果不用css,效果是这样的,按照浏览器默认的样式显示出列表、图片、超链接、输入框、按钮等等:&br&&img data-rawheight=&362& data-rawwidth=&330& src=&/8df8c13db4c5_b.jpg& class=&content_image& width=&330&&&br&是不是觉得默认样式有点看瞎狗眼呢……所以很多时候我们需要自定义样式,现行通用的规定样式的语言是CSS,我们可以用它写一些定义样式的代码,然后在 html 文件里用一个&link&标签把这些规定样式的 CSS 代码与表达内容语义的 HTML 代码关联起来,然后你就能看到一个符合人类正常审美的页面了:&br&&img data-rawheight=&296& data-rawwidth=&662& src=&/09c5fafc7cc4_b.jpg& class=&origin_image zh-lightbox-thumb& width=&662& data-original=&/09c5fafc7cc4_r.jpg&&&br&CSS 代码的格式基本是&br&&div class=&highlight&&&pre&&code class=&language-text&&属性:值
&/code&&/pre&&/div&比如知乎顶上那个蓝色的导航条,它的 CSS 大约是这样的&br&&img data-rawheight=&256& data-rawwidth=&408& src=&/3f351f51aff2be4742b1_b.jpg& class=&content_image& width=&408&&&br&第一个属性对应的代码翻译成人话,就是它的位置(position)应该是不动(fixed)的,浏览器会兢兢业业地去实现这段代码要求实现的效果,
所以你在页面上翻来翻去顶上那个导航条都会死死地黏在窗口顶部不跟着滚动。&br&再拿里面的其他几个属性做栗子解释一下就是:&br&&ul&&li&left 和 top
为零指明这个导航条要紧贴着窗口的左上角&/li&&li&width 和 height 指定这个导航条的宽和高&/li&&li&background
指明这个导航条的背景是一种渐变的蓝色&/li&&/ul&浏览器就会根据这些 CSS 代码,“画”出对应的样式。&br&&br&&b&HTML 5 与 XHTML&/b&&br&像人的语言一样,网络上的网页里的 HTML 代码也不一定是标准的,好比有时候你发音不太标准,别人会去猜测你说的到底是什么一样,有些时候前端程序猿不小心写错了 HTML,浏览器也会试图猜测他们原来想写的是什么,做对应的渲染,而猜是要有一个常识做依据的。加上有些浏览器支持一些标签,有一些又不支持,以及其他混乱的情况,为了防止大家鸡同鸭讲,我们需要对 HTML 代码里能有什么标签,标签怎么写,标签可以有什么属性这些东西有一定的共识,建立一个通行的标准,HTML5 就是其中一个比较新的标准。这个标准新加了很多可以用的标签和属性,然后各大浏览器也吭哧吭哧按这个标准去实现了很多这些新加的标签和属性,本来前端程序员要写一堆代码去实现的效果,现在浏览器都给你实现好了,只要写两三行,调用一下浏览器给你实现的部分就能搞定,简单愉快,所以很多人都在热情地推广这个标准~(当然新标准也不可能是完美的,总会有一些问题,怕跑题这里按下不表~)&br&&br&至于 XHTML,就是 HTML 的近亲 XML 和 HTML 自己的杂交品种,对语法要求比较严格,并且为了兼容 XML,在语法上与 HTML 有一些不同~&br&&br&&b&JavaScript 与浏览器脚本&/b&&br&有了表示内容和语义的 HTML,规定样式的 CSS,得到的是一个静态的页面,没什么动画(其实用 CSS 还是可以有一些动画的,不过这个跑题了),按 F5 才会刷新数据,都 21世纪了,这么呆板单调的网页怎么能展现我大智人种族的创造性口胡!于是我们有了 Javascript(JS) 来给页面添加一些动态的效果,比如知乎问题的标签,鼠标移上去会弹出一个小窗口,这个就是 JS 实现的效果啦。&br&&br&&img data-rawheight=&274& data-rawwidth=&532& src=&/dcb4e911b7ee1e363213_b.jpg& class=&origin_image zh-lightbox-thumb& width=&532& data-original=&/dcb4e911b7ee1e363213_r.jpg&&&br&浏览器都会帮你实现一些 JS 可以用的工具(函数,对象什么的),你只要写一些 JS 的代码,保存在 xxx.js 里,在 html 文件中用
&script& 关联进来就可以用了,像上图这个效果应该就包括了 &br&&ol&&li&鼠标悬停到标签上时创建一个新的 &div& 小窗口 &br&&/li&&li& 用 JS
向知乎服务器发送一个请求,得到这个小窗口应该显示的数据,放在这个小窗口里(这就是所谓的AJAX,不用刷新就能与服务器进行交互,更新页面的一小部分~)&/li&&/ol&浏览器拿到这样的代码,就会解析并实现出相应的效果,楼主问的浏览器脚本,指的就是这样子的代码。其实用来写浏览器脚本的,也不是非得JavaScript 不可,当年还为到底用什么语言写这种代码有过一段战火纷飞的时期,但现在尘埃落定,各大浏览器都默认了:请用
JS 写这些动态效果的代码给我解析~&br&&br&以上就是前端部分的内容,下面简述一下后端的东西吧& &&br&&br&&b&Web Server 和 Web Services&/b&&br&浏览器给服务器发一个请求,服务器不是一看就知道怎么响应的。首先这些请求和响应要有一个通用的写法,也就是要有一个协议,常用的是 HTTP 协议。&br&像最前面的图,服务器的响应写了一个状态码 200 OK ,是 HTTP 协议里约定俗成的一个东西,服务器写 200 OK 在响应里,表示“你请求的这个东西我有”,如果是404 Not Found,就是“你请求的这个东西我这里没有”。&br&HTTP 响应里还包括很多东西,比如 Content-type 表示服务器发过来的文件类型是什么(文本?动画?图片?音频?),这样发过去了人家浏览器好知道怎么展示给用户看。人家服务器怎么知道按协议要写什么东西进去呢,这就是 Web Server 干活的时候了。&br&&br&形象化一下HTTP响应,大概就长这样:&br&&img data-rawheight=&351& data-rawwidth=&284& src=&/73fc01d295c7e015c1d80_b.jpg& class=&content_image& width=&284&&&br&再上个锤子,浏览器和服务器之间请求响应的过程大致是长这样的,右下角的那些东西就是由 Web Server 生成的(服务器脚本可以做一些改动,但这些一般是 Web Server 的份内活):&br&&img data-rawheight=&349& data-rawwidth=&1364& src=&/2fdad81d11618addfbdf65_b.jpg& class=&origin_image zh-lightbox-thumb& width=&1364& data-original=&/2fdad81d11618addfbdf65_r.jpg&&&br&&br&再比如说很多时候你访问一个网站,浏览器里输的地址并没有写明你请求的文件,比如这个问题的地址是:&div class=&highlight&&&pre&&code class=&language-text&&/question/
&/code&&/pre&&/div&但知乎的服务器其实返回了一个html给你,服务器怎么知道这个地址对应要返回什么样的 html 代码给你的?也是 Web Server 干的活。&br&&br&除了浏览器输地址敲回车这种赤裸裸的访问,客户端与服务器的交互还有很多种,比如:&br&&ul&&li&前面提到的用 JS 完成的 AJAX,有点像浏览器和服务器之间的悄悄话~&/li&&/ul&还有其他应用软件与服务器的交互,比如:&br&&ul&&li&微信、QQ 与腾讯的服务器的交互&/li&&li&网游客户端与网游公司服务器的交互&/li&&li&搜索引擎用来搜集网页信息的程序(爬虫)与各种各样的网站服务器的交互&br&&/li&&li&只要你知道用什么地址访问、怎样访问人家的服务器,并且有相应权限,你也可以自己写一些程序去和他们的服务器交互(比如用&a class=& wrap external& href=&///?target=http%3A///wiki/%25E5%25BE%25AE%25E5%258D%259AAPI& target=&_blank& rel=&nofollow noreferrer&&微博API - 新浪微博API&i class=&icon-external&&&/i&&/a&获取微博,开发第三方应用或者做数据分析)。&/li&&/ul&从这些栗子里可以看出,客户端与服务器的交互的主体、客体、载体是五花八门的:&br&&ul&&li&服务器可以是大型机也可以是个人电脑,只要能跑相应的程序就行&/li&&li&客户端像前面举的栗子里一样,可以是各种软件,而且这些软件不一定运行在个人电脑上,也可以是手机、平板、智能穿戴设备等等&/li&&li&有时候不是传生成好的 HTML 或者其他服务器上已经有的文件,而是传输经过一定逻辑处理后生成的字符串或者其他各种封装好的数据&/li&&/ul&像前面提到的 HTML 需要有一定标准一样,为了防止混乱和鸡同鸭讲,我们又需要先对这些机器需要怎么交互达成一定共识,再让它们进行交流。人与人之间通信,需要先有一种大家都认识的写法(比如简体字/繁体字)和一种彼此都懂的语言(比如普通话/广东话)。要让这些形形色色的机器能够通过网络进行交互,我们就需要指明一种协议(比如 HTTP/HTTPS)和一种数据封装格式(比如 HTML/XML),Web Server 提供的 Web Service,指的就是这种协议+格式的交流体系。不过 Web Service 的生态系统和 HTML 的标准不一样,用户可以选择的协议和数据封装格式更多,普通的网站访问用的 HTTP + HTML 只是其中一种,一些封闭系统内的交流还可以自己定义一个协议和格式来用(比如 QQ)。&br&&br&Web Service 传输的数据再经由本地客户端(浏览器、QQ/微信,网游客户端等)的分析渲染,就能够以普通人能够理解的形式展现出来。此外还有一些 Web Service 并不是为普通用户设计的,像前面提到的微博API,是用来给程序猿进行二次开发的~ &br&&br&除了提供 Web Service, Web Server 还会兼顾很多功能,包括提供缓存,平衡负载,这样在访问量比较大的时候能有有条不紊地接客。常见的现成的 Web Server 有开源的 Apache、Nginx和微软的IIS,你也可以用一些工具(比如 Node.js )自己定制一个。因为 Web Server 需要比较好的性能,所以投产时用的 Web Server 通常是C/C++/Java写的,但是其实很多语言都可以写,而且配合上语言底层的优化和好的模型,其他语言写的 Web Server也可以有不错的表现。&br&&br&&b&PHP ,服务器脚本,Web Framework&/b&&br&开头那张图里服务器接到请求之后可以给访客发送对应的文件,但21世纪的服务器怎么可能只会“接请求-发文件”这么弱智的一招呢,人家还可以处理你上传来的文件的!还可以接受你发过来的各种请求,去操作服务器本地的文件or数据库的!要干这些事,自然服务器那边也少不了要有代码了,这些代码就是服务器脚本。前面说的 Web Service 传输的数据,主要也是由服务器脚本生成,再交由 Web Server ,按照某种协议套好整个响应的格式,返回给客户端的。&br&&br&同一个网址,每个人看到的页面不一定是一样的,比如知乎首页的网址都是&br&&div class=&highlight&&&pre&&code class=&language-text&&/
&/code&&/pre&&/div&但是没登陆和登陆之后看到的东西不一样,登陆之后每个人看到的导航栏的用户信息,关注的动态,都不一样。服务器脚本可以对这些不同的状态,生成不同的页面,交给 Web Server 返回给浏览器。&br&知乎的主页给大家看到的 html 整体来说是差不多的,都有导航栏,左边是关注的动态,右边是广告和边栏,每一块的整体构造大同小异,只是一些地方内容有所区别。服务器脚本就是利用已知的数据,在这些因人而异的地方填入相应的内容,生成给每个人看的页面。&br&比如我的主页,导航栏右边的头像和名字跟别人看到的不一样,就是因为这块地方有一个放图片的&img&标签和一个写名字的&span&标签,服务器脚本在查询本地的数据之后给我返回的页面里&img&的标签填了我头像的图片链接,&span&标签里填了我的名字,给别人的页面就填其他链接、其他名字,这样每个人看到的页面就不一样了。&br&&img data-rawheight=&56& data-rawwidth=&597& src=&/500c9bdd6bf249eec5b084_b.jpg& class=&origin_image zh-lightbox-thumb& width=&597& data-original=&/500c9bdd6bf249eec5b084_r.jpg&&&br&&img data-rawheight=&93& data-rawwidth=&559& src=&/11f27dccc90da76a1ac3c2_b.jpg& class=&origin_image zh-lightbox-thumb& width=&559& data-original=&/11f27dccc90da76a1ac3c2_r.jpg&&&br&PHP 就是一种常见的用来写服务器脚本的语言,其实只要是能拿来写大家传输数据的通用接口(CGI)的语言都可以用来写服务器脚本(也就是说几乎所有编程语言都可以写 = =b),只是因为现成工具的丰富程度和专攻程度不一样,所以有一些语言在写服务器端脚本的时候会比较热门。&br&&br&为了方便,我们在写服务器脚本的时候,通常还会用个同语言写的 Web Framework 来处理各种细节,防御一些常见的攻击,提供跨站认证(比如用已有的微博账号注册其他网站)的接口,利用cookie处理登陆状态和用户设置,生成网页模版之类的。如果你用 C# 或者 Visual Basic 写服务器脚本,就可以用 &a href=&///?target=http%3A//ASP.NET& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&ASP.NET&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a& 这个框架实现这些功能,帮你省点麻烦。不过现在不少人是反过来为了一个好用的 Web Framework 去选择它对应的服务器脚本语言的。&br&&br&&b&一个普通网站访问的过程&/b&&br&简单概括一下,对于我们普通的网站访问,涉及到的技术就是:&br&&ol&&li&用户操作浏览器访问,浏览器向服务器发出一个 HTTP 请求;&/li&&li&服务器接收到 HTTP 请求,Web Server 进行相应的初步处理,使用服务器脚本生成页面;&/li&&li&服务器脚本(利用Web Framework)调用本地和客户端传来的数据,生成页面;&/li&&li&Web Server 将生成的页面作为 HTTP 响应的 body,根据不同的处理结果生成 HTTP header,发回给客户端;&/li&&li&客户端(浏览器)接收到 HTTP 响应,通常第一个请求得到的 HTTP 响应的 body 里是 HTML 代码,于是对 HTML 代码开始解析;&/li&&li&解析过程中遇到引用的服务器上的资源(额外的 CSS、JS代码,图片、音视频,附件等),再向 Web Server 发送请求,Web Server 找到对应的文件,发送回来;&/li&&li&浏览器解析 HTML 包含的内容,用得到的 CSS 代码进行外观上的进一步渲染,JS 代码也可能会对外观进行一定的处理;&/li&&li&用户与页面交互(点击,悬停等等)时,JS 代码对此作出一定的反应,添加特效与动画;&/li&&li&交互的过程中可能需要向服务器索取或提交额外的数据(局部的刷新,类似微博的新消息通知),一般不是跳转就是通过 JS 代码(响应某个动作或者定时)向 Web Server 发送请求,Web Server 再用服务器脚本进行处理(生成资源or写入数据之类的),把资源返回给客户端,客户端用得到的资源来实现动态效果或其他改变。&/li&&/ol&注意这只是小网站里比较常见的模型,大网站为了解决规模问题还会有很多处理,每个环节都会有一些细微的差异,中间还会使用各种各样的工具减轻服务器的压力,提高效率,方便日常维护~&br&&br&&b&延伸阅读&/b& —— &b&那些看花眼的名词&/b&&br&为了方便调试,很多 Web Framework 会自带一个简单的 Web Server,或者有些 Web Server 会自带一个简单的 Web
Framework ,实际部署到服务器上开放使用的时候为了性能或者安全等多方面的考虑,可以把内置的 Web Server 换成其他的,比如
Apache 或者 Nginx (举个栗子,知乎用的是 Tornado 做 Framework,Server 换成了 Nginx,见&a class=&internal& href=&/question/&&知乎使用了哪些框架和开源库?&/a&)。如果是开源的东西,还可以在遵守开源协议的前提下自己改一下再用~&br&&br&因为后端不像前端已经有 HTML + CSS + JS 这样的既定事实标准,服务器脚本与 Web Framework
的选择很多,所以新手会听到很多眼花缭乱的技术名词的地方多在这里~
举一些栗子,早年常见的服务器端语言有:&br&&ul&&li&开源的 PHP&/li&&li&Sun 公司的 JSP 中使用的 Java&/li&&li&微软的 ASP 中使用的 VBScript&/li&&/ul&现在在这方面的应用热起来的语言有&br&&ul&&li& Python,对应常见的 Framework 包括知乎和Quora有用到的 Tornado(其实是自带 Framework 的 Web Server),社区很成熟的 Django (用户包括 Instagram、Pinterest)等&/li&&li&Ruby,一般都用 Rails 这个 Framework,用户包括 Github、早期的 Twitter 等&br&&/li&&li&逆天的 JavaScript,有了 Node.js 这个平台,Web Server、服务器脚本和浏览器脚本全都可以用
JavaScript 来写……Node.js上最常用的 Framework是Express&br&&/li&&li&微软家的则跟着 &a href=&///?target=http%3A//ASP.NET& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&ASP.NET&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a& 转移到了C# 或者 Visual Basic&/li&&li&Erlang,擅长大规模的并发,不少游戏公司拿来写服务器,靠几十个工程师支撑几亿用户的WhatsApp也是用的这个~&/li&&/ul&几种常见的架构包括:&br&&ul&&li&LAMP = Linux + Apache + MySQL + PHP(P还可能是Python或Perl。有时候L会改成W=Windows。),也就是服务器上的操作系统是 Linux,Web Server 用 Apache,数据库用 MySQL,服务器脚本用 PHP,这些都是开源技术,网站起步时用起来的成本会比较低,所以是普通网站里非常常见的架构(虽然对于发展得很大的网站会遇到很多瓶颈),Facebook就是这种,淘宝也曾经是。&/li&&li&J2EE,Java 世界的架构,通常是企业用的(银行、大型公司,.etc),比较常见地还会搭配一种 UNIX 做操作系统,Apache 做 Web Server,Tomcat 转换 JSP 到 Java 给服务器程序用(其实它也自带 Web Server),Oracle 数据库等等。不一定拿来建站,常常用来提供企业里的各种需要用到网络的业务。我们学校教务系统就是用J2EE做的=。= 淘宝现在也是从LAMP转型到了这个。&br&&/li&&li&&a href=&///?target=http%3A//ASP.NET& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&ASP.NET&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&,微软家的架构,通常会搭配 Windows Server 操作系统,SQL Server 数据库,IIS 做 Web Server。StackOverflow和京东(曾经)就是这个架构。&/li&&li&神奇的MEAN架构,MongoDB做数据库,Express做 Web Framework,Angular 做前端的 JavaScript 框架,Node.js 用于编写 Web Server。神奇之处在于这几个东西的语言都是 JavaScript (MongoDB的实现不是,但与外界沟通用的语言是)。因为是比较新的架构,还有待时间的考验,不过被很多人(尤其是靠 JavaScript 吃饭的前端程序猿们)热切关注。&/li&&li&一般来说重点不在技术而且在乎成本的新网站比较喜欢用 LAMP,重视安全稳定和速度的企业和机构喜欢 J2EE,想省事的网站喜欢 &a href=&///?target=http%3A//ASP.NET& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&ASP.NET&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&,比较 Geek 的网站和创业公司喜欢折腾各种 Python、Ruby、Node.js世界的东西,Google 这样现成的技术都解决不了需求的超大型网站就自己折腾解决方案。&br&&/li&&/ul&虽然可以用的语言和所属体系五花八门,其实服务器端程序要做的事情本质上都差不多的,就好比自然世界中要表达“吃过了没”这句话的意思,你可以用各种各样的语言在各种各样的场景里表达出来~
一个学期前我也和楼主差不多不知道这些都是啥,一个学期之后差不多都弄懂了,来讲讲自己的理解吧 & & 因为接触的时间不是很长,有错误的地方欢迎指正~ 首先要知道网站访问大概是什么个过程: 假设你在浏览器地址栏输入这个问题的地址 /…
&p&【本人性格不好,被惹到了必然句句带脏字,所以评论中如果有不开眼的,请慎重。另外,这篇回答从头到尾都是我自己的个人偏见,绝对不客观,也绝对不会为本答案负责。所以,有自己正常思维的请不要再看下去了。最后,这篇文章在最后会指向硬广,来佐证文中实例,因此,不喜欢有广告的可以直接举报了,顺手推荐一下修真院的专栏,各种IT行业的真实小故事。&a href=&/jnshu& class=&internal&&IT修真院 - 知乎专栏&/a&】&/p&&p&&br&&/p&&p&&br&&/p&&p&Live已开通~想听Live的可以点这里&/p&&p&&a href=&/lives/107520& class=&internal&&知乎 Live - 全新的实时问答&/a&&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&互联网行业的薪资水准相对较高,刚入行一个月,半年,或者一年超过其他行业薪资很正常。
那么,互联网行业究竟有哪些职位呢,又分别适合哪些传统行业转型?&/p&&p&1.产品
5.后端(Java/php/python)
6.DBA(mysql/oracle)
7.运维(OP)
8.测试(QA)
9.算法(分类/聚类/关系抽取/实体识别)
10.搜索(Lucene/Solr/elasticSearch)
11.大数据工程师(Hadoop)
12.Android
14.运营&/p&&p&&br&&/p&&p&&br&&/p&&p&然后等下我会分别介绍每个职业的工作内容,发展前景,入门门槛,适合哪些职业转行,成长周期,薪水范围等。&/p&&p&* 薪水都以北京为例
* 运营和市场都有更细致的划分,然而我并不太了解了
* 其他的偏门的&/p&&p&&br&&/p&&p&一.产品
========我是求某个姑娘快原谅我的的分割线=============&/p&&p&&br&&/p&&p&&br&&/p&&p&1 工作内容:了解用户需求,做竞品调研,画产品原型,写产品文档,讲解产品需求,测试产品Bug,收集用户反馈,苦练金刚罩以防止程序员拿刀砍。&/p&&p&2 需要技能:PPT,Word, Axure,XP,MVP,行业知识,沟通&/p&&p&&br&&/p&&p&
PPT是最容易被忽视的技能,很多时候很多人都把产品经理=画原型,如果你这么想,再做五年的产品经理也是一个画原型的。我在修真院的时候,给修真院的弟子讲过很多次,产品经理更多的是理解一个行业,熟悉这个行业的用户,知道这个行业有哪些没有满足的需求,寻找解决方案,对比行业,找到自己的切入点,最终落地成:哪些功能要做,哪些功能不要做。&/p&&p&
这些都是要在PPT里写清楚的。所以,PPT并不是简简单单的一个工具,而且是用这个工具把你对这个行业的了解和分析和解决方案展示出来。&/p&&p&
XP是敏捷开发,不会敏捷开发的产品经理很难说会是一个好的产品经理(我很偏激,所以接受不了可以直接无视)。敏捷开发对于产品经理来讲,是逼着产品经理去用Story的方式去思考,去考虑自己每一个Story的价值是什么,所有的Story优先级是什么。&/p&&p&
MVP是最小化验证产品的缩写,这在精益创业里是很重要的概念。也就是说,你臆想了一个产品,他有了什么样的功能,但是!请注意,我们认为所有没有经过用户验证的功能都是在扯淡。所以,你其实是设计了一个扯淡的功能然后交给一堆人去开发,再交给人去运营,直到一个月或者是三个月以后才能拿到反馈结果。我们等不了,所以你必须在程序员开始启动之前,先想办法验证自己要解决的问题是存在的,要解决的需要是用户确实需要的---你有无数的办法可以这么做,真的。好比是,我做IT修真院,并没有先直接做线上的网站,而是直接去贴吧发贴,用QQ群,在论坛直接做,去观察这些弟子的行为,然后去修正自己的产品设计,我发现了他们需要日报,需要点评,需要有班级的概念,需要有学号,需要有首席大弟子等等等等这些。然后我会把这些需要分析整理之后加入到网站的设计里去,这就是MVP的价值--当年穷疯了每个决策都慎重的时候,就会特别喜欢这种方式,土豪除外,只会浪费时间而已。&/p&&p&Word是产品需求文档,我自己不太喜欢Word文档,更喜欢XP的Story,不过会一点也没有关系。&/p&&p&行业知识是产品经理最重要最重要的技能,没有之一,你可以不懂PPT,不会Axure,不会Word,也不会什么XP和MVP,但是绝对不能不懂一个行业。某种程度上来讲,产品经理拥有的其实是快速了解一个行业的能力。现在的互联网已经和以前的不一样了。以前的产品经理懂点儿交互,知道什么是表单,知道点IT术语就能混日子了,现在必须要懂一个行业,地产,金融,汽车,教育,餐饮,医疗等等各种行业,你都需要了解这个行业的模式,如果你不懂,你就是一个画原型的人。&/p&&p&沟通也是产品经理的必备技能,出门不带沟通技能,一定会被程序员砍。一方面是要跟用户沟通,一方面是要跟程序员沟通(这是世界上最难沟通的物种,没有之一),一方面要跟领导沟通(其实就是想办法拍领导马屁然后哄着他们听自己的话)。&/p&&p&&br&&/p&&p&&br&&/p&&p&3 发展前景&/p&&p&不用说,产品经理绝对是一个炙手可热的职业,而且,TNND的几乎是零门槛,这表示,是个人都可以说,我想成为一个产品经理。
然而,好的产品经理很多么?并不多,所以,好像围棋一样的,入门容易,学精难。&/p&&p&而且,似乎并没有一个系统的教程(这真是一个很难让人相信的事情啊,这么一种职业,没有大学的知识培养,甚至都很少有标准化的职业化培训,全靠业界手把手培养和自发的交流,就能够拿着无数DS程序员根本就想像不到的薪水--产品经理真的跟DS有点儿不搭边的,当然,我大修真还是在努力做产品人员的培养的)。&/p&&p&产品经理的发展前景是很赞的,只是越来越体系化了,而且很容易出人头地。&/p&&p&一般来说:&/p&&p&0~6个月:4K~8K
6~12个月:6K~12K
1年~3年:10K~24K
3年~5年:20K~40K
:30K~&/p&&p&三个月到半年左右就可以算是迈入这个行业啦,如果遇到P2P这种对于专业属性要求比较高的,随便在一家公司混点经验,跳到另外一家新的公司就是一个产品总监:因为并没有其他人又了解金融又了解互联网。&/p&&p&&br&&/p&&p&&br&&/p&&p&成长路径:&/p&&p&产品助理-产品经理-高级产品经理-产品总监-CEO&/p&&p&&br&&/p&&p&大致这个样子。&/p&&p&&br&&/p&&p&&br&&/p&&p&4.入门门槛&/p&&p&无(甚至你可以不认识字)&/p&&p&&br&&/p&&p&5.哪些行业适合做产品经理&/p&&p&IT界:程序员,UI,QA,运营,市场
其他界:无限制&/p&&p&PS:想了想,还真是没见过身边有做运维的转产品经理的。&/p&&p&&br&&/p&&p&6.职业限制&/p&&p&很多产品经理都很怕跟程序员沟通。而且经常会苦恼,觉得自己设计的功能,程序员做不了,做不出来,做的太慢,做的太差。惟独不会觉得自己设计的太烂。&/p&&p&所以,很多产品经理都会认为不同技术是自己的一个弱项,我曾经整理过一个产品经理需要了解的技术术语,有需要直接看楼下的广告。&/p&&p&&br&&/p&&p&7.去哪里学,怎么成长&/p&&p&还用问,自然是跟着大修真院最好。
如果IT修真院你看不上,可以去一些有产品经理培训的地方去,虽然我肯定觉得自家的好。
如果这些产品经理培训的差不多了,有了一个基本概念了,找个产品助理或者是实习的职位去吧。&/p&&p&会画点儿原型图,有个线上的作品,就能找工作(虽然我很不喜欢这样的产品经理)。
然后有机会就去大公司了解一下各个部门是如何扯皮的,镀镀金,Over了。&/p&&p&&br&&/p&&p&二
=============我是累死了的分割线================================
马丹,首先写软文,又要写成干货,又要带广告真心不是一件容易的事儿。我在之前&a href=&/question//answer/?group_id=064576WEB& class=&internal&&如何在一个月之内从零基础成为初级CSS前端开发工程师? - xdyl 的回答&/a& 的贴子中,写了整整一个星期才写出来。我写小说都是分分钟好么。&/p&&p&可是没办法。一个是确实需要跟大家介绍一下每个职业的比较和特点,一个是也确实需要告诉更多的人,写代码真的不是看视频看会的。&/p&&p&好了我接着说。&/p&&p&1 工作内容:收到产品原型,给原型上色,偶尔会自作主张调整下原型的位置,出不同的风格给老板和客户选,然后听他们的意见给出一个自己极不喜欢的风格,最好给Android,IOS或者是CSS做好标注,还有的需要直接帮他们切好图,最后要练出来象素眼,看看这些不靠谱的程序员们有没有上错色或者是有偏差。&/p&&p&&br&&/p&&p&2 需要技能:PS,Illustrator,Sketch,耐性,找素材&/p&&p&PS是最基础的技能。各种图层通道蒙版神马的细节的东西就不用说了,很多时候很多公司都愿意出所谓的高保真图。什么叫高保真图,简单说就是不折磨产品折磨UI的破玩意儿。就是把所有的图都画出来然后对着UI图来改,偶尔还会要求做出来网页能够点,对于这点我不想再吐槽了,总之,PS是少不了的技能,基本上很多时候其他人都会以为你只需要用PS就能搞定一切。&/p&&p&然而PS始终只是一个工具而已,所以在这里,PS代表的更多的是一种方案的选择。比如什么行业用什么配色,怎么样对齐,怎么突出重点,PC下应该是多宽,手机应该是多宽,等等等等。&/p&&p&ILLustrator最近似乎是用的少了,我不太确定,但是做矢量图以前是就是靠他的。什么是位图什么是矢量图,自行百度就好。以及还有CoreDraw,不知道现在是否常用。然而,慢慢的似乎Sketch流行起来了。&/p&&p&SKetch和Illustrator和CoreDraw之间的差别我说不上来,我记得我的UI小姑娘跟我讲这个工具很好用。&/p&&p&&br&&/p&&p&耐性必须是UI必备的技能,因为有的时候,老板跟你较真起来,一个星期不停的反复修改一个首页是很正常的事儿。可能颜色要从红换成黑再换成绿。所以你必须要有耐性,除非你做的设计没人管,你说了算。而且,UI这东西,是个人都有自己的审美观。更不用说之前朋友圈的测试,人和人看到的颜色真心不一样。
所以你必须要有耐性,这是很重要的。&/p&&p&找素材的能力也是必不可少的,你手上必须要备几个常用的素材网站,大部分的人都是在别人的素材基础上改来改去。&/p&&p&&br&&/p&&p&说到这里,其实忍不住想加上一句。UI设计师最重要的能力并非是以上几种,而在于是理解产品经理的需求--前提条件是产品经理很明确的说出来了而且讲清楚了需求。&/p&&p&比如说,一个页面的重要是什么?最想引人注目的内容是什么?应该配什么样的图?加上什么样的元素能让网站的风格更醒目一些呢?&/p&&p&这里大部分其实都是原型设计师要做的事儿,我一直有一个观点,就是UI其实最应该做原型,只有这样,才能让产品经理着重去考虑功能点,让设计完美传达产品的功能点。
然而原型设计师这个角色慢慢的被消融了,已经变成了产品经理了。所以大部分产品经理都以为自己是画原型的,然后大部分UI都会自作主张改掉原型,因为没有美感。所以通常你会发现美感说有了,也有那么一点儿,可是总觉得会有一些不对。&/p&&p&我对他们的要求就是,先别管美不美,你先告诉我这张页面每个模块想要重点表达的内容是什么,能不能让人分清主次。做到了这一点 ,再去考虑美感。&/p&&p&&br&&/p&&p&&br&&/p&&p&3 发展前景&/p&&p&UI的发展前景是很赞的,在两到三年前,甚至都有人推动让UI来代替产品经理来驱动。某种程度上来说,UI其实最好的发展方向就是UE,也就是交互,然后就是所谓的用户体验优化师--坦白的说我并未觉得有多少公司会真正的设置这个职位,因为太泛了。但是对于现在火热的O2O来说,无论是线上还是线下,都希望提供一个极致的用户体验,所以我说不好。&/p&&p&但是大部分的UI都应该去朝着交互的方向发展,而不是去切页面。。。&/p&&p&&br&&/p&&p&UI薪水其实跟产品经理在前期差不太多,中期差点。后期相差比较远,一般来说:&/p&&p&0~6个月:4K~8K
6~12个月:6K~12K
1年~3年:10K~20K
3年~5年:16K~30K
5年~ :24K~&/p&&p&UI的成长时间大概是在两年左右,基本上PC,IOS,Android,H5全部都做过一些项目,设计过几个Logo,做过一些专题和Banner图,才算是比较完美报。&/p&&p&然而想要做的更好一些就有点困难了,除非你的遇到了一家公司,对用户体验要求极致,然而那个时候,并不仅仅是UI和UE相关的内容了。&/p&&p&&br&&/p&&p&&br&&/p&&p&成长路径:&/p&&p&实习UI-初级U-中级UI-高级UI(UE)&/p&&p&&br&&/p&&p&大致这个样子。&/p&&p&&br&&/p&&p&&br&&/p&&p&4.入门门槛&/p&&p&UI对入门门槛要求还算是比较高的。首先你得有一台Mac。。大部分的情况下你都需要Mac。
然后你要懂之前提到的常用软件,UI的交互规范,配色等等等。&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&5.哪些行业适合做UI&/p&&p&IT界:无
其他界:传统做VI的,就是平面设计的会转一些。跟着基本上就是小鲜肉了,刚毕业就从事这个行业的会比较多一些。还有一些学美术的,会手绘的。&/p&&p&PS:想了想,从没怎么见过程序员转行做UI的。只见过UI人员会写代码的。&/p&&p&&br&&/p&&p&6.职业限制&/p&&p&UI这个职业的限制在某种程度上就是不太清楚自己应该朝着UE发展。所以时间长了工作就会变得单调,两年或者是三年之后原地踏步走没怎么有进步的人很多。像Metro(扁平化)或者是material design这样的风格一不熟悉二不了解三不想尝试的人还是挺多的。&/p&&p&很多人做了很久其实还是分不清产品经理想要在一个页面上表达什么--这有时候真的并不是UI的错。&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&7.去哪里学,怎么成长&/p&&p&对于初学者来说,找个培训学校还真是比较好的选择。
我大修真院暂时并未打算去培养UI人员,主要是没有时间也没有精力去做一个系统的教程,而且我们自己在UI上也在不断的摸索。
一般来说,最好的成长路线就是不断的去参考别人的例子,然后再多动动脑子,多看一些UI规范。&/p&&p&先想清楚自己要表达什么,然后想想用什么表达,再去查查怎么样能做到自己期望的结果。&/p&&p&&br&&/p&&p&&br&&/p&&p&三 CSS
=============我是再也不要写软文的分割线================================&/p&&p&没办法。自己拉的屎不能拉个开头就提裤子走。。。说起来这也是知乎挺好玩的地方,如果不是知乎允许这种自问自答的方式,只要你说的是真正有价值的内容,并不拒绝你有做广告的嫌疑,恐怕我也不会写这些东西,你们也看不到这个贴子。&/p&&p&以下的内容是我从UI那边粘过来的,还没改呢,等我去沙发上喘口气歇会再写。中午吃的麻辣香锅有点咸。&/p&&p&&br&&/p&&p&&br&&/p&&p&1 工作内容:产品设计好原型,UI做出来了效果图,剩下的就是CSS工程师用代码把静态文件写出来的。&/p&&p&所以CSS工程师和OP一样,都是可以在不用了解业务需求的情况下就能完成工作的唯一两个特殊职业。
一般来说,CSS工程师并不存在,写CSS的人多少要写一些JS代码,然而确实也会有一些妹子真的就是学不会JS,有一些汉子真的就是写不出来JS,所以我还是把他们两个拆开了。&/p&&p&CSS工程师要考虑更多的就是兼容性,简单说,IE内核和非IE内核(WEBKit),IE10以下和其他。我是强烈建议新人不要去学IE10以下的Hack的写法的,让IE10以下的,不支持Html5的都去死吧,表再来跟我说用户还在用IE678了。&/p&&p&当页面切完以后,另一个工作就是去帮助菜鸟后端和某些JSER把页面又重新套错了,什么是套页面,可以看这个 &a href=&/people/ptteng/answers& class=&internal&&/question//answer/&/a& 。&/p&&p&&br&&/p&&p&&br&&/p&&p&2 需要技能:
环境【IDE(WEBStorm,Sublime,EditPlus),源码管理(SVN/Git) ,WEB服务器(nginx)】
基础【PS,域名,Html,Html5,CSS,CSS3】
扩展【自适应,响应式,Bootstrap,Less,Flex】&/p&&p&&br&&/p&&p&无论是哪一种程序员,学会搭好的自己的环境都是第一步。选好IDE,选好源码管理工具,学会每天把自己做好的Html文件发布到服务器上可以直接访问。这都是最基础的技能,记着这些东西并不难,你只是需要不断的去练习去熟悉它而已。所以从第一开始就去适应它。&/p&&p&&br&&/p&&p&会用PS是因为一是要切图,二是要制作雪碧图。这儿简单说一下,很多人都会说,切图这个活倒底分给UI还是分给前端。我一直都觉得这是CSS必须要做的,因为只有CSSER才会知道怎么切合适。然而大部分Android和IOS人员都不具备切图的能力,这也是我一直很无语的工作方式,反正,我要求我的Team,无论是Android还是IOS都必须要会自己切图。&/p&&p&另外再解释一下所谓切图和切页面的概念。切图指的是把需要用到的小图标了神马的切出来。切页面一般指的是就是把整个效果图做成Html网页。两种叫法我都觉得Low的不行,然而很多人都喜欢这么叫,而且会混到一起,时间长了,也就习惯了。&/p&&p&&br&&/p&&p&自适应和响应式是前端人员必须要懂的概念,也是必须要能做到的。毕竟现在是各种跨屏时代,以及各种分辨率都层出不穷,H5又是眼下最火红的职业和技能。&/p&&p&曾经有过工作半年或者是一年都不太懂什么是自适应和响应式的,这并不好。&/p&&p&Bootstrap,Less和Flex也是CSS工程师必须要会的。学会Bootstrap更重要的还是要去学习它的思想,这是很重要的一点,它帮助你开阔视野,你才会明白,靠,原来可以这么写。&/p&&p&Less也是一样,在推荐less和Sass之前我犹豫了很久,然而看到Sass要Ruby环境就有点不喜欢了,虽然Bootstrap已经转向Sass,但是在一般的项目中,Less也够用了。所以还是果断的推荐Less了。&/p&&p&Flex是一个好东西,我了解的还不多,在真实的项目中还未有使用过,不过挺看好的。
简单说呢,前端工程师需要的大多数就是技术相关的技能,倒不需要太多的沟通啊和耐性啊神马的技巧。&/p&&p&哦哦,想起来了,CSS的知识比较零散,要死记的东西其实是比较多的。&/p&&p&&br&&/p&&p&&br&&/p&&p&3 发展前景&/p&&p&CSS的发展前景最近几年好的不行。在Android和IOS大行其道的时候,一大部分人都转去做了这两个行业,然而突然之间,因为微信的缘故加上JS的魅力,H5突然又火爆起来,所以呢,CSS整体来说还是一个挺靠谱的职业。最关键的是,CSS入门最快的职业啊,几乎零门槛,只是转JS还是挺不容易的。&/p&&p&CSS薪水如果纯粹只是做CSS的话,12K到15K基本上就是封顶了。。。所以:&/p&&p&0~3个月:4K~6K
3~12个月:5K~8K
12个月以上~:8K~15K&/p&&p&&br&&/p&&p&CSS的成长是非常快的。修真院的线下弟子都是一个月左右就可以独立做项目,可以进入IT修真界闯荡江湖了。正常情况下,3个月左右是没问题的。&/p&&p&我的要求比较高,所以所谓的独立做项目就一定是独立做项目,不用怀疑这一点。包括自适应,响应式和Bootstrap。&/p&&p&所以。想要拿高薪,CSS都必须要学JS,没有其他的途径。&/p&&p&&br&&/p&&p&&br&&/p&&p&成长路径:&/p&&p&CSS工程师-初级JS工程师-JS工程师-前端架构师-前端Leader(IOS,Android和JS通吃)&/p&&p&&br&&/p&&p&不要相信NodeJS,那只是玩玩而已。不要想从前端转后端,太难了,后端和前端是两个不同的概念,特别是对基础知识要求的特别高。&/p&&p&CSS和JS最好的方式就是IOS和Android通吃,精通一种,然后其他的能做项目,并不需要考虑其他的选择,推荐再学点其他脚本语言,首推Python,永远不要去学PHP,表问我为啥,个人好恶。
你一定要问,等我心情不好的时候再说。&/p&&p&&br&&/p&&p&&br&&/p&&p&4.入门门槛&/p&&p&零门槛!你相信咩,一个程序员的职业居然可以零门槛进入。。。
好吧,大多数人其实并不把CSSER称为程序员,不过,你至少学会了CSS,就能在IT修真界这个神奇的元世界里生存,就有了进军其他职业的可能性。&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&5.哪些行业适合做CSS&/p&&p&IT界:All
其他界:All&/p&&p&PS:正常人都可以学的会啦(马丹我就不是正常人)&/p&&p&&br&&/p&&p&6.职业限制&/p&&p&CSS的职业限制有三个,一个就是不去学自适应和响应式,一个是不去学框架,另一个就是学不会JS。
这三点都是很重要的突破。然后这个职业呢,怎么讲,在一家公司里可替代的程度比较高,并不算特别重要,做不了核心岗,也不存在什么代码交接。你就算代码写的再烂,也最多就是花一个月时间重写。。。&/p&&p&所以如果你不想做JS,你就真的真的发展受限制了,一定要记着,CSS只是你的一个跳板。
另外,因为零门槛,所以你其实还是有很多计算机相关的知识要补的,这是一定的,没什么可商量的。&/p&&p&只是做前端还好,如果想做后端,只是不想花那么长的时间才进入这个行业,就必须要从CSS做起,跟着用自己的其他时间恶补计算机基础了。&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&7.去哪里学,怎么成长&/p&&p&之前说我的贴子是广告的,你们错了。
看到这里,这才是真正的广告。&/p&&p&要说去哪里学CSS,绝对是IT修真院,请先看这里 &a href=&/question//answer/?group_id=934336& class=&internal&&如何在一个月之内从零基础成为初级CSS前端开发工程师? - xdyl 的回答&/a&。
IT修真院跟其他任何一家培训机构都不一样 ,完完全全不一样的教学模式。看完这篇贴子,其实你就能大概明白这是什么样的教学方式。&/p&&p&而且,线上学习完全是免费,不仅如此,大修真院还给你入院就提供了良好的人脉关系。嗯。
然后,如果你真的不想来大修真院,或者我没看上你,那么你就也不要看视频或者是交钱学什么的,看W3C吧,自己偷偷按照修真院的Task做项目,跟着就找家公司实习去吧。&/p&&p&虽然慢了点,好坏也入门了。&/p&&p&&br&&/p&&p&四 JS
=============我是第一次过100赞的分割线================================&/p&&p&JS说起来必须是一个神器,这个当年10天内被开发出来的神器,以一种谁也想象不到的速度快速发展,它击败了Java Applet,逼死Flash,当Android和IOS看似一统全球的时候,JS慢条斯理的和Html5一起蚕食App市场,甚至还出来了NodeJS这种连后端都不放过的残暴东西。&/p&&p&原生和WEB的两种方式一直在争论不休,而我自己在三年前就是绝对的WEB支持者,windows对于JS支持的更彻底,只是Winphone一直不给力。&/p&&p&好吧,对于拿NODEJS做后端工程项目我还是有点不情愿,然而提供各种辅助工具什么的还是挺不错的。JQuery,Ajax和RequireJS和Angularjs和PhoneGap都是一些标志性的转变,还包括ReactJS。JS简直了,简直了,简直什么都不放过。&/p&&p&所以JS简单么?我带着你们了解一下JS工程师是什么样子的。&/p&&p&&br&&/p&&p&&br&&/p&&p&1 工作内容:JS工程师其实分成两类,在之前讲CSS的时候已经提到过,一个是套页面的,一个是前后端分离的。对这两个概念还是分不太清的,可以回过头去看CSS的部分。&/p&&p&对于套页面来说,JS工程师的职责非常简单,一个是做一些简单的动画和交互和验证,轮播图,弹框,验证用户名是否为空等等。另一个就是通过Ajax取一些后台数据,然后在页面上展示出来。&/p&&p&那个时候的JS工程师并不被太多人重视,很多时候一些后端的人把前端的工作也做了--除了写CSS,大部分的后端工程师写点JS还是不成问题的。&/p&&p&可是前后端分离的出现,彻彻底底的改变了前端的世界。前端居然有架构了,前端居然也有“编译”的概念了(你能想象么,JS的项目居然不能直接打开源码直接使用了,必须要经过编译才可以)。前端工程师和后端工程师只通过Json数据交互(感谢Nginx提供了一个完美的跨域解决方案,再也不用什么Jsonp了),然后服务器端的同学发现:好简单啊,我对Android,对IOS,对Html都只需要提供一套API就够了~~&/p&&p&前端同学更开心,再也不用去搭建各种悲剧的开发环境了!前端变的很轻,而且控制欲很强(AngualarJS好赞),页面跳转神马的SoEasy,而且也有了Bower这样的包管理工具,还有类似于JSP自定义Tag的指令,MVC,还有了Service的概念,马丹,前端到底发生了什么!&/p&&p&所以我们现在说到的,基本上就是前后端分离的工程师,他们的工作职责就是和IOS&Android的工程师一样,跟后端定接口,确定框架和架构,分模块,然后跟后端联调互相吐槽对方是渣渣。&/p&&p&项目结束之后修复线上Bug,不停的跟用户说:在我这里是正常的,你换个浏览器试试?不行就清一下Cookie,再不然就换台电脑。&/p&&p&&br&&/p&&p&2 需要技能:
环境【IDE(WEBStorm,Sublime,EditPlus),源码管理(SVN/Git) ,WEB服务器(nginx)】
基础【Http,REST,跨域,语法,组件,F12,Json,Websocket】
框架【JQuery,AngularJS,Bower,RequireJS,GruntJS,ReactJS,PhoneGap】
业务【金融,教育,医疗,汽车,房产等等等等各种行业】
第三方【微信,QQ等各种第三方登录,支付,IM,地图,语音,视频,图片】&/p&&p&&br&&/p&&p&&br&&/p&&p&环境不说了,参考CSS的。
基础跟CSS差别就好大了,要有一些网络协议的基本概念,要了解什么是Http,什么是Https,什么是WebSocket,什么是Rest,各种JS的语法(太复杂的完全不用管,别去管什么闭包什么Prototype什么This的指向),Json是必不可少的东西。&/p&&p&框架就多了去了。直接拿JQuery来学习就好,表去太在意什么原生语法,大部分场景你都不用担心引入一个JQuery的库导致系统变慢,AngularJS真是一个好东西,表太纠结一些细节,Bower,RequireJS和GruntJS这些会有一些前端大牛帮你搭好框架你直接用就好了。
想做点App就用PhoneGap,想尝试一下ReactJS就去试吧(我很想试一下然而看到有Render就看不下去了)。&/p&&p&必须提醒一次,如果你是从CSS转到JS的,那么一定要看一下这篇贴子。&a href=&///?target=http%3A///forum.php%3Fmod%3Dviewthread%26tid%3D7473%26extra%3Dpage%253D1%2526filter%253Dtypeid%2526typeid%253D2& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【IT修真院】怎么样从CSS转JS-IT修真院&i class=&icon-external&&&/i&&/a& 。这里强调的就是,你必须要懂业务逻辑,这跟CSS完全不需要懂业务逻辑简直是天壤之别,很多时候你并不是因为技术而无法学会JS,而是缺少对于业务逻辑的理解。&/p&&p&当然啊,这并没有完。还有无数的第三方库等着你,做微信呢你必须要用WX的SDK,要用百度地图呢就必须要用百度的SDK,还有各种支付啊神马的。如果你要做IM就有环信啊神马的。&/p&&p&&br&&/p&&p&&br&&/p&&p&所以。JS就是一个真正的程序员,一个真正的工程师,不但要能把代码实现,还需要理解需求,需要懂得编码规范,需要知道如何控制项目流程和进度风险,需要修复线下Bug,需要调优,需要做版本管理,需要制订接口,需要编写技术文档,还需要做新技术的调研或者是带新人。&/p&&p&现在你了解了咩?(如果不了解,加入IT修真院嘛,老大带你在IT界从菜鸟修成大神)&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&3 发展前景&/p&&p&我说了那么多,你们对JS的期望也很高了吧。坦白的说,有点高的离谱!
JS是唯一一个可以在两年之内薪水到20K的职业。
虽然工作五年或者是七年的JS在薪水上差别并不太大,但是也已经让很多人难以置信了好么。&/p&&p&好多人在别的行业,工作十年都拿不到10K啊亲。&/p&&p&&br&&/p&&p&0~6个月:6K~10K
6~12个月:8K~14K
一年~两年:12K~20K
两年~五年:18K~30K
五年以上:24K~&/p&&p&&br&&/p&&p&&br&&/p&&p&JS的入门相对来说比CSS难的多(表怕,有我大IT大修真院),但是他的好处是学会一点是一点,并不像Java一样,绝对是前期Gank型英雄,到了6级就能四处杀人。Java是后期,要到16级以后才能出山才能够震撼全场。&/p&&p&所以JS相对来说比较平滑,而且现在学习的曲线也比较清晰,慢慢在业界都形成了相对完善的框架。JS可以选择前进的路有很多种,只要你不是太瞎(跟着修真院就一定不会瞎),就没什么大的问题。&/p&&p&&br&&/p&&p&&br&&/p&&p&成长路径:&/p&&p&JS菜鸟-JS初级工程师-JS中级工程师-JS架构师-UED-前端Leader-前端大牛&/p&&p&大概这个样子啦,JS工程师在后面有一点后续无力,一般来说,我还是强烈推荐JS,IOS,Android三者通吃,在我的带的Team中也一直要求他们这么做(虽然并未能完全实施成功)。&/p&&p&这三者有太多相似之处了,到最后你会发现,语言只是一种工具而已。要做的事情,其实是差不太多的,并不需要对所有的语言都特别熟悉,有一种打底的,其他的都可以随意去玩了。&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&4.入门门槛&/p&&p&必须有CSS基础,必须有CSS基础,必须有CSS基础。
或者是有后端Java基础。&/p&&p&总之你要么是会了CSS,要么是精通了一种后端语言,千万不要CSS没学好,后端语言也不会就直接学JS,心里会没底,不踏实。&/p&&p&其他的都没什么了,列出来的基础知识,自己慢慢补就行了。&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&5.哪些行业适合做JS&/p&&p&IT界:CSS,然后是所有的都可以
其他界:所有的都可以&/p&&p&好蛋疼的结论然而事实上就是如此,这波JS的红利受益于微信,以及移动端的普及。我不确定在三年或者是五年之后会不会还是这种状态,然而三年和五年已经足够可以改变你的人生了,所以,你在等毛线?&/p&&p&大修真院的弟子中有搬砖的有退学的有高中毕业的有做电汽和通信的,你想想为什么你不可以?唯一不合适你的大概就是:你真的没有编程思想哈哈哈,然而这确实是一件很难解释和预测的事儿。我也确实见过反应比较慢的,进度比较慢的,但是无论如何,混口饭吃,不成问题。&/p&&p&&br&&/p&&p&&br&&/p&&p&6.职业限制&/p&&p&JS的职业限制也挺多的,主要就在于学习的方向上很容易误入歧途(至少在我眼里是这样的,相信我,我不是什么好人,我并不会我说过的每一句话负责)。比如说一直坚持喜欢用原生,各种喜欢写一些奇奇怪怪语法(我把我看不懂的语法都归结为奇怪的语法),各种回调等等等等。&/p&&p&学到一些好的框架其实很赞的,对于大多数人来讲,就够了。只是缺少一个清晰的指引。
有的时候你会发现,你对Http了解的比较少,会是一个瓶颈。
你对数组啊,循环啊不了解,是一个瓶颈。
你对MVC不了解,也是另一个瓶颈。
对Json不懂,不知道怎么定接口,也是个问题。&/p&&p&这些都学会了,也会遇到一些问题。就是JS的工程师三年,五年,七年的差别,大多数人都不算特别的大。
所以总会有人想学后端--但是我绝对不赞成学Java,NodeJS也可以不去学,不如去学习Python,更不要提PHP啦(我真心不喜欢PHP,不知道为嘛)&/p&&p&或者说,后端并不是语法,而是牵涉到算法,架构,性能,业务,选型等等跟前端几乎没有任何关系的知识,所以学习一门脚本语言,能做点简单的东西就好了。&/p&&p&还是需要把注意力转到IOS,Android上去。&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&7.去哪里学,怎么成长&/p&&p&不用说。首推的当然还是我大IT修真院。IT修真院是先总结归纳一个能够独立完成项目的JS工程师需要掌握的技术体系,然后设计15个Task来让你逐步完成对于知识的掌握。修真院一直在传播代码是写出来,而不是看视频看出来的概念。更看重你们在真正去做Task的时候独立解决问题的能力,除此之外,还有跟你一起学习和成长的师兄。这就是IT修真院去培养JS工程师的方式,而且,线上是完全不收费的。&/p&&p&如果你不想用这种方式去学习,还是我之前说的那些话,W3C,然后做点东西,跟着去一家公司实习。&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&五 后端(Java/python/go)
=============我是想玩Dota的分割线================================&/p&&p&说到后端,其实我主要想说的是Java。C和PHP这两种语言我都不喜欢,之前也说过了,我自己绝对不是一个说话公平公正的人,什么观点都带着自己偏激和极端的调调。&/p&&p&我之前在贴吧跟Java吧的吧主一直在撕逼(原因很简单,我说教大家学Java,一个月收400块钱,他说我是骗子封我贴。然后我说好吧,我不说教大家学Java了,我来给大家解决在学习过程中遇到的困惑,他说贴吧不能发问答贴。我说行,那么我就写一些新人学Java必须要学数据库,数据结构和计算机网络,于是一群吧主过来喷我说,我没学过这些我也照样学会Java了啊,什么多线程什么继承等等,我无语了解释说Java语法不重要,重要的是要学会后端的架构,要懂算法,要懂业务,要懂系统的扩展性,要会调试程序,于是吧主们就把我封了,我很不爽,就新开贴子跟他们撕逼对骂--我从来不是一个重身份的人,我骂人会很脏,所以如果看到这个贴子觉得我很厉害那么你瞎眼了,我就是一个不喜欢就说,谁喷我一脸我喷谁一身的性格,现在的结果就是Java吧的吧主每隔10天就来封我一次-哈哈哈哈哈比闹钟都要准,所以三个月过去了,我带出来很多CSS和JS的学员,然而Java的学员并没有多少。所以如果有人去Java吧替我骂一下那些XX吧主并且截图给我看,我会很开心很开心很开心,说不定就会给你们开小灶哈哈哈哈。)&/p&&p&之所以说这些,一方面是400多的赞让我觉得有点羞愧,另一方面也是想强调一个概念,学后端,学会语法只是开始而已,最后一个就是我是一个小人,谁欺负我我就想欺负回去。&/p&&p&我想想该怎么描述后端的工作。后端跟前端是截然不同的,之前讲过。前端是Gank,后端是大后期,要等到16级以后才能V5起来,而且我非常不推荐前端去学后端(所谓的全栈工程师完全是扯,我有时间会写一下,为什么不要去做一个全栈工程师)。后端要积累到足够多的项目经验,才能够成为一个靠谱的后端工程师。我觉得。我来举一个跟着我线下半年的小培宇的例子就能简单说明一下后端的工作。&/p&&p&小培宇是第一个来到我大修院面试(嗯,最初我是给他们发工资然后带他们学习的)的人,跟我讲他是考研失败,差了几分,然后也做过点项目,我随便问了几句就知道了他的状态:人挺聪明的,但是在学校肯定玩的疯,所以问点排序算法还是能够答的出来,数据结构也懂一点儿,LinkedList和ArrayList删除数据谁更快也能答的挺靠谱的,但是绝对绝对没写过一行工程代码。&/p&&p&他打动我的那句话就是:不在乎工资多少就想多学点东西。很好,我默默的点个赞,因为我本身就想把自己这几年积累的经验和知识和走过的坑整理出来,告诉互联网的新人,所以也不抵触带新人,坦白说,愿意像我这样带新人的公司,几乎没有,带新人真不是一般的累。幸好我之前在各种公司中都带过各种新人,好的坏的都带过,所以还算是熟悉。&/p&&p&于是我给培宇精心设计了他的学习曲线,这也是我大IT修真院的核心观点:
1.先搭建基础环境(Maven,SVN,Eclipse,jetty,SecureCRT,Linux,Mysql)
2.做简单的CRUD(DAO-自己封装的数据层,junit,Log4j,Rest,Spring,Spring MVC,Json,JsonTaglib)
3.做一个相对复杂的系统DB设计,接口设计,项目部署,错误提示,Bug查找,怎么打系统日志。
4.做了一个微信相关的项目,了解微信的API,交互方式,Cookie,拦截器,AOP,登录系统的设计,命名规范等。
5.拆分Service,将Home和Service分开,使用RMI调用,实现各个层次之间都可以完成分布式的部署,使用Tuscany(真心喜欢Tuscany)完成SCA。
6.使用MongoDB完成地理位置的搜索,短信,图片上传,云存储,使用Tiles来配置页面模板。&/p&&p&这些内容他花了将近三个月的时间。对他来说已经是学会了很多东西了,这三个月是几乎没日没夜的学出来的,要知道他之前压根就不知道什么是Spring,生成Json和套JSP的区别我骂了他好几次他才弄明白,经常会遇到一些Maven或者是Tuscany的报错不知道该怎么解决,数据库字段的规范和接口规范常常被我黑的体无完肤。很多东西都只是知道个皮毛而已,你们自己说说,学会Java语法算什么?&/p&&p&这还是有我来带,有我来教,有我给他定制合适的项目教给他去做,如果没有这些,你们自己学,学会我说的这些东西要多久?
别的不说,学会怎么打日志,怎么根据线上的报错去找错就不是一个月两个月能解决的。做为一个工程师,应该明白,很多时候要学会正确的路怎么走,还必须要知道错误的路是走不通的。正确的路大概就那么几条,错误的路呢?&/p&&p&为什么很多时候我看到错误日志就会明白是什么地方报错了,是因为我之前花了无数的心血和心力在查找这些错误上,所谓的经验就是这样,看的多了,一眼就知道大概什么地方报错了,然后随便百度下,就能找到解决方案,跟着去尝试倒底行或者是不行。这些是看书,或者是看视频能教会你的么?&/p&&p&到现在为止培宇已经跟了我快半年了,还是被我骂的狗血喷头,别的不说,就是接口的Wiki文档和代码保持一致,他都会经常犯错---这跟Java语法有什么关系,然而不经过一个好的训练,想做的很好,很不容易。&/p&&p&其实他接下来要学的东西更多。Memcache或者是Redis,ActiveMQ或者是RabbitMQ或者是QPid,Mybatis或者是SpringJDBC,Struts或者是SpringMVC,我告诉他的只是一个我们在项目中经过实践的,认为最合适的架构体系,然而他并不知道是怎么选择的。他必须要把这些相关的选择都有所了解,然后才能成为一个架构师。这个时间,如果一直跟着我,我觉得应该是在一年到两年左右。&/p&&p&这是一个横向扩展的内容,在这个时候我还没有要求他去看一些深层的东西。只是需要他停留在会用的状态就可以。在会用这些技术之后,再去了解一些自己喜欢的技术的细节,不成为一个只会使用工具的码农,所以培宇问我还需要多久才能达到我的水平的时候,我其实并不想打击他。我也是很刻苦努力的人啊,曾经无数个日夜也是默默的去一行一行代码去用最笨的方法调错,并没有人告诉我怎么样是正确的只有靠一个又一个的项目总结出来的经验。&/p&&p&而且我还会一些Drools,CRM,Lucene等等一些和架构师关系不大的事儿偏算法一些的东西,毕竟当年也学过点数据挖掘机器学习之类的内容。&/p&&p&就算是学会这些了,对于一个后端工程师来说就够了么?不不不,还需要学习JVM优化,监控,部署流程,发布流程,项目进度管理,代码重构等等等等。&/p&&p&所以,你们自己算算,这些东西如果都学会,一个Java工程师要多久才能成为架构师?&/p&&p&然而我还是对带培宇很有信心,首先他相信我,他愿意学,跟我当年一样,不怕苦不怕累,人也够聪明,做事也有责任心,其次我知道他应该怎么走这条路,先做什么,再做什么,哪些该花时间和精力,哪些不该花。&/p&&p&我希望他能够在一年之内就成为一个架构师。就如他在三个月和六个月之间独立做项目已经不成问题了一样(记着,我说的是独立做项目,自己设计DB设计接口设计架构完成需要的功能,从设计到实现完全自己来)。&/p&&p&我也希望我能够帮助很多和培宇一样,有实力有能力只是没有遇到我的那些人,这也是我为什么在知乎发贴的原因,IT技术的培训,哪些培训机构能做到这一点?&/p&&p&&br&&/p&&p&这个真实的小故事,就是想跟大家提前说清楚,我对后端的要求有多高,这也是后端特别好玩的地方。你必须要会很多种框架,有足够宽广的视野,还需要有足够多的项目经验(做金融和做地产是两个完全不同的概念),还需要懂项目开发流程以及快速定位线上问题的能力。&/p&&p&这些,就是我说的后端的主要工作内容了,这也是为嘛我说到后端的时候,大部分就是在指Java,而我说Java的时候,基本上是只指后端,根本就不是指Java的语法。更不是说是Android。&/p&&p&现在明白为什么后端是大后期了么, 为什么不建议前端学后端了么。后端要懂的东西,太多了。
言归正传,我来讲一下后端工程师的相关内容。&/p&&p&&br&&/p&&p&1 工作内容:&/p&&p&大部分的后端工程师都停留在功能实现的层面上。这是现在国内二流或者是三流的公司的现状,甚至是在某些一流的公司。很多时候都是架构师出了架构设计,更多的外包公司根本就是有DBA来做设计,然后后端程序员从JS到CSS到Java全写,完全就是一个通道,所有的复杂逻辑全部交给DB来做,这也是几年前DBA很受重视的原因。&/p&&p&所以你能看到成千上万行的存储过程(存储过程,视图,事务,外键 这些东西我真心希望永远不要在Mysql里出现),这就是外包公司中最常见的架构体系。来个SSH,Over。&/p&&p&好一点的会个WebService,用过ActiveMQ,也用过Redis,甚至还会用过Dubbo。然而大多数情况也根本不了解为什么这么用。&/p&&p&很多人写了两年或者三年代码都没做过独立的DB设计,不知道什么是REST,不懂怎么做接口设计,也不知道怎么去定位问题。&/p&&p&所以对于他们来说,拿到产品经理的需要,会有一个项目经理或者是Leader分配任务,跟着按步就班的把代码写完,跟前端调试完,QA测试不通过,加班改回来重新改,改完QA又没通过,再加班再改,QA终于通过了然后上线了突然发现另一个好的功能不能用了,跟着再接着改,在线上发布一次又一次。。眼睛熬的通红最终真的受不了了,休息几天换另一家公司涨个40%左右的薪水继续这样的日子。&/p&&p&不不不。我带出来的后端程序员并不要这么做。所以,我带的后端程序员的工作方式是这样的。&/p&&p&拿到产品需求-》后端程序员做接口设计,架构设计,DB设计-》拿出方案来做技术方案评审-》评审通过,开始预估时间-》每日更新自己的Task-》接口完成自测一百遍,每日部署到开发环境,随时集成-》CodeReview-》重构代码-》性能测试-》Demo通过-》发布到测试环境-》修正Bug-》重新发布-》发布到线上环境。&/p&&p&这中间需要理解需求,需要拿出多个方案,需要跟前端配合,需要跟QA配合,需要跟运维配合。需要跟产品沟通,有时候还需要找UI。后端几乎是一个核心节点,而这个核心节点接起来了所有的人。&/p&&p&我不知道我讲清楚没,很多时候我都发现我可能太久没做一个IT新人了,都忘记了新人们关心的问题或者是困惑是什么。
这就是我知道的,两种后端程序员的工作内容。你选哪一种?&/p&&p&&br&&/p&&p&&br&&/p&&p&2 需要技能:&/p&&p&环境【IDE(Idea/Eclipse,Maven,jenkins,Nexus,Jetty,Shell,Host),源码管理(SVN/Git) ,WEB服务器(nginx,tomcat,Resin)】
基础【Http,REST,跨域,语法,Websocket,数据库,计算机网络,操作系统,算法,数据结构】
框架【Spring,AOP,Quartz,Json TagLib,tiles,activeMQ,memcache,redis,mybatis,log4j,junit等等等等等】
业务【金融,教育,医疗,汽车,房产等等等等各种行业】
第三方【微信,QQ等各种第三方登录,支付,IM,地图,语音,视频,图片】&/p&&p&环境不说了,搭环境永远是后端人员比较头疼的事儿,所以才会有很多人想用简单方便的的语言来解决这些问题,比如说Python之类的。我还是喜欢Java,大概很多人觉得重,然而我喜欢,我觉得不是“重”,而是“正”。好像剑一样,王者之剑,路子很正。 &/p&&p&基础知识太多了,正是我一直强调的,做后端,这些基础知识了解多少,其实就是决定了你以后能走多远。这些科班出身的计算机ER,会了这些,才有了一个平台,才可以站在这个平台之上去搭建更高层的建筑,如果根基不稳}

我要回帖

更多关于 网站建设的条件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信