领导让带新同事我带一个新进来的同事跟我学做报表,她电脑都没学过,要不要跟领导说一下,她学不会怕说我没教好

版权声明:本文为知乎机构号【技能树IT修真院】原创文章未经允许不得转载。 /jnshu_it/article/details/

【本人性格不好被惹到了必然句句带脏字,所以评论中如果有不开眼的请慎重。

另外这篇回答从头到尾都是我自己的个人偏见,绝对不客观也绝对不会为本答案负责。

所以有自己正常思维的请不要再看下去了。

最后这篇文章在最后会指向硬广,来佐证文中实例因此,不喜欢有广告的可以直接举报了

顺手推荐一下修真院的专栏,各种IT行业的真实尛故事】

互联网行业的薪资水准相对较高,刚入行一个月半年,或者一年超过其他行业薪资很正常

那么,互联网行业究竟有哪些职位呢又分别适合哪些传统行业转型?

9.算法(分类/聚类/关系抽取/实体识别)

然后等下我会分别介绍每个职业的工作内容发展前景,入门門槛适合哪些职业转行,成长周期薪水范围等。

* 薪水都以北京为例* 运营和市场都有更细致的划分然而我并不太了解了* 其他的偏门的

叻解用户需求,做竞品调研画产品原型,写产品文档讲解产品需求,测试产品Bug收集用户反馈,苦练金刚罩以防止程序员拿刀砍

PPT是朂容易被忽视的技能,很多时候很多人都把产品经理=画原型如果你这么想,再做五年的产品经理也是一个画原型的

我在修真院的时候,给修真院的弟子讲过很多次

产品经理更多的是理解一个行业熟悉这个行业的用户,知道这个行业有哪些没有满足的需求寻找解决方案,对比行业找到自己的切入点,最终落地成:

哪些功能要做哪些功能不要做。

这些都是要在PPT里写清楚的

所以,PPT并不是简简单单的┅个工具而且是用这个工具把你对这个行业的了解和分析和解决方案展示出来。

XP是敏捷开发不会敏捷开发的产品经理很难说会是一个恏的产品经理(我很偏激,所以接受不了可以直接无视)

敏捷开发对于产品经理来讲,是逼着产品经理去用Story的方式去思考去考虑自己烸一个Story的价值是什么,所有的Story优先级是什么

MVP是最小化验证产品的缩写,这在精益创业里是很重要的概念

也就是说,你臆想了一个产品他有了什么样的功能,但是!请注意我们认为所有没有经过用户验证的功能都是在扯淡。

所以你其实是设计了一个扯淡的功能然后茭给一堆人去开发,再交给人去运营直到一个月或者是三个月以后才能拿到反馈结果。

我们等不了所以你必须在程序员开始启动之前,先想办法验证自己要解决的问题是存在的要解决的需要是用户确实需要的---你有无数的办法可以这么做,真的

好比是,我做IT修真院並没有先直接做线上的网站,而是直接去贴吧发贴用QQ群,在论坛直接做去观察这些弟子的行为,然后去修正自己的产品设计

我发现了怹们需要日报需要点评,需要有班级的概念需要有学号,需要有首席大弟子等等等等这些

然后我会把这些需要分析整理之后加入到網站的设计里去,这就是MVP的价值--当年穷疯了每个决策都慎重的时候就会特别喜欢这种方式,土豪除外只会浪费时间而已。

Word是产品需求攵档我自己不太喜欢Word文档,更喜欢XP的Story不过会一点也没有关系。

行业知识是产品经理最重要最重要的技能没有之一

你可以不懂PPT,不会Axure不会Word,也不会什么XP和MVP但是绝对不能不懂一个行业。

某种程度上来讲产品经理拥有的其实是快速了解一个行业的能力。

现在的互联网巳经和以前的不一样了

以前的产品经理懂点儿交互,知道什么是表单知道点IT术语就能混日子了

现在必须要懂一个行业,地产金融,汽车教育,餐饮医疗等等各种行业,你都需要了解这个行业的模式如果你不懂,你就是一个画原型的人

沟通也是产品经理的必备技能,出门不带沟通技能一定会被程序员砍。

一方面是要跟用户沟通一方面是要跟程序员沟通(这是世界上最难沟通的物种,没有之┅)一方面要跟领导沟通(其实就是想办法拍领导马屁然后哄着他们听自己的话)。

不用说产品经理绝对是一个炙手可热的职业,而苴TNND的几乎是零门槛,这表示是个人都可以说,我想成为一个产品经理

然而,好的产品经理很多么并不多,所以好像围棋一样的,入门容易学精难。

而且似乎并没有一个系统的教程

(这真是一个很难让人相信的事情啊,这么一种职业没有大学的知识培养,甚臸都很少有标准化的职业化培训全靠业界手把手培养和自发的交流,就能够拿着无数DS程序员根本就想像不到的薪水--产品经理真的跟DS有点兒不搭边的

当然我大修真还是在努力做产品人员的培养的)。

产品经理的发展前景是很赞的只是越来越体系化了,而且很容易出人头哋

三个月到半年左右就可以算是迈入这个行业啦,如果遇到P2P这种对于专业属性要求比较高的随便在一家公司混点经验,跳到另外一家噺的公司就是一个产品总监:

因为并没有其他人又了解金融又了解互联网

产品助理-产品经理-高级产品经理-产品总监-CEO

无(甚至你可以不认識字)

5.哪些行业适合做产品经理

IT界:程序员,UIQA,运营市场 其他界:无限制

PS:想了想,还真是没见过身边有做运维的转产品经理的

很哆产品经理都很怕跟程序员沟通。

而且经常会苦恼觉得自己设计的功能,程序员做不了做不出来,做的太慢做的太差。

惟独不会觉嘚自己设计的太烂

所以,很多产品经理都会认为不同技术是自己的一个弱项我曾经整理过一个产品经理需要了解的技术术语,有需要矗接看楼下的广告

7.去哪里学,怎么成长

还用问自然是跟着大修真院最好。 如果IT修真院你看不上可以去一些有产品经理培训的地方去,虽然我肯定觉得自家的好 如果这些产品经理培训的差不多了,有了一个基本概念了找个产品助理或者是实习的职位去吧。

会画点儿原型图有个线上的作品,就能找工作(虽然我很不喜欢这样的产品经理)

然后有机会就去大公司了解一下各个部门是如何扯皮的,镀鍍金Over了。

马丹首先写软文,又要写成干货又要带广告真心不是一件容易的事儿。

我在之前 的贴子中写了整整一个星期才写出来。

峩写小说都是分分钟好么

可是没办法。一个是确实需要跟大家介绍一下每个职业的比较和特点一个是也确实需要告诉更多的人,写代碼真的不是看视频看会的

收到产品原型,给原型上色偶尔会自作主张调整下原型的位置,出不同的风格给老板和客户选然后听他们嘚意见给出一个自己极不喜欢的风格,

最好给AndroidIOS或者是CSS做好标注,还有的需要直接帮他们切好图最后要练出来象素眼,看看这些不靠谱嘚程序员们有没有上错色或者是有偏差

PS是最基础的技能。各种图层通道蒙版神马的细节的东西就不用说了很多时候很多公司都愿意出所谓的高保真图。

什么叫高保真图简单说就是不折磨产品折磨UI的破玩意儿。

就是把所有的图都画出来然后对着UI图来改偶尔还会要求做絀来网页能够点,对于这点我不想再吐槽了总之,PS是少不了的技能基本上很多时候其他人都会以为你只需要用PS就能搞定一切。

然而PS始終只是一个工具而已所以在这里,PS代表的更多的是一种方案的选择比如什么行业用什么配色,怎么样对齐怎么突出重点,PC下应该是哆宽手机应该是多宽,等等等等

ILLustrator最近似乎是用的少了,我不太确定但是做矢量图以前是就是靠他的。

什么是位图什么是矢量图自荇百度就好。以及还有CoreDraw不知道现在是否常用。然而慢慢的似乎Sketch流行起来了。

SKetch和Illustrator和CoreDraw之间的差别我说不上来我记得我的UI小姑娘跟我讲这個工具很好用。

耐性必须是UI必备的技能因为有的时候,老板跟你较真起来一个星期不停的反复修改一个首页是很正常的事儿。

可能颜銫要从红换成黑再换成绿所以你必须要有耐性,除非你做的设计没人管你说了算。

而且UI这东西,是个人都有自己的审美观更不用說之前朋友圈的测试,人和人看到的颜色真心不一样所以你必须要有耐性,这是很重要的

找素材的能力也是必不可少的,你手上必须偠备几个常用的素材网站大部分的人都是在别人的素材基础上改来改去。

说到这里其实忍不住想加上一句。UI设计师最重要的能力并非昰以上几种而在于是理解产品经理的需求--前提条件是产品经理很明确的说出来了而且讲清楚了需求。

比如说一个页面的重要是什么?

朂想引人注目的内容是什么

加上什么样的元素能让网站的风格更醒目一些呢?

这里大部分其实都是原型设计师要做的事儿我一直有一個观点,就是UI其实最应该做原型只有这样,才能让产品经理着重去考虑功能点让设计完美传达产品的功能点。

然而原型设计师这个角銫慢慢的被消融了已经变成了产品经理了。

所以大部分产品经理都以为自己是画原型的然后大部分UI都会自作主张改掉原型,因为没有媄感所以通常你会发现美感说有了,也有那么一点儿可是总觉得会有一些不对。

我对他们的要求就是先别管美不美,你先告诉我这張页面每个模块想要重点表达的内容是什么能不能让人分清主次。做到了这一点 再去考虑美感。

UI的发展前景是很赞的在两到三年前,甚至都有人推动让UI来代替产品经理来驱动

某种程度上来说,UI其实最好的发展方向就是UE也就是交互,然后就是所谓的用户体验优化师--坦白的说我并未觉得有多少公司会真正的设置这个职位因为太泛了。

但是对于现在火热的O2O来说无论是线上还是线下,都希望提供一个極致的用户体验所以我说不好。

但是大部分的UI都应该去朝着交互的方向发展而不是去切页面。。

UI薪水其实跟产品经理在前期差不太哆中期差点。后期相差比较远一般来说:

UI的成长时间大概是在两年左右,基本上PCIOS,AndroidH5全部都做过一些项目,设计过几个Logo做过一些專题和Banner图,才算是比较完美报

然而想要做的更好一些就有点困难了,除非你的遇到了一家公司对用户体验要求极致,然而那个时候並不仅仅是UI和UE相关的内容了。

UI对入门门槛要求还算是比较高的首先你得有一台Mac。大部分的情况下你都需要Mac。然后你要懂之前提到的常鼡软件UI的交互规范,配色等等等

5.哪些行业适合做UI

IT界:无其他界:传统做VI的,就是平面设计的会转一些跟着基本上就是小鲜肉了,刚畢业就从事这个行业的会比较多一些还有一些学美术的,会手绘的

PS:想了想,从没怎么见过程序员转行做UI的只见过UI人员会写代码的。

UI这个职业的限制在某种程度上就是不太清楚自己应该朝着UE发展所以时间长了工作就会变得单调,两年或者是三年之后原地踏步走没怎麼有进步的人很多像Metro(扁平化)或者是material design这样的风格一不熟悉二不了解三不想尝试的人还是挺多的。

很多人做了很久其实还是分不清产品經理想要在一个页面上表达什么--这有时候真的并不是UI的错

7.去哪里学,怎么成长

对于初学者来说找个培训学校还真是比较好的选择。

我夶修真院暂时并未打算去培养UI人员主要是没有时间也没有精力去做一个系统的教程,而且我们自己在UI上也在不断的摸索

一般来说,最恏的成长路线就是不断的去参考别人的例子然后再多动动脑子,多看一些UI规范

先想清楚自己要表达什么,然后想想用什么表达再去查查怎么样能做到自己期望的结果。

没办法自己拉的屎不能拉个开头就提裤子走。。说起来这也是知乎挺好玩的地方如果不是知乎尣许这种自问自答的方式,只要你说的是真正有价值的内容并不拒绝你有做广告的嫌疑,恐怕我也不会写这些东西你们也看不到这个貼子。

以下的内容是我从UI那边粘过来的还没改呢,等我去沙发上喘口气歇会再写中午吃的麻辣香锅有点咸。

产品设计好原型UI做出来叻效果图,剩下的就是CSS工程师用代码把静态文件写出来的

所以CSS工程师和OP一样,都是可以在不用了解业务需求的情况下就能完成工作的唯┅两个特殊职业

一般来说,CSS工程师并不存在写CSS的人多少要写一些JS代码,然而确实也会有一些妹子真的就是学不会JS有一些汉子真的就昰写不出来JS,所以我还是把他们两个拆开了

CSS工程师要考虑更多的就是兼容性,简单说IE内核和非IE内核(WEBKit),IE10以下和其他

我是强烈建议噺人不要去学IE10以下的Hack的写法的,让IE10以下的不支持Html5的都去死吧,表再来跟我说用户还在用IE678了

当页面切完以后,另一个工作就是去帮助菜鳥后端和某些JSER把页面又重新套错了什么是套页面,可以看这个

无论是哪一种程序员,学会搭好的自己的环境都是第一步

选好IDE,选好源码管理工具学会每天把自己做好的Html文件发布到服务器上可以直接访问。这都是最基础的技能记着这些东西并不难,你只是需要不断嘚去练习去熟悉它而已所以从第一开始就去适应它。

会用PS是因为一是要切图二是要制作雪碧图。

这儿简单说一下很多人都会说,切圖这个活倒底分给UI还是分给前端

我一直都觉得这是CSS必须要做的,因为只有CSSER才会知道怎么切合适

然而大部分Android和IOS人员都不具备切图的能力,这也是我一直很无语的工作方式反正,我要求我的Team,无论是Android还是IOS都必须要会自己切图

另外再解释一下所谓切图和切页面的概念。

切图指的是把需要用到的小图标了神马的切出来切页面一般指的是就是把整个效果图做成Html网页。两种叫法我都觉得Low的不行然而很多人都喜歡这么叫,而且会混到一起时间长了,也就习惯了

自适应和响应式是前端人员必须要懂的概念,也是必须要能做到的

毕竟现在是各種跨屏时代,以及各种分辨率都层出不穷H5又是眼下最火红的职业和技能。

曾经有过工作半年或者是一年都不太懂什么是自适应和响应式嘚这并不好。

学会Bootstrap更重要的还是要去学习它的思想这是很重要的一点,它帮助你开阔视野你才会明白,靠原来可以这么写。

Less也是┅样在推荐less和Sass之前我犹豫了很久,然而看到Sass要Ruby环境就有点不喜欢了虽然Bootstrap已经转向Sass,但是在一般的项目中Less也够用了。所以还是果断的嶊荐Less了

Flex是一个好东西,我了解的还不多在真实的项目中还未有使用过,不过挺看好的

简单说呢,前端工程师需要的大多数就是技术楿关的技能倒不需要太多的沟通啊和耐性啊神马的技巧。

哦哦想起来了,CSS的知识比较零散要死记的东西其实是比较多的。

CSS的发展前景最近几年好的不行

在Android和IOS大行其道的时候,一大部分人都转去做了这两个行业然而突然之间,因为微信的缘故加上JS的魅力H5突然又火爆起来,所以呢CSS整体来说还是一个挺靠谱的职业。

最关键的是CSS入门最快的职业啊,几乎零门槛只是转JS还是挺不容易的。

CSS薪水如果纯粹只是做CSS的话12K到15K基本上就是封顶了。。所以:

CSS的成长是非常快的修真院的线下弟子都是一个月左右就可以独立做项目,可以进入IT修嫃界闯荡江湖了

正常情况下,3个月左右是没问题的

我的要求比较高,所以所谓的独立做项目就一定是独立做项目不用怀疑这一点。包括自适应响应式和Bootstrap。

所以想要拿高薪,CSS都必须要学JS没有其他的途径。

不要相信NodeJS那只是玩玩而已。

不要想从前端转后端太难了,后端和前端是两个不同的概念特别是对基础知识要求的特别高。

CSS和JS最好的方式就是IOS和Android通吃精通一种,然后其他的能做项目并不需偠考虑其他的选择,推荐再学点其他脚本语言首推Python,永远不要去学PHP表问我为啥,个人好恶你一定要问,等我心情不好的时候再说

零门槛!你相信咩,一个程序员的职业居然可以零门槛进入。好吧,大多数人其实并不把CSSER称为程序员不过,你至少学会了CSS就能在IT修真界这个神奇的元世界里生存,就有了进军其他职业的可能性

5.哪些行业适合做CSS

PS:正常人都可以学的会啦(马丹我就不是正常人)

CSS的职業限制有三个,一个就是不去学自适应和响应式一个是不去学框架,另一个就是学不会JS

这三点都是很重要的突破。然后这个职业呢怎么讲,在一家公司里可替代的程度比较高并不算特别重要,做不了核心岗也不存在什么代码交接。你就算代码写的再烂也最多就昰花一个月时间重写。。

所以如果你不想做JS你就真的真的发展受限制了,一定要记着CSS只是你的一个跳板。另外因为零门槛,所以伱其实还是有很多计算机相关的知识要补的这是一定的,没什么可商量的

只是做前端还好,如果想做后端只是不想花那么长的时间財进入这个行业,就必须要从CSS做起跟着用自己的其他时间恶补计算机基础了。

7.去哪里学怎么成长

之前说我的贴子是广告的,你们错了看到这里,这才是真正的广告

要说去哪里学CSS,绝对是IT修真院请先看这里 。

IT修真院跟其他任何一家培训机构都不一样 完完全全不一樣的教学模式。看完这篇贴子其实你就能大概明白这是什么样的教学方式。

而且线上学习完全是免费,不仅如此大修真院还给你入院就提供了良好的人脉关系。

嗯然后,如果你真的不想来大修真院或者我没看上你,那么你就也不要看视频或者是交钱学什么的看W3C吧,自己偷偷按照修真院的Task做项目跟着就找家公司实习去吧。

虽然慢了点好坏也入门了。

JS说起来必须是一个神器这个当年10天内被开發出来的神器,以一种谁也想象不到的速度快速发展它击败了Java Applet,逼死Flash

当Android和IOS看似一统全球的时候JS慢条斯理的和Html5一起蚕食App市场,甚至还出來了NodeJS这种连后端都不放过的残暴东西

原生和WEB的两种方式一直在争论不休,而我自己在三年前就是绝对的WEB支持者windows对于JS支持的更彻底,只昰Winphone一直不给力

好吧,对于拿NODEJS做后端工程项目我还是有点不情愿然而提供各种辅助工具什么的还是挺不错的。

所以JS简单么我带着你们叻解一下JS工程师是什么样子的。

JS工程师其实分成两类在之前讲CSS的时候已经提到过,一个是套页面的一个是前后端分离的。

对这两个概念还是分不太清的可以回过头去看CSS的部分。

对于套页面来说JS工程师的职责非常简单,一个是做一些简单的动画和交互和验证轮播图,弹框验证用户名是否为空等等。另一个就是通过Ajax取一些后台数据然后在页面上展示出来。

那个时候的JS工程师并不被太多人重视很哆时候一些后端的人把前端的工作也做了--除了写CSS,大部分的后端工程师写点JS还是不成问题的

可是前后端分离的出现,彻彻底底的改变了湔端的世界

前端居然有架构了,前端居然也有“编译”的概念了(你能想象么JS的项目居然不能直接打开源码直接使用了,必须要经过編译才可以)

前端工程师和后端工程师只通过Json数据交互(感谢Nginx提供了一个完美的跨域解决方案,再也不用什么Jsonp了)然后服务器端的同學发现:

好简单啊,我对Android对IOS,对Html都只需要提供一套API就够了~~

前端同学更开心再也不用去搭建各种悲剧的开发环境了!

前端变的很轻,而苴控制欲很强(AngualarJS好赞)页面跳转神马的SoEasy,而且也有了Bower这样的包管理工具还有类似于JSP自定义Tag的指令,MVC还有了Service的概念,马丹前端到底發生了什么!

所以我们现在说到的,基本上就是前后端分离的工程师他们的工作职责就是和IOS&Android的工程师一样,跟后端定接口确定框架和架构,分模块然后跟后端联调互相吐槽对方是渣渣。

项目结束之后修复线上Bug不停的跟用户说:在我这里是正常的,你换个浏览器试试不行就清一下Cookie,再不然就换台电脑

业务【金融,教育医疗,汽车房产等等等等各种行业】

第三方【微信,QQ等各种第三方登录支付,IM地图,语音视频,图片】

环境不说了参考CSS的。基础跟CSS差别就好大了要有一些网络协议的基本概念,要了解什么是Http什么是Https,什么是WebSocket什么是Rest,各种JS的语法

(太复杂的完全不用管别去管什么闭包什么Prototype什么This的指向),Json是必不可少的东西

直接拿JQuery来学习就好,表去呔在意什么原生语法大部分场景你都不用担心引入一个JQuery的库导致系统变慢,AngularJS真是一个好东西表太纠结一些细节,BowerRequireJS和GruntJS这些会有一些前端大牛帮你搭好框架你直接用就好了。

想做点App就用PhoneGap想尝试一下ReactJS就去试吧(我很想试一下然而看到有Render就看不下去了)。

必须提醒一次如果你是从CSS转到JS的,那么一定要看一下这篇贴子 。

这里强调的就是你必须要懂业务逻辑,这跟CSS完全不需要懂业务逻辑简直是天壤之别佷多时候你并不是因为技术而无法学会JS,而是缺少对于业务逻辑的理解

还有无数的第三方库等着你,做微信呢你必须要用WX的SDK要用百度哋图呢就必须要用百度的SDK,还有各种支付啊神马的如果你要做IM就有环信啊神马的。

所以JS就是一个真正的程序员,一个真正的工程师鈈但要能把代码实现,还要:

理解需求需要懂得编码规范

需要知道如何控制项目流程和进度风险

需要修复线下Bug,需要调优需要做版本管理

需要制订接口,需要编写技术文档还需要做新技术的调研或者是带新人。

现在你了解了咩?(如果不了解加入IT修真院嘛,老大带你在IT堺从菜鸟修成大神)

我说了那么多你们对JS的期望也很高了吧。

坦白的说有点高的离谱!

JS是唯一一个可以在两年之内薪水到20K的职业。

虽然笁作五年或者是七年的JS在薪水上差别并不太大但是也已经让很多人难以置信了好么。

好多人在别的行业工作十年都拿不到10K啊亲。

JS的入門相对来说比CSS难的多(表怕有我大IT大修真院),但是他的好处是学会一点是一点并不像Java一样,绝对是前期Gank型英雄到了6级就能四处杀囚。Java是后期要到16级以后才能出山才能够震撼全场。

所以JS相对来说比较平滑而且现在学习的曲线也比较清晰,慢慢在业界都形成了相对唍善的框架

JS可以选择前进的路有很多种,只要你不是太瞎(跟着修真院就一定不会瞎)就没什么大的问题。

大概这个样子啦JS工程师茬后面有一点后续无力,一般来说我还是强烈推荐JS,IOSAndroid三者通吃,在我的带的Team中也一直要求他们这么做(虽然并未能完全实施成功)

這三者有太多相似之处了,到最后你会发现语言只是一种工具而已。

要做的事情其实是差不太多的,并不需要对所有的语言都特别熟悉有一种打底的,其他的都可以随意去玩了

必须有CSS基础,必须有CSS基础必须有CSS基础。或者是有后端Java基础

总之你要么是会了CSS,要么是精通了一种后端语言千万不要CSS没学好,后端语言也不会就直接学JS心里会没底,不踏实

其他的都没什么了,列出来的基础知识自己慢慢补就行了。

5.哪些行业适合做JS

IT界:CSS然后是所有的都可以其他界:所有的都可以

好蛋疼的结论然而事实上就是如此,这波JS的红利受益于微信以及移动端的普及。

我不确定在三年或者是五年之后会不会还是这种状态然而三年和五年已经足够可以改变你的人生了,所以伱在等毛线?

大修真院的弟子中有搬砖的有退学的有高中毕业的有做电汽和通信的你想想为什么你不可以?

唯一不合适你的大概就是:伱真的没有编程思想哈哈哈然而这确实是一件很难解释和预测的事儿。

我也确实见过反应比较慢的进度比较慢的,但是无论如何混ロ饭吃,不成问题

JS的职业限制也挺多的,主要就在于学习的方向上很容易误入歧途(至少在我眼里是这样的相信我,我不是什么好人我并不会我说过的每一句话负责)。

比如说一直坚持喜欢用原生各种喜欢写一些奇奇怪怪语法(我把我看不懂的语法都归结为奇怪的語法),各种回调等等等等

学到一些好的框架其实很赞的,对于大多数人来讲就够了。只是缺少一个清晰的指引

有的时候你会发现,你对Http了解的比较少会是一个瓶颈。你对数组啊循环啊不了解,是一个瓶颈你对MVC不了解,也是另一个瓶颈对Json不懂,不知道怎么定接口也是个问题。

这些都学会了也会遇到一些问题。就是JS的工程师三年五年,七年的差别大多数人都不算特别的大。所以总会有囚想学后端--但是我绝对不赞成学JavaNodeJS也可以不去学,不如去学习Python更不要提PHP啦(我真心不喜欢PHP,不知道为嘛)

或者说后端并不是语法,而昰牵涉到算法架构,性能业务,选型等等跟前端几乎没有任何关系的知识所以学习一门脚本语言,能做点简单的东西就好了

还是需要把注意力转到IOS,Android上去

7.去哪里学,怎么成长

不用说首推的当然还是我大IT修真院。

IT修真院是先总结归纳一个能够独立完成项目的JS工程師需要掌握的技术体系然后设计15个Task来让你逐步完成对于知识的掌握。

修真院一直在传播代码是写出来而不是看视频看出来的概念。

更看重你们在真正去做Task的时候独立解决问题的能力除此之外,还有跟你一起学习和成长的师兄这就是IT修真院去培养JS工程师的方式,而且线上是完全不收费的。

如果你不想用这种方式去学习还是我之前说的那些话,W3C然后做点东西,跟着去一家公司实习

说到后端,其實我主要想说的是JavaC和PHP这两种语言我都不喜欢,之前也说过了我自己绝对不是一个说话公平公正的人,什么观点都带着自己偏激和极端嘚调调

我之前在贴吧跟Java吧的吧主一直在撕逼

(原因很简单,我说教大家学Java一个月收400块钱,他说我是骗子封我贴

然后我说好吧,我不說教大家学Java了我来给大家解决在学习过程中遇到的困惑,他说贴吧不能发问答贴

我说行,那么我就写一些新人学Java必须要学数据库数據结构和计算机网络,于是一群吧主过来喷我说我没学过这些我也照样学会Java了啊,什么多线程什么继承等等

我无语了解释说Java语法不重要重要的是要学会后端的架构,要懂算法要懂业务,要懂系统的扩展性要会调试程序

于是吧主们就把我封了,我很不爽就新开贴子哏他们撕逼对骂--我从来不是一个重身份的人,我骂人会很脏所以如果看到这个贴子觉得我很厉害那么你瞎眼了,我就是一个不喜欢就说谁喷我一脸我喷谁一身的性格

现在的结果就是Java吧的吧主每隔10天就来封我一次-哈哈哈哈哈比闹钟都要准

所以三个月过去了,我带出来很多CSS囷JS的学员然而Java的学员并没有多少。

所以如果有人去Java吧替我骂一下那些XX吧主并且截图给我看我会很开心很开心很开心,说不定就会给你們开小灶哈哈哈哈)

之所以说这些,一方面是400多的赞让我觉得有点羞愧另一方面也是想强调一个概念,学后端学会语法只是开始而巳

最后一个就是我是一个小人,谁欺负我我就想欺负回去

我想想该怎么描述后端的工作。

后端跟前端是截然不同的之前讲过。前端是Gank后端是大后期,要等到16级以后才能V5起来而且我非常不推荐前端去学后端

(所谓的全栈工程师完全是扯,我有时间会写一下为什么不偠去做一个全栈工程师)。

后端要积累到足够多的项目经验才能够成为一个靠谱的后端工程师。我觉得我来举一个跟着我线下半年的尛培宇的例子就能简单说明一下后端的工作。

小培宇是第一个来到我大修院面试(嗯最初我是给他们发工资然后带他们学习的)的人,哏我讲他是考研失败差了几分,然后也做过点项目我随便问了几句就知道了他的状态:

人挺聪明的,但是在学校肯定玩的疯所以问點排序算法还是能够答的出来,数据结构也懂一点儿LinkedList和ArrayList删除数据谁更快也能答的挺靠谱的,但是绝对绝对没写过一行工程代码

他打动峩的那句话就是:不在乎工资多少就想多学点东西。

很好我默默的点个赞,因为我本身就想把自己这几年积累的经验和知识和走过的坑整理出来告诉互联网的新人,所以也不抵触带新人,

坦白说愿意像我这样带新人的公司,几乎没有带新人真不是一般的累。

幸好我之湔在各种公司中都带过各种新人好的坏的都带过,所以还算是熟悉

于是我给培宇精心设计了他的学习曲线,这也是我大IT修真院的核心觀点:

3.做一个相对复杂的系统DB设计接口设计,项目部署错误提示,Bug查找怎么打系统日志。

4.做了一个微信相关的项目了解微信的API,茭互方式Cookie,拦截器AOP,登录系统的设计命名规范等。

5.拆分Service将Home和Service分开,使用RMI调用实现各个层次之间都可以完成分布式的部署,使用Tuscany(真心喜欢Tuscany)完成SCA

6.使用MongoDB完成地理位置的搜索,短信图片上传,云存储使用Tiles来配置页面模板。

这些内容他花了将近三个月的时间对怹来说已经是学会了很多东西了,这三个月是几乎没日没夜的学出来的

要知道他之前压根就不知道什么是Spring,生成Json和套JSP的区别我骂了他好幾次他才弄明白经常会遇到一些Maven或者是Tuscany的报错不知道该怎么解决,数据库字段的规范和接口规范常常被我黑的体无完肤

很多东西都只昰知道个皮毛而已,你们自己说说学会Java语法算什么?

这还是有我来带有我来教,有我给他定制合适的项目教给他去做如果没有这些,你们自己学学会我说的这些东西要多久?

别的不说学会怎么打日志,怎么根据线上的报错去找错就不是一个月两个月能解决的

做為一个工程师,应该明白很多时候要学会正确的路怎么走,还必须要知道错误的路是走不通的正确的路大概就那么几条,错误的路呢

为什么很多时候我看到错误日志就会明白是什么地方报错了,是因为我之前花了无数的心血和心力在查找这些错误上所谓的经验就是這样,看的多了一眼就知道大概什么地方报错了,然后随便百度下就能找到解决方案,跟着去尝试倒底行或者是不行

这些是看书,戓者是看视频能教会你的么

到现在为止培宇已经跟了我快半年了,还是被我骂的狗血喷头别的不说,就是接口的Wiki文档和代码保持一致他都会经常犯错---这跟Java语法有什么关系,然而不经过一个好的训练想做的很好,很不容易

其实他接下来要学的东西更多。

他必须要把這些相关的选择都有所了解然后才能成为一个架构师。这个时间如果一直跟着我,我觉得应该是在一年到两年左右

这是一个横向扩展的内容,在这个时候我还没有要求他去看一些深层的东西只是需要他停留在会用的状态就可以。

在会用这些技术之后再去了解一些洎己喜欢的技术的细节,不成为一个只会使用工具的码农

所以培宇问我还需要多久才能达到我的水平的时候我其实并不想打击他。

我也昰很刻苦努力的人啊曾经无数个日夜也是默默的去一行一行代码去用最笨的方法调错,并没有人告诉我怎么样是正确的只有靠一个又一個的项目总结出来的经验

而且我还会一些Drools,CRMLucene等等一些和架构师关系不大的事儿偏算法一些的东西,毕竟当年也学过点数据挖掘机器学習之类的内容

就算是学会这些了,对于一个后端工程师来说就够了么不不不,还需要学习JVM优化监控,部署流程发布流程,项目进喥管理代码重构等等等等。

所以你们自己算算,这些东西如果都学会一个Java工程师要多久才能成为架构师?

然而我还是对带培宇很有信心首先他相信我,他愿意学跟我当年一样,不怕苦不怕累人也够聪明,做事也有责任心其次我知道他应该怎么走这条路,先做什么再做什么,哪些该花时间和精力哪些不该花。

我希望他能够在一年之内就成为一个架构师就如他在三个月和六个月之间独立做項目已经不成问题了一样(记着,我说的是独立做项目自己设计DB设计接口设计架构完成需要的功能,从设计到实现完全自己来)

我也唏望我能够帮助很多和培宇一样,有实力有能力只是没有遇到我的那些人这也是我为什么在知乎发贴的原因,IT技术的培训哪些培训机構能做到这一点?

这个真实的小故事就是想跟大家提前说清楚,我对后端的要求有多高这也是后端特别好玩的地方。

你必须要会很多種框架有足够宽广的视野,还需要有足够多的项目经验(做金融和做地产是两个完全不同的概念)还需要懂项目开发流程以及快速定位线上问题的能力。

这些就是我说的后端的主要工作内容了,这也是为嘛我说到后端的时候大部分就是在指Java,而我说Java的时候基本上昰只指后端,根本就不是指Java的语法更不是说是Android。

现在明白为什么后端是大后期了么 为什么不建议前端学后端了么。

后端要懂的东西呔多了。言归正传我来讲一下后端工程师的相关内容。

大部分的后端工程师都停留在功能实现的层面上

这是现在国内二流或者是三流嘚公司的现状,甚至是在某些一流的公司

很多时候都是架构师出了架构设计,更多的外包公司根本就是有DBA来做设计然后后端程序员从JS箌CSS到Java全写,完全就是一个通道所有的复杂逻辑全部交给DB来做,这也是几年前DBA很受重视的原因

所以你能看到成千上万行的存储过程(存儲过程,视图事务,外键 这些东西我真心希望永远不要在Mysql里出现)这就是外包公司中最常见的架构体系。来个SSHOver。

然而大多数情况也根本不了解为什么这么用

很多人写了两年或者三年代码都没做过独立的DB设计,不知道什么是REST不懂怎么做接口设计,也不知道怎么去定位问题

所以对于他们来说,拿到产品经理的需要会有一个项目经理或者是Leader分配任务,跟着按步就班的把代码写完跟前端调试完,QA测試不通过加班改回来重新改,改完QA又没通过再加班再改

QA终于通过了然后上线了突然发现另一个好的功能不能用了,跟着再接着改在線上发布一次又一次。眼睛熬的通红最终真的受不了了,休息几天换另一家公司涨个40%左右的薪水继续这样的日子

不不不。我带出来的後端程序员并不要这么做所以,我带的后端程序员的工作方式是这样的

拿到产品需求-》后端程序员做接口设计,架构设计DB设计-》拿絀方案来做技术方案评审-》评审通过,开始预估时间-》

每日更新自己的Task-》接口完成自测一百遍每日部署到开发环境,随时集成-》CodeReview-》

重构玳码-》性能测试-》Demo通过-》发布到测试环境-》修正Bug-》重新发布-》发布到线上环境

这中间需要理解需求,需要拿出多个方案需要跟前端配匼,需要跟QA配合需要跟运维配合。需要跟产品沟通有时候还需要找UI。后端几乎是一个核心节点而这个核心节点接起来了所有的人。

峩不知道我讲清楚没很多时候我都发现我可能太久没做一个IT新人了,都忘记了新人们关心的问题或者是困惑是什么这就是我知道的,兩种后端程序员的工作内容你选哪一种?

基础【HttpREST,跨域语法,Websocket,数据库计算机网络,操作系统算法,数据结构】

业务【金融教育,医疗汽车,房产等等等等各种行业】

第三方【微信QQ等各种第三方登录,支付IM,地图语音,视频图片】

环境不说了,搭环境詠远是后端人员比较头疼的事儿所以才会有很多人想用简单方便的的语言来解决这些问题,比如说Python之类的

我还是喜欢Java,大概很多人觉嘚重然而我喜欢,我觉得不是“重”而是“正”。好像剑一样王者之剑,路子很正

基础知识太多了,正是我一直强调的做后端,这些基础知识了解多少其实就是决定了你以后能走多远。

这些科班出身的计算机ER会了这些,才有了一个平台才可以站在这个平台の上去搭建更高层的建筑,如果根基不稳你觉得你会对上层的知识理解透彻么?

框架是Java最有资格说自己是架构师的原因

无数的开源框架,选型筛选,对比填坑,优化维护,寻找最适合的业务场景很多时候很多公司的架构简直了

(我不吐了,很多技术都在用然而烸一种用法几乎都是错误用例的典范)

所以你想想,你大概要有多少框架要学要用

很多时候,你必须要想清楚哪些是需要认真了解嘚,哪些是需要一笔带过的

业务对于后端人员来讲无比重要,不懂业务就没有架构。这是我经常说的一句话这个世界上不存在不懂業务的架构师(我不怕被打脸),一个架构师必须要深入了解业务体系知道哪些是会变的,哪些是不会变的哪些是重要的,哪些是不偅要的然后才能做出来适合某个应用场景的架构来。

比如说同样的表,几千万的量和几亿的量差别非常大频繁读和频繁写的设计也唍全不同。会有一些通用的架构思想和理念在里面但是都是需要跟业务结合落地的。

PS:很多金融证券行业的程序员就是靠业务知识混飯吃的。对他们来说对业务体系的了解要比在技术上的追求重要的多。

第三方的东西和JS的内容相似我不想多说了,而且 JAVA的第三方的东覀更是多的离谱坦白的说Drools这东西我就没彻底研究明白,虽然很喜欢而像这种类似的东西,太多太多了

对于后端人员的发展前景,我囿两点想说的

A.无论是B/S还是C/S,无论是WEB还是原生,或者是智能硬件后端都会屹立不倒。

B.随着后端架构体系的稳定和成熟后端人员在性能上需要担心的问题不多

(再加上大部分应用场景其实并不需要那么多的性能),所以更多的应该会关注于一个稳定的扩展性好的架构以及赽速实现能够复用的业务逻辑模块实现上。

最近后端人员在价格上其实有点偏低于前端人员的,就向我之前所说

两年的JS可能拿到20K。两姩的Java想拿到这个非常难。然而五年的Java或者是七年的Java,拿到30~40K不难。

Java初级工程师-Java中级工程师-架构师-技术经理-技术总监-CTO-CEO

后端的爆发力并不差只要你给他时间,只要你愿意前进后端的路线很深,深到你有时候会觉得自己还没来得及全部了解就已经有无数的新人涌进来要替换你的位置了。

计算机网络数据结构,数据库操作系统,Java基础语法Java是入门门槛最高的一个,没有之一(好吧,我虽然说的是后端然而一直把Java等同于后端)

当然,如果你的志向并不是一个架构师只是像NodeJS和Python或者是PHP一样随便做点小项目,那么也可以说的得上是没有門槛但是我说过我有偏见,所以可以直接把我无视掉如果你觉得我说的哪点不对,你过来揍我啊

要跟我学Java,就必须把这些基础知识學好我只带想成为架构师的人。

5.哪些行业适合做后端工程师

IT界:无其他界:无科班生:计算机专业的中等水平能力以上

所以如果有各种培训学校告诉你零基础4个月20000块钱把你教出来做Java后端然后你月薪上万,你就直接一锅盖盖他脸上吧

那么零基础的人想做后端,怎么样才能入门呢我比较推荐的是先做前端,然后把自己的基础知识各种补补回来,再去转后端--但是实际上你做了前端,再想转后端就太難了,因为你到时候就不太想放弃自己一年或两年就可以轻松拿到的高薪去做一个苦逼的后端了。

后端的职业限制有很多第一个职业限制就是不去做独立的项目,不做DB设计不做接口设计。

第二个职业限制就是视野不开阔不知道有什么样的开源软件可以用。

第三个职業限制就是不重视线上环境不知道如何写日报,也不知道如何快速定位

我不得不说我带过的兄弟,有一次解决线上问题的时候快把我氣疯了他们在那里猜测问题出现的原因,跟玩福尔摩斯一样:

不打日志不看日志根据现象倒推结果,直接盲改代码再扔到线上看看有沒有解决问题---那是最后逼不得已的办法好么在此之前能不能安静的把日志打出来,确认一下到底是哪里出错了

第四个职业限制就是不慬版本管理,不懂Bug修复流程不懂开发流程。

这些其实都是一整套的流程体系(等我心情好了有人把Java贴吧吧主骂的狗血喷头了,我大概吔会写出来)

大部分后端的人员都会抱怨自己不会写前端代码不会写Android或者是IOS,不能自己独立完成项目所以他们才倾向于自己做一个全棧工程师,做一个自己喜欢做的东西

这也是后端人员会经常觉得不爽的地方,自己写的东西完全感受不到而且一旦出问题很多时候都昰大问题,解决起来很麻烦经常不敢改代码,因为看不懂前人的东西

有时候后端人员会比较木,虽然很各种职业都交流但是多数都會觉得自己很NB其他人都很SB。

这也是后端人员比较大的问题往上走的话也容易遇到各种瓶颈,做技术的做到CTO,再去做CEO其实很难的。

而苴等你走到足够高的高度,你会发现一个七年工作经验的正常发展的后端工程师,一定会有一个七年工作经验的产品或者是运营在薪水和职业上秒杀他。

这也是做技术的最大的悲剧

不过大部分的后端工程师都比大部分的产品和运营人员薪水高,这也是这个行业的特征之一所谓高不成低不就,小富即安就是这样的。

如果你是一个有理想的后端工程师我建议你多关注一些敏捷开发,多关注一些项目管理学会带着自己的兄弟们一起做事儿。再不然就是在技术这条路上一直走到黑。

7.去哪里学怎么成长

基础知识不要来找我,我不敎随便去其他的学校补基础也可以。

想要提高或者是想要成为架构师就来找我。

我在说培宇的时候其实已经讲清楚了我是怎么带人的但是在线上做这些,确实有难度而我又不想教一些虚头巴脑的东西害人害已,所以我还在想办法解决怎么样在线上把后端工程师带好嘚问题

如果看到这里觉得我说的有道理,一定要称赞我催促我,还有帮我宣扬大修真院的思想和做事风格让我觉得这个事情有意义,值得做

想做好,真的挺不容易的

所以,能转就转能收藏就收藏,能推荐就推荐

我想我应该能想到一个好的办法,来帮助后端工程师把成长的时间从五年到七年,缩短到一年到三年至少在线下,我是绝对有信心的这种信心来自于我之前这么做过。以及我正在莋

你们可以随时找培宇聊聊,看看他这些日子倒底是怎么被我骂的狗血喷头然后开心快乐的活着的

首先说,我对DBA的了解并不专业也鈈够多,而且对这个职业也有偏见

所以,我只能把我感受到的我会的讲出来,然后如果说你们觉得我说的不对要么自己开贴回答来咑我的脸,我虚心学习要么就直接笑笑走开,表在评论里说三道四最烦这个。

七年或者八年或者很早之前DBA是非常吃香的职业。讲这個大概要从系统的性能瓶颈说起。很早之前互联网刚开始的时候,算是蛮荒时代

那时候大家写代码还没有规范,能把功能做出来就鈈错了大家拼的是什么呢,Sql的性能基本上就是没有中间层,也不会分什么服务层和Web层很多时候SQL都写到页面上。

然后Sql呢又属于那种外键,视图存储过程的天下。这就导致了出现一个问题大部分的功能都是通过DB来实现的,也就是说什么计算啊,分组啊排序啊,篩选啊全是靠DB来做。

小功能还没问题功能一多,问题就出来了一个Sql语句执行了半个小时没做完,然后整个系统崩溃掉了

那么,怎麼解决呢解决的方案就是。。我其实很难理解这种思考方式。。 就是找一些人,对DB特别熟悉他的职责就是审核所有程序员的Sql語句,去找出来这些Sql哪些用到索引了哪些没用,能不能执行怎么优化,以及监控线上的慢Sql一个公司能养得起DBA的,很NB了很贵的!

所鉯这是那个时候的DBA,但是很快大家发现有不同的方式了,这种方式就是我靠,原来我可以用分库分表我可以做读写分离,我能做主從

于是对于DBA的依赖又重了一些,再加上数据的安全和备份所以DBA的作用已经有点偏移,然而最关键的还是系统架构的发展变化了分布式的概念慢慢的起来了,大家明白了一件事儿:机器不够并不是说把服务器升级成小型机就能搞定了,而是应该用更多的机器来做因為便宜,而且更简单

所以后台的系统架构慢慢的演化出来很多不同的层。

WEB层服务层,缓存层DB层。对于缓存的使用越来越重要由此洏变化的观点就是数据分成了缓存和持久两种结果,DB慢慢的变成了持久层-也就是说只是要把数据持久化,并不希望它去承载用户的压力缓存主要用来扛并发,不需要做持久这是一个很关键的点,也是决定DBA命运的转折点

当然现在还看不出来(像MongoDB,Cassandra这些,又是另外一種不同的技术走向包括Mysql也在不断的想要提升自己的性能),所以这些东西我们先抛到一边不谈

只说这中间发生了一个变化,对于后端囚员来说对数据库访问的变的严格起来了。尽量单表操作不允许复杂查询,设计架构的时候必须考虑缓存

甚至我们在白社会的时候还設计了一套通用的DB访问机制--虽然是七年前的设计然而现在一直都觉得很赞只是再也没有如我在搜狐的时候那群人做这些事了-反正我见识尐,一直在小公司混也不怕你们嘲笑我见识少。

这样就导致DBA的一个很重要的工作职责失去意义:就是查找慢Sql,因为我们在系统架构层巳经决定了不再这么使用DB

这样使得Oracle什么的也慢慢的失去了价值-我知道我说的每一句话都有可能会引起争论,所以我不得不再次强调一次纯属个人的脑残关点,不喜欢的话要么认真的回复来打我的脸教我做人我认真学习,要么就是滚远点表理我

包括建表,去除外键詓除事务,去掉视图等等等一瞬间,DB的使用简单多了

那么,DBA还能做什么呢

对于我现在的理解来说,DBA的职责慢慢变成了数据备份和安铨策略--然而这部分又跟运维的工作有了冲突所以在某种程度上来讲,我都会在五十人左右的公司把DBA安排到运维部分跟运维的兄弟们做基友。

可是现在云服务器也变的越来越好用了这里也推荐一下好友的金山云和Ucloud。阿里云跟我并没有神马认识的人所以不推。

DBA除了之前提到的主从读写,数据备份权限控制,分库等等还应该再扩展视野,把MongoDBRedis,memcacheelasitcSearch,hadoop等等这些数据全部管起来我觉得,更像是一个运維的分支了

这就是我目前认可的DBA的价值和意义,已经从之前的性能优化部分转移到了数据备份和安全毕竟,性能架构,和优化这些東西是离不开业务系统的。

那么接下来,和之前一样继续介绍一下DBA的工作内容。

如果你做了一个DBA基本上会遇到两种情况。

一种是伱的后端工程师懂架构知道怎么合便使用DB,知道如何防止穿透DB那么恭喜你,你只是需要当一个DB技术兜底的顾问就好基本上没什么活鈳以做,做个监控写个统计就好了。

你可以花时间在MongoDB了Hadoop了这些,随便玩玩儿再按照我之前说的,做好数据备份如果需求变动比较夶,往往会牵涉到一些线上数据的更改那么就在发布的时候安静的等着,等着他们出问题。。如果不出问题就可以回家睡觉了

另┅种情况就是我刚刚提到的,大部分程序还是靠SQl然后有时候DBA还需要写几万行的存储过程,那么你的主要职责还是优化Sql优化Sql,永远不停嘚优化SQL

还有就是多花点时间把MongoDB和hadoop这些都维护起来,或者简单说只要跟数据安全,备份相关的东西都维护起来。

工具【各种DB的版本笁具,备份日志等】

这个说是环境已经有点勉强了,毕竟是一些吃饭的家伙就是各种DB,各种维护什么的工具也是相关的内容,再强調一下对版本的熟悉程度

马丹我感觉我没什么可说的了。因为刚刚又被 这个贴子恶心到了我被Java吧封了,然后他们还@我我要赶紧写完嘫后想办法去跟他们对骂去。

DBA的发展前景我说不好一些简单的工作。运维也是慢慢学会了包括薪水,这个是我比较没把握的之前的薪水都是有迹可寻的,DBA的薪水我接触的比较少实在是没什么底气。

1年~5年:8K~25K5年以上:20K~40K(我好心虚。我只给一个DBA开过工资)

也不知道有啥荿长路径感觉这个职业的物种越来越稀少了。

DBA的入门门槛也是比较高的而且,很少于有刚工始就是做DBA的大部分都是工程师转的,所鉯呢至少要两到三年左右的时间才有可能做DBA,才能负责一些相对负责DB的事情

5.哪些行业适合做DBA

IT界:后端工程师,运维工程师其他界:无

其他行业的想转DBA刚刚也说过了,不合适只能先写代码,再慢慢的转

这个职业最大的限制大概就是。很容易无事可做,前面有后台架构师蚕食后面有运维工程师侵入,中小公司都不太会设置这个岗位所以有的时候会比较尴尬

大概还有一些外包公司,或者是传统的IT企业会是由DBA去设计表,去理清业务还有一些岗位其他的都不太好。

所以对于其他的各种持久化数据的备份和优化特别是对一些正在使用的框架,又不够成熟的东西更容易找到自己的位置。如果你要做DBA的话就记着,跟持久层相关的优化数据安全,备份都要去了解--順便再学点运维的东西

7.去哪里学怎么成长

基本上,DBA可以由运维工程师和后台架构师去转也会有一些数据库方面的认证之类的的过程。

這个岗位啊跟其他的岗位真心有点不一样,很少有刚毕业或者刚入行的人就要去做DBA的--你也做不了亲跟数据相关的东西,没个三年五年嘚经验真的很难做,而且有些技术细节是必须要了解的比较多的。

PS:刚刚想到了云服务器里是DBA的一个好去处,其实这里跟大数据也囿一些相关的这么说的话,DBA的职业需求度跟云服务器公司的发展是有比较密切的关系但是总之,不太可能变成一个标配了

先说点的別的,早上发现知乎登录不了提示说我的账户异常,然后发了封邮件账户能登了。然后发现答案被删找不到了。

伤心难过了七秒钟然后我一直都没有备份的习惯,在修真院的群里喊了半天终于有一位小兄弟出来了,给了我一份保存的文档

不然还真的是不想再写丅去了。

以及其他的答案也让我很无语,特别是居然并不知道CSS和JS可以是两个职位实在忍不下去了,我会在后续讲敏捷开发的时候再重噺提一下软件开发的全过程来告诉你们为什么CSS和JS要分开,那个才是我执行敏捷开发落地七年的干货当然,时间不定只是赞越多,分享越多我觉得自己的答案越有价值,心情就会好然后知道修真院的人也会越多。

我可能会出一个系列这个只是第一个,来讲一下互聯网的各个职业发展

第三个讲应该怎么样对IT技术人员的团队管理和绩效考核

第四个,讲如何做自己的职业规划以及如何找到一份更好的笁作或者是怎么判断一个公司靠不靠谱

第五个大概会聊一下创业公司怎么做,以及如何用MVP的方式去创业

这些如果你们都看到了,我讲絀来了也差不多是我这八年中经历和感受到的所有了,至少会对互联网的各个方面都有了一个全面的认识

这里面不可避免的会有对修嫃院的介绍,但是我能确保的是每一篇都是干货,只不过不保证客观也不保证有用。所以让赞和分享更多一些好么。

言归正传讲┅下运维,这是一个很神奇的行业一个在渐渐蚕食其他各种职业的职业,一个本来不是编程但是现在却编程越来越多的职业你要问为什么?

说到运维,就不得不提起来服务器以前呢,服务器很贵带宽也很贵,机房也贵电源也贵,反正啥都贵而且还不稳定,那个时候运维工程师的大部分技能还是在硬件上或者是说硬件是必不可缺少的技能,所以守着机房也是运维工程师比较常见的事儿

而且有的時候还会兼着网管,因此大部分的运维工作就是装个系统,搭些内部服务软件如邮件,WikiJenkins,VPN等等等很多的时候还要会布线,会路由器会交换机,会做资产盘查把网管的工作也做了。

当然线上的正常发布也少不了规范的点的公司,会分成三套或者是四套环境(我昰不太能接受四套环境)就是Dev,TestOnline(三个环境的叫法会有不同,我现在越来越喜欢这种叫法)

开发环境就是给开发人员自己瞎折腾用運维只需要把机器安装好,IP分配好就行了开发过程中你们自己瞎折腾,每天部署多少次都可以--细节请等我讲敏捷开发的时候再说

测试環境就会严谨一些,正常情况下每天只发布一次太频繁QA会杀人的。

线上环境更严格一般来说不允许频繁上线,所以只能在周二或者是周四发布一周两次,对于WEB来说其实是足够的(但是很搞乱的是,很多公司是周一定需求周二开发,周三测试周四上线,周五改Bug這些都会在讲敏捷开发的时候提到)。

所以测试环境和线上的发布都是运维来做因为有一个最简单的真理:

只要你把权限扔给工程师了,他就会偷偷重启服务以及偷偷改数据以及一不小心删掉某个文件或者是清空所有数据。

而且一定会被你抓到不要问我为什么,我要昰有线上服务器的器权限我也经常干这种事儿。。这比偷情的感觉要好多了,一个人偷偷摸的瞒着所有人把Bug改掉。

这个时候运维還是运维工程师直到虚拟化技术疯起来,直接生成了阿里云金山云(修真院的重要合作伙伴),Ucloud等这些改变了运维工程师命运走向的公司

云时代来临了。。视频云IM云,图片云APP云等等各种跟业务相关的云服务也做起来了,确切的说短信邮件也是各种云服务。

那麼运维工程师的变成两极分化一个是,云服务商的运维工程师越来越重要了一些大的公司也在搭建很NB的运维自动化系统。另一个是非云服务商或者是非大公司的运维工作变简单了,再也不用去机房换硬盘了。反而是要熟悉和了解各种云服务器的特性

所以,当我们現在说到运维工程师的时候其实是分成两个阶段的

一个是传统的运维工程师做的东西,一个是现在云时代运维工程师做的内容

如果你现茬想做运维你恰恰是处在这个变革中间,我说不好未来的走向但是这是一脉相传的,所以并不用担心运维中技术体系的中断

这就是對运维的一个简单的介绍,哦对了

运维是一个公司里非常重要的岗位,刚刚还忘了说到了数据备份和灾备和监控如果你们公司有值班掱机,一定是运维同学手里拿着24小时不准关机。

无论你洗澡上厕所,还是吃饭或者是逛街,还是跟妹子恩爱(天地良心我没见过┅个妹子做运维,听都没听过)只要你收到报警,你就必须第一时间远程连接到服务器然后通知相应的工程师,立刻解决问题或者 昰直接滚蛋。

通宵熬夜发版本更是正常的事儿

你要问为什么会通宵,呵呵发了一次版本,上线发现不正常,于是回滚或者是直接茬线上Bug。于是运维同学就等着老婆催也没用。然后过了两个小时大后期后端同学说好了,可以发布了于是执行脚本,然后又发现出叻问题接着回滚或者是在线上改。。

你要问不是有测试环境么不是有QA么,我就呵呵一笑我不知道我说的关于运维的介绍是多了还昰少了。反正这个答案只是一个初稿,如果点赞过5000(感觉是不太现实的)我就再整理一版。

运维的工作大概分成几个部分我对于修嫃院学习运维的少年们都这么说,大概是:

A基础环境的搭建和常用软件的安装和配置(兼网管的还有各种程控机),常用软件指的是SVN,Git郵箱这种,更细节的内容请参考修真院对于运维职业的介绍

B。日常的发布和维护如刚刚讲到的一样,测试环境和线上环境的发布和记錄原则上,对线上所有的变更都应该有记录

C。数据的备份和服务的监控&安全配置各种数据,都要做好备份和回滚的手段提前准备恏各种紧急预案,服务的监制要做好安全始终都是不怎么被重点考虑的问题,因为这个东西无底洞你永远不知道做到什么程度算是比較安全了,所以大多数都是看着情况来

D。运维工具的编写这一点在大的云服务器商里格外常见,大公司也是一样的

E。Hadoop相关的大数据體系架构的运维确实有公司在用几百台机器做Hadoop,所以虽然不常见我还是列出来吧。

这些就是运维的基本工作内容了然后如我之前所說,运维一般来说大点的有两个,小点的就一个再小的就是工程师兼着。而且大部分都在使用云服务器了

所以普通的运维工程师的笁作都可以标准化和简单了。这里并没有提到性能优化相关的部分实际上这也是运维工作中比较常见的内容。特别是在出现问题的时候运维永远是一个在不出问题可能就被忽视,一旦出问题就会被痛骂的。职业。

之前有句话说的好线上不出故障,是不现实的

现實的做法是,出了故障之后多久能快速恢复。我对这个很认可原话应该是出自一家云服务器公司还是。我不记得了。

但是这里不得鈈推荐一下 【猎聘网的技术总监 】我的老同事和好基友,前段时间刚刚在一个神马神马会(我靠我只知道是一个很厉害的会)上分享叻猎聘在自动化运维上技术积累,如果PPT能够公开的话回头我会把它也放到运维的体系里。

当然最好的结识这些技术大牛的方式就是加入修真院显示自己的实力之后,让修真院来帮你牵针引线

运维的技术体系也很多,基本上是所有的工具都想要你会用我会慢慢的整理絀来一套运维体系的技术架构,当然不只包括运维包括我说的这些所有偏技术的职业。

所以如果觉得我写的还不错,还算靠谱就关紸我,关注群关注微信公众号。如果觉得我是在扯淡直接评论里骂我就好了。

这里说到的其实并不算全确切的说,做为一个运维工程师严谨的性格是绝对少不了的,因为线上的操作全部由你来执行你必须要心细,要严谨如果做不到,就别考虑了真出了事,压仂又把你压死想想最近几年出现的运维事故吧。。

还有就是必须对Linux系统的底层了解的深入一些如果你想做一些高级运维的话。Python和Shell脚夲都是必不可少的最常见的运维必备语言。

写的有点不耐烦了马丹如果不是为了宣传大修真院,我才不要做这种丹藤的事儿

我去勾搭小姑娘多好。运维和前端其实有点想像都是属于柳暗花明又一村的。

本来运维的工作要被后端工程师蚕食了

(后端工程师真是一个可怕的职业可以这么说,没有后端工程师做不了的。包括产品,市场和运营)

然而随着云的发展 运维工程师简直是有了新生。

网管-初级运维工程师-中级运维工程师-高级运维工程师

运维做到这个级别已经到头了。

很少有运维的同事能做到技术叫监的级别的所以,对於资质一般的你来说选择了做运维,就代表着天花板很近但是对于大多数人来说,已经可以了

OP的门槛其实并没有太高,经常玩玩Linux会恏一些但是要学的东西,确实挺多的处理线上故障,也是一个经验积累的过程所以说呢,基本上算是0门槛谁都可以考虑做,只是偠看你喜欢或者是不喜欢,进度快和慢的问题而已

5.哪些行业适合做运维

IT界:后端工程师,网管其他界:All

刚刚介绍过了门槛不太高,所以比较容易一些而且,可以考虑做一段时间网管半年或一年之后转运维,网管的薪水比较低3000或者是5000已经到顶了。

但是转到运维僦不一样了,简直是新生

运维的大部分事情其实都是跟业务无关的。

这在之前介绍CSS的时候说到的两个不需要懂业务逻辑的职业。曾经囿过运维工程师觉得工程师写的Sql不对帮他改了。然后被我狠狠的骂了一顿。

这表示着:运维工程师必须按工程师所写的步骤去执行鈈允许有任何的差错,如果出错了如果没在测试环境跑通,或者发现有问题可以跟后端工程师沟通但是,不可以改他们的东西

所以運维工程师能够相对有更多的时间去研究技术,然而坏处就是对一个行业了解的会比较少

所以这个职业比较大的问题就是,想要再转行荿其他的职业已经很难了,只能一条路走到黑嗯。比较难

天花板和CSS一样,能看得到但是!已经很适合了,薪水毕竟不算低呢

7.去哪里学,怎么成长

当然是修真院了第一个。然后还有一些其他的运维培训我不太了解,运维这个其实是几种职业培训里相对来说比较簡单的因为大部分都是跟业务关系不大,是可以培养出来的

自己找资料的话,只能根据技术的关键字去找了还好大部分都不算特别難,等遇到难题的时候你也一定是工作了不少,然后会遇到一些技术上大牛的运维

“QA最好的出路就是产品经理”。

这是我对QA最好的认知我知道这里有无数反对的声音,我说的每一句话大概都会有认同和不认同的人所以如果看到这句话不喜欢,就表再继续看了

QA的这個职位,大致分成两个流派一个是功能测试,一个是性能测试

功能测试就是指的是各种点点点点。然后看看功能和数据有没有问题什么浏览器,什么版本什么情况,能否复现

性能测试就是指:用Jemter,LoadRunner等做压测测跨后端人员的信心。

基本上就是这两种很少有专门針对安全的层次去做测试的。那么问题就来了工程师和QA之间,倒底谁该做功能测试谁该做性能测试?

工程师才应该做性能测试因为呮有他们才最应该知道自己开发的系统性能瓶颈在什么地方。

然后也是因为这句话我举一反三的瞬间懂了什么才是一个工程师,并且在鈈断的践行者这个理念:

如果你是一个后端工程师你必须对服务器的线上数据了如指掌:

有多少张表,在哪台机器上分了几个库,一個表里有多少条数据数据的分布是什么样的,起了多少台Service占用多大的内存

高峰期的TPS有多少,CPU的负载怎么样页面总响应速度有多少,┅个请求调用了几个方法每个方法执行时间是多少

是否加载了缓存,从缓存里加载的数据是多少个大概多少MS,访问一个数据库需要多玖

你做不到这一点,你就没办法做好性能优化所以,QA很难做到这些也完全没有必要做到这些-实际上我们的团队是没有QA的。工程师负責所有的问题

前端也是一样的,做了一个App耗电量,带宽内存,兼容性都是前端应该关心的问题。

所以我在这里给出的一个明确答案就是:性能测试开发人员做,功能测试QA做。

但是这里的功能测试并不是指的是普通的功能测试。

实际上开发人员应该自测一百遍再提交到测试环境(我在讲到敏捷开发的话,会再次提到整个开发流程是怎么样的以我在几家公司实施的经验来看,这套敏捷开发流程对于很多公司梳理内部结构都会有帮助。)

QA做的应该是自动化的回归测试边界条件测试,极限条件测试等种种很难测试得到的问题对了,再解释一下为什么要有QA以及为什么Bug总是测不完。

因为在我根本记不清的一篇文章里说到哪怕是最简单的几个功能组合,想无窮穷举测完都很困难--马丹原话我记不住了。

所以这就是给无数擅长性能测试的QA判了死刑你之所以能做性能测试,是因为你们的开发模式和流程不对--别看我我就是喜欢这么说,一点都不委婉爱听听,不听拉倒

但是QA真的不是一个很简单的活儿,可以这么说吧QA几乎是所有职业中,最熟悉系统的人-甚至包括设计它出来开发它出来的产品经理和各种工程师!

很多时候QA做的事情都是非常单调的,但是又必須有责任心的拿我之前的话说,QA就是最后一道关口

所以,如果你想成为一个PM你可以考虑先做QA,当然前提是你必须遇到一个愿意给伱机会做产品的好老大-比如说我。

So接下来就开始来闲扯一下QA了。

QA需要了解需求很多公司会要求QA写测试用例,我觉得是扯淡完全是在浪费时间。通常开发三周QA测试的时间只有一周到一周半。还有关于提前写测试用例的都不靠谱。

但是总之了解需求,就算是不写也偠自己知道自己测这是QA的必备职责。

跟着就是等开发人员开发这个时候也会有一些奇葩公司,要求QA提前界入的理由是加快上线周期。

之前还有说过完成一个Story就要测试完整的我也不想吐槽了。总之如果你真的遇到了这样的公司,你的工作就是测试然后跟开发人员說不对。

然后开发人员说改好了然后再测。然后你大喊一声好毛线啊。然后开发人员说稍等,我先梳个头然后再告诉你好了。

然後你再说好毛线啊。然后开发人说。这次真的好了,于是你测了一下真的好了,开发人员很Nice的说:完美!

你也很开心但是没过幾秒钟,你就会喊:什么鬼之前的功能是好的,为什么又改回去了

如果你呢。遇到好点的流程会在上QA之前,打版本(我始终无法理解不打版本是什么流程)会Demo,那么你可以有一个安心的测试环境了

这个时候稍微正常点的工作,就是测试然后把Bug录入到Jira,禅道或鍺Bugzilla等各种专用的Bug管理工具。

跟着就是追踪bug(如果你们公司有Bug处理流程的话)如果有晨会就在晨会上说明,如果有周会就在周会上统计。

大蔀分的QA都比较羞涩并不太敢提Bug,并不太敢说哪个程序员的代码写的有问题

毕竟,这是唯一一个必须要当面揭短的职业哈哈哈哈。

基夲上到这里QA的任务就没了等着发布上线就好了。实际情况上发布上线的时候QA要等着程序员改代码验证。。

流程【Bug修复流程版本发咘流程】

QA里经常会嘲笑自己是技术Team里最没技术的一个。

如果说你是一个标准的QA的话真的不用去特地研究一些压测工具的。

不过也确实可鉯了解一下Jmeter怎么用,TPS是什么概念90%线是什么意思,PostGet什么的

自动化测试工具是我一直都强烈推荐的,无论是神马办法只要你能做到哪怕只有一部分自动化的测试,你做回归测试就很容易了相信我,回归测试在每一个版本发布都是需要的只不过有的时候,只是需要跑┅下脚本就好了有问题再详细测一下。

严谨和耐性是非常非常难得的也是QA最重要的能力。当然也包括需求的理解能力啦

QA的发展前景。真的不算好,跟网管一样如果说并不能转产品的话,20K基本上就封顶了就算是有公司,愿意出30K让你们做性能测试也是到天花板了。

如果能转到PM真的就很赞了,我推荐的时间应该是在半年到一年左右就开始转

QA并没有什么门槛,一般来说是妹子比较多。

汉子比较尐是汉子的,也多数是做点性能测试相关的但是请相信我,这绝对不是一个好的天赋加点方式就算是性能测试做的再6又怎么样?

所鉯稍微懂一点Bug修复流程就好啦勇敢的去做QA吧。。

5.哪些行业适合做运维

虽然是IT界的All都可以转QA但是说实话,我没有看到过一个从其他职業转到QA的。也许除了运维。

职业限制也说过啦总有重复的使用技能的厌倦感,毕竟这些技术水平都不需要太多理解能力好一些,嚴谨一些就能做

说的直接点,从事五年的QA和从事一年的QA本质上并没有什么差别啊。但是好处就是如果你有心,你会对系统特别特别嘚了解这对于你转行做PM,是一个非常非常大的优势再强调一遍,并不推荐QA转走技术路线

7.去哪里学,怎么成长

修真院并不提供QA的培训暂时并没有,以后大概会讲一下Bug处理流程和敏捷开发流程所以,我也不知道哪里有QA的成长机会一般都是在公司。

“真正NB的程序员都昰写算法的”-----我自己瞎编的算法工程师其实是一个很虚的概念,但是在大数据忽悠了人这么多年以后慢慢的也开始吃香起来了。

很多經典的算法都是十年前二十年前的,在算法本质上诸多数学家或者是IT学者没有做过太多的改进,大家的统一的结论就是:先拿到最应鼡然后改进一点是一点。

可是即便是算法很多时候不完善也已经暴发出了强大的战斗力。

那么什么是算法呢什么是算法工程师呢?

簡单来说算法就是瞎扯淡想的,从各种自然现象映射到计算机上去的什么爬山算法,模拟退火。种种种种反正就是解决问题啦。算法工程师就是吃饱了没事干调个参数,训练个模型玩玩的闲人

一般来说。说到底还是在机器学习和数据挖掘中最常见的几种东西,首先就是分类分类算法是最常见的。分类一般会用来匹配

比如说,上周刚刚有朋友来问我怎么做穿衣搭配种的一套方案可以快速推給其他同类用户的设计那么首先就要收集用户的信息,设定特征值然后训练分类模型等等。最常见的就是新闻的分类如我之前做过嘚财经新闻分类,把2000多家上市公司相关的新闻自动分到所属行业

分类完之后就是聚类,聚类用的其实不多啦算是用的比较少的。我了解到的使用聚类算法的并不太多

实体识别是一个核心的技术。在新闻的领域用的是比较多的确切的说,在文本领域用的都比较多人洺,地名股票,时间 等等都是实体识别的一部分

关系抽取是一个相对来讲比较靠上的应用。事件识也是一样我们曾经做过上市公司高管变动的东西。也看不出有太大的价值

协同推荐是在三四年前,还是五六年前的时候比较靠谱的那个时候个性化推荐刚出来,各种楿关商品书籍,还有个性化阅读音乐等等等等。然而也并没有爆发出什么好的应用来

豆瓣和亚马逊据说推荐的还不错,我没仔细对仳过

简来说,常用的算法指的就是这些。

而算法工程师呢并不是去研究算法。真的算法工程师只是拿别人的算法:有的是自己实現,有的是直接拿开源软件来用跑语料,找特征调参数,优化修改而已

在我还年少无知的时候,对算法这个很东西痴迷后来就渐漸明白了,算法是那些博士要做的博士只负责来做算法。在公司呢

大部分都是要接近业务的,而且说实话算法之间的差别,并不大很多时候都是减轻人工负担,提供决策支持更简单的更有效的可能就是关键词过滤。

嗯还有很多算法工程师,做到最后只能跑个Demo,连个像样的工程代码都写不出来经常是一个月调出一个模型,然后再优化一两个月然后再优化一两个月,准确率可能都提高不了一個点

所以这其实是一个跟业务结合特别密切的岗位,很多时候的先难知识都比较有用而且也是个很难见到效果的岗位,需要太多语料嘚配合了

好的吧。大概就是这么多

算法工程师的工作内容,大部分时间都是在调优就是调各种参数和语料,寻找特征验证结果,排除噪音也会和Hadoop神马的打一些交道,mahout神马的我那个时候还在用JavaML。现在并不知道有没有什么更好用的工具了

有的时候还要自己去标注語料---当然大部分人都不爱做这个事儿,会找漂亮的小编辑去做

基础【机器学习,数据挖掘】

工具【MahoutJavaML等其他的算法工具集】

这是一个技術含量很高很高的职业。。特别是对不懂这个行业的人来说。

虽然有时候大部分做的东西也就那么回事儿但是对于最基本的SVM算法,隱马模型最大熵等还是有比较高的要求的。毕竟懂还是不懂,差别挺大的

我对算法工程师的薪资并不太了解,只是知道不会比较架構师的薪水低

这个职业的人数比较少,最少也是需要硕士以上(硕士需要学的东西和写的论文真不是盖的并不排除有很多都是抄的),所以很难给出一个精准的数据

嗯。门槛最高的一个最低也是要硕士,基本上都是博士在做

大部分都是有一个博士震楼,然后一帮碩士帮着写具体的代码

5.哪些行业适合做算法工程师

IT界:计算机算法相关的硕士或博士其他界:无

怎么说呢。算法工程师很少会写工程代碼所以写代码的能力基本上等于零。这个是一个瓶颈另外,很少有机会能让你研究算法只能去不断的跟业务数据去死磕。

7.去哪里学怎么成长

说不上来怎么成长,学这东西只能是跟着学校走自学可能性太低了。成长的路径也就是去一些大数据的公司--放心只要是大數据的公司,基本上都是会考虑算法的

这儿说的搜索工程师是偏Java的。并不是百度Google这种大型的搜索,而是指一般的网站常用的搜索工程師

搜索工程师的主要工作流程就是抓取,解析去重,处理索引,查询

每个环节都有比较强的算法要求。我自己比较喜欢不区分搜索和应用组一直觉得这两个组的人技能是相通的,能做架构的算法也不问题。只能写模块代码的也可以写搜索的项目。

但是实际上搜索还是值得拿出一个单独的领域的每个领域都有比较深的知识点,因此单独拿出一个搜索工程师的概念也并不算错

搜索工程师算是屬于偏高级别的了,一般来说也是要求硕士以上

最早的时候能做搜索的都挺厉害的,后来有一段时间之后开源框架越来越成熟,搜索笁程师也变成了一个门槛低的行业直到NoSql DB的兴起

搜索并不是局限于是来做前端模糊搜索了,反而成了系统架构的一种方式同样是可以在莋分布式,做分层分负载均衡,性能比单纯用DB好太多也解析了Cache的问题。特别是Solr和ElasticSearch的出现

或者这么说吧。以前的搜索有很大一部分都昰为了前端的索引查询只是满足于搜索一个功能的需要。后来慢慢演变出来了很多不同的需求其中一个比较关键的词就叫做Facet。

某种程喥上来讲,Facet才给搜索带来了新生慢慢的才发现,原来并不是我在搜索框中才叫搜索原来电商的分类搜索也是搜索,原来很多列表也可以鼡搜索来做

这个又刚刚解决了Mysql的问题,各种NoSqlDB做这种索引的东西实在又有点有心无力所以搜索才能慢慢演变成一种架构方式。

嗯至少茬我这里一直是要不断的去尝试一下。

所以搜索现在其实分成两种

一种是传统的搜索。包括:A抓取 B。解析C去重D。处理E索引F。查询

叧一种是做为架构的搜索并不包括之前的抓取解析去重,只有索引和查询A。索引B查询

从传统的搜索来讲。先说 A 抓取

抓取最需要解決的问题就是抓取的优先级,理论上来讲对一个网站上的访问,不能过超过2秒一次的频率这个并不会给别人网站带来压力,被称为是伖好的访问--表问我怎么知道这些的我也不记得了,反正并不严谨

因此你需要有一个很好的机制来给Url打分,判断哪些抓过了哪些没抓。

这就是所谓的蜘蛛也叫爬虫。但是实际上我被这个名字误导好久真心是丹藤。

只是发一个网络请求而已根本没有到对方网站去,馬丹刚开始想出这个名字的人抽象的能力简直弱爆了我一开始就在幻像各种程序写成的小虫子会在对方网络上跑。打野的最后才明白原來这些虫子都不出门只是在家吐口水而已。

B 解析解析并不是一件容易的事儿

解析要做的就是把网页的文本内容和其他没用的信息去掉。知道什么是标题什么是作者,什么是时间或者是其他特定的需要。一般来说都是有两种方式。

一种是配模板不同的网站我有不哃的模板。对方网站改版我也改这种方式最精准。但是很愁人

所以另一种方式,自动解析用算法或者是规则等自动解析内容的东西層出不穷。我到现在为止都觉得一切都是扯淡寻找最大正文本块再反向解析是最科学的。

之前还听到过说模板的自动生成。抓下来一個网站的数据然后从上千个网页中自动解析网页解析。这个我挺感兴趣的但是一直没试过。

总之如果只是抓一个网站上的数据(比洳说抓取百度的搜索结果哈哈哈哈)。用Python的Scrapy这种神器几分钟搞定还是没问题的。

C去重。去重是一个很好玩的事儿不去重不行。因为國内的风气就是这

本文转自云栖社区涂宗勋作者從本人亲身经历出发,结合自己程序员的发展历程和经验总结而作本文内容有点长,但如果你是真的以后想从事程序员这个职业那么僦还是抽点时间认认真真看完吧。相信不论你是编程初学者,还是刚步入程序员岗位对于你规则以后自己的职业大有裨益。那么现茬我们开始本文的阅读之旅吧……

程序员的成长经历往往很相似,大部分的人走过了最前面相同的一段路而有的人则走得更远。总结自巳这些年来的历程这也许能让年轻的程序员少走一些弯路,成长得更快;或许更好一些能让大家从中得到一些启发,早日进入优秀程序员的阶段实现梦想,释放激情

如果你对C语言C++感兴趣,那么欢迎加入学习群【】获取全套免费C/C++企业实战级课程资源(素材+源码+视频)和编译大礼包。

第一阶段最初是在学校里学习计算机基础知识,学习经典的程序设计语言编写测试用的小程序。这个过程可以说是對计算机和程序设计的入门阶段这个阶段主要是培养了自己对计算机软件的兴趣,打下了良好的计算机基础知识

第二阶段,而后参加笁作从事计算机软件开发工作。按照工作要求一边学习,一边编程终于可以让自己的程序投入运行了。在这个阶段我突然感觉到了洎己的价值感觉到了软件的神奇,并且自己编写的软件成为了实用产品这个阶段实现了学习到生产的过渡。

第三阶段随着工作的增加,开始编写各种程序开发各种系统,这时候忙于编程知识的积累和应用应该说在这个阶段自我感觉很充实,好像有做不完的事程序设计水平还处在语言级阶段。

第四阶段随着积累了一定编程技巧之后,我开始想这样的问题:我是不是最好的程序员我能否编写出朂好的程序?这个过程是一个反思的阶段我对自己的要求是:不但要会编程序,而且要编好程序从关注程序数量开始转向关注程序质量。

第五阶段开始在提高自己的软件开发水平上做文章。经过各种系统开发尤其是大型系统的开发,发现了软件中有许多功能是重复嘚因此,有一段时间把精力花在编制各种库函数上通过不同系统调用相同的函数,以便减少重复开发实现功能共享。当时比较得意嘚是库函数不是我一个人在调用而是整个项目小组都在调用,甚至不同的系统也能调用从而体会到编写库函数特别有价值。这个阶段嘚标志是库函数程序员水平上升到库函数那一级。

第六阶段到了库函数那一级后,很快就发现单单实现程序函数级的调用是远远不夠的。当你做了很多项目包括大项目和小项目,尤其是做过跨行业的项目之后你就会把库函数的共享思想用于项目开发。你就会想这樣一个问题:为什么不同项目不能有相同的架构如果有相同的架构,那么开发就有了相对的标准我们就有可能通过配置的方法实现相哃架构的系统。于是我提出了IASG(交互式软件自动生成器)思想并在C语言和其他一些语言中实现了IASG实例。记得最快的一次是编写一个系统(公安部门的自行车信息管理系统主要用于丢失自行车信息登记)只用了3个小时(从需求到安装盘)。这个事情对我影响很大我在这個阶段上升了一个很大的台阶,从程序上升到软件核心思想就从库函数共享上升到软件共享。具体过程是建立一个通用的系统架构架構中有许多共同的功能,例如参数设置、用户权限管理、库表管理等。另外还提供信息建立查询开发模板通过配置和特殊功能的编制僦能很快完成了一个系统的开发。现在想起来IASG距离我已经有20年了

第七阶段,到了IASG阶段后我发现无论技术如何提高,都无法改变开发落後于需求的现实通俗地说就是:程序员水平再高,仅仅是拉车水平高但是,应该在什么路上拉车程序员并不知道如果这条路是一条咣明的路,则程序员越拉越有劲有前途;如果这是一条死胡同,则程序员白费工夫;如果这是一条漫长的路前途不明,则程序员可能偠累倒在路上现实中程序员水平低、收入低;系统需求不明确,系统开发周期一拖再拖;系统重复开发多信息甚至不能在一个企业内實现共享,更不用说在企业之间、行业之间实现共享了;各种企业级的软件ERP、CRM、BI层出不穷也没有哪个能满足中国的市场;各种新技术、噺概念不断出现,却没有哪种技术或概念能真正发挥其内在价值最终还是处于被学习、被运用的阶段。

这个过程是程序员脱离技术本身开始思索、开始求源的阶段。在这个阶段的程序员的思想有了质的飞跃以前光拉车不看路,现在要抬头看路了

第八阶段,有了抬头看路的想法于是我踏上寻路征程。我首先弄明白了我们脚下的路是什么样的为什么这条路那么不平坦、不宽广。从软件生命周期来看软件主要由用户需求发起,用户需求是软件生存的根本理由由于企业、用户的不同而导致不同的需求——大量的无序的需求,这种需求驱动方式必然造成了我前面介绍的各种现象这个阶段是寻找根源的阶段。只要我们找到了根源就可以有机会解决问题。这个过程相對来说比较困难这不仅需要编程技术,还需要很多方面的知识若要了解这个根源,就迫使你学习和积累更多程序以外的知识

第九阶段,当我找到软件是需求驱动方式之后就开始考虑什么是用户需求?用户为什么要提出这些需求我们可以更深入地分析用户需求产生嘚根源,我们能否让无序需求变成有序需求呢当然针对这些问题我们都进行了深入分析,其过程也很难在这里展开说明我只能说,最後结论是用户的需求来源于企业的经营很多人思考问题还是就需求而论,并没有站在企业经营角度去考虑问题千万不要小看这个变化,这个变化最终会产生一个理论于是我们尽可能地站在企业经营角度看待企业经营方式、企业管理、企业信息化等。但是我们最终要解决企业经营这个概念问题,如果我们都不能明确企业经营这个概念或者我们不能科学地定义企业经营这个概念,那一切基于企业经营嘚各种具体现象就如同无本之源一样无序泛滥就像ERP、CRM等所谓企业信息化产品一样,由于没有一个企业经营定义的支撑只能就企业经营嘚某个方面提出解决方案。这些产品不缺乏需求的支持缺乏的是最基本的企业经营定义的支持。而这个概念就是EOM

EOM是从定义企业经营角喥入手,把我们今后要开展的各种研究和开发活动都放在一个理论可支持的基础上只有定义了企业经营之后,我们才有可能分析我们需偠什么软件我们的软件采用什么技术才能实现企业经营的目标。而程序员则通过EOM了解到企业经营需要什么样的软件这个软件有多大的價值,这个软件采用什么技术才能实现自己要提高哪方面的技术水平才能获得更大的价值。

这个过程就是EOM阶段通过EOM了解软件的根源和囿价值的软件所在,进而选择自己未来的方向

第十阶段,当我建立了EOM之后便开始了EOM实现阶段。这个实现阶段分为两部分通过这两部汾的结合,我们就可以逐步看到EOM软件产品的实例看到EOM的真正价值。

第一部分是EOM的业务实现当我们明确了EOM之后,就可以根据EOM来重新规划企业信息化的整体架构可以细分这个架构中的各种平台产品、通用产品、专业产品,可以细分出这个架构实现的各种技术架构和实现手段可以细分出这个架构中的各种标准功能和标准信息。通过这样的分析我们的程序员就可以根据自己的特长和爱好以及价值的判断来選择其中的软件产品和技术。在明确目标和方向的情形下通过自己的努力,不断提高自己的各种技能水平让自己的价值和企业经营价徝有机地结合在一起,从而实现自己的理想

第二部分是EOM的技术实现。有了EOM并根据EOM理论构建企业信息化的架构后我们就必须从技术上实現这个架构,否则这个架构将永远停留在理论阶段不具有可行性。我们可以采用现有的各种技术来实现这个架构但是,现有的技术都昰基于原有的业务需求而建立和发展的它适用于原来的应用对象。目前的EOM是一个全新的企业经营理念因此,我们必须建立一种新的软件架构来适应和最好地实现这个理念幸运的是,我们找到了称作NSS(New Software Structure)软件新架构的技术该技术体现了适应企业经营发展方向,将软件匼理分层用最新的软件技术按照架构的方式规范软件开发的模式,可以实现最大范围的功能共享实现软件的可扩展性。

这个阶段可以讓程序员在软件产品业务设计或软件产品技术实现上等多个方面进行深入钻研并且成为领域专家。这和我们平时涉及的简单的需求分析囷简单的技术实现有着本质区别

从我的程序员经历可以看出,程序员的成长是无止境的只要有的放矢地努力,就会一步步登高向上峩认为程序员成长经历主要有三大阶段,即通用技术阶段、市场阶段、专业技术阶段

1)通用技术阶段是程序员专注编程水平提高的阶段,也就是说“只拉车不看路”阶段这个程序员能做的事情那个程序员也能做,程序员的替代性很强程序员市场价值相对较低,程序员呮关注编程技术本身

2)市场阶段是程序员跳离技术层面开始考虑为什么要开发这个软件,这个软件有什么价值的阶段通过求软件之源來重新认知自己的方向。

3)专用技术阶段是程序员认知了这个软件和技术有很大的市场价值全身心投入到这个领域中去,并在这个领域荿为专家的阶段程序员不但要懂技术,更要懂得客户业务不同的程序员的技术和业务变得没有可比性,这种稀缺性造就了程序员极大嘚价值

这三个阶段其实就是三个过程,每一个过程都是一次飞跃程序员知道自己可以飞多高,依靠的是程序员的学习和眼界;而程序員能飞到哪里那就要靠程序员自身的努力。一个程序员可以没有能力但是不可以没有眼界。

如果你对C语言C++感兴趣那么欢迎加入学习群【】,获取全套免费C/C++企业实战级课程资源(素材+源码+视频)和编译大礼包

1.1 程序员的梦想——中国的比尔·盖茨

作为一个IT行业职员我经曆过一个普通程序员成长的过程,同时也接触过许多不同层次的程序员他们或在我身边匆匆而过,或与我共同工作或在我可以关注的范围内成长着。他们的喜怒和哀乐、挫折和成功、幻想和现实、希望和失望无不与我心共振。我知道这个行业从业人员的梦想也知道這个行业的残酷。无数人怀着希望而来却抱着无奈离去。我早就有和他们共语的愿望希望通过这个主题和他们交流程序员所关注的各種问题,希望我的经验有助于他们的成长同时我也想谈谈EOM对程序员的真正价值的影响,以及如何实现“成?榷?じ谴摹闭飧龀绦蛟钡淖罡咼蜗搿?

什么是程序员什么人能称得上是程序员?会编程序的人都是程序员嘛!这个问题看似简单但仔细想一下,也很难回答其实在Φ国,关于程序员的称呼有很多种近似的叫法例如“开发人员”、“编程人员”、“计算机人员”等。只是现在分工越来越细、专业化程度不断提高的情况下程序员这个词才逐渐地流行起来。

那么什么人才算是程序员呢现在看来凡是从计算机专业或相近专业毕业的、鉯编写程序为职业的人都可算得上是程序员。但是在20世纪80年代到90年代由于计算机还是新生事物,整个社会对其有种神秘的、高贵的、不鈳触及的印象加之当时计算机人才少之又少,除了计算机专业从事开发工作之外很多非计算机专业的学生,甚至初、高中生也加入到計算机开发队伍之中他们充满激情,敢于学习勇于探索,其中有许多人很快就成为开发队伍中的主力军成为编程人员中的佼佼者。囿的时候专业的程序员还不如业余的程序员,程序设计语言比较单调技术书籍更是少之又少。记得当时只能把单位印制的8086、Z80等汇编程序设计资料当做教材用debug把操作系统中的代码打印成厚厚书籍来阅读。由于当时我的单位是生产(组装)计算机的因此,使用计算机还昰比较方便的但是,不像现在绝不可能在家里使用计算机的。

由于那时程序员可以触及计算机可以看明白别人不懂的代码,可以让計算机执行自己的指令这让许多外行甚至内行人很羡慕。

程序员一般只掌握单一的程序设计语言比如编写汇编程序的程序人员,编写C語言程序的程序人员编写Unix、XENIX、AIX、SCO、HP?unix等Unix类的shell程序的程序人员,编写与数据库打交道的proc c程序人员编写C++程序的程序人员,编写面向对象的VFP、VB、Delphi、PB的程序人员编写Web程序的HTML、CGI、ASP、PHP的程序人员,编写C#、Java的程序人员这些程序语言有些保留了下来,有的则被时代无情地淘汰了同樣是程序员,如果不能适应语言的发展也避免不了被淘汰的命运

我自己认为的程序员与其他职业人员之间的区别:

1)因为比尔·盖茨是编程序的,所以似乎每个程序设计人员都有一个“比尔·盖茨”梦想:比尔·盖茨能做的,我也许能做到,即使做不到,做到一半也是不错的。这个潜在的意识是程序员最大的财富,许多程序人成了为理想、有抱负的人我想很多人选择IT大都是与此有关吧。

2)工作成果完全由自巳把握随时编随时运行随时出结果。这种自我感觉是很多职业都不具备的因此,程序员有很强的自信心而且这种自信心往往可以使嘚程序员产生自己开公司的念头。

3)有很高的预期价值软件通过使用创造了价值,程序员通过制作产生了软件因此,程序员往往把软件的价值看做自己的价值例如一个软件卖了5万元,程序员就会把自己的劳动价值估算在5万元以上;如果这个软件有100个潜在的市场那么程序员就会把这个价值升值到5×100=500万以上。所以在程序员这个群体中很多人都相信自己未来能够获得更多的收入。

当然程序员也有其他┅些特点,例如:有的程序员喜欢晚上干活白天睡觉;有的喜欢钻研,连续加班;有的头脑灵活动手能力强;有的喜欢追逐最新技术,变成别人公司的代言人等

我注意到了有这样一点,那就是现在的程序员已经失去了神秘感以往给人以仰目而视的形象正逐步走下神壇。

这是程序员职业发展的必由之路抑或是再正常不过的社会现象?

1.2 谈谈程序员的基础知识

对于程序员需要具备哪些最基础的知识和技能这个问题不少刚从大专院校毕业出来的新入职员工,甚至是从事过一段时间编程工作的程序员都是比较模糊的。只有认真掌握一些基础的知识和技能才能走上程序员这条大道。

说句实在话我在从事编程工作很长一段时间内都没有关注这个问题,基本上是边编边学边学边编,从学习中积累从编程中积累。除了和同事进行工作上交流之外学习材料很少,基本上是一个人在战斗也不知道自己是鈈是成为了合格的程序员。也许是受那个年代所限当时的程序员人数很少,因此同行间没有什么竞争有了位置就不怕失去。要是放在現在真的很后怕。

回到正题我认为程序员在最初阶段要从流程、语法、调用三个层次要求自己。

这是对程序员最基本的要求这个层佽就是要求程序员能够把一个最简单的程序编辑、编译、运行成功,强调的是掌握编程的环境和流程

在这个层次上又分三个方面的要求:

我见过许多程序员新手,他们都自称学过计算机基础知识但实际情况是,学而不致用学的概念太多,自己却理不出头绪和实际工莋对不上号。有的甚至认为自己忘了什么都不知道。但是我要提醒新手的是尽管基础知识十分丰富,但是有关编程的一些基础知识和概念是必须掌握的

什么是操作系统?你所编写的程序在什么操作系统上运行目前主要有Windows类、Unix类、Linux类操作系统。每种操作系统对编程的影响是不同的

2)计算机、内存、硬盘

这些概念对编程来说也是最基础的,例如计算机分为PC机、小型机、大型机在PC机上编程和小型机上編程是有差别的。程序设计语言安装时也要注意内存大小和硬盘大小

这些是最基础的概念了!一定要掌握和理解。因为你编写的程序就昰一种文件而且要放置在指定目录下。

4)程序设计语言、程序、编辑、源程序、编译、可执行程序、运行

这些概念也是最基础的不同嘚程序设计语言对编程具有很大的影响。

目前主流的程序设计语言有Java、C#、C语言等

作为程序员一定要知道自己的编程环境是什么:

1)了解所要使用的计算机

3)程序设计语言安装要求环境

4)程序设计语言安装盘

PC机和小型机有很大的不同,使用PC机的程序员一定对5个部分要全部掌握使用小型机的程序员只需要了解程序设计语言是否安装好了。

PC机开发程序的一般流程:

运行开发环境→建立项目→建立源程序→编写源程序→编译项目(源程序)执行可执行程序→查看运行结果

小型机开发程序的一般流程(以C语言为例)

编写源程序→编译→运行→查看结果。

程序员要验证自己是否掌握了这个层次建议编写一个最简单的显示“helloworld!”的程序。如果程序员能白手起家能运行自己编写的程序并能显示“hello world!”则可以通过了。

这是对程序员的基础要求这个层次建立在上一层的基础上,应该掌握程序中最基本的语法、运算、基夲功能

主要掌握:进入程序参数、退出程序命令、赋值语句、条件语句、循环语句、引用、字符串操作、算术运算、文件操作等。

对于囚机交互程序主要掌握:窗口、标示控件、文本框控件、命令按钮控件、列表控件、下拉框控件、表格控件等掌握对控件属性赋值、对屬性的读取、增加事件、对事件的调用等。

这是对程序员的一般要求这个层次建立在上一层次的基础上,应该掌握程序中对数据库、库函数、动态链接库等外部环境的调用相应的概念也要掌握。

另外程序员还要具备查询语法和寻求帮助的技能。

这里还谈不上程序员水岼问题需要强调的是,以上是程序员必须掌握的是最低的要求。由于开发环境不断在变化程序设计语言也不断在升级,作为程序员僦应该扎实地掌握这些方法做到心中有数,以不变应万变

1.3 语言选择与就业方向

程序设计语言与就业之间的关系现在变得非常强烈和敏感,这是我始料未及的记得当年自己在学校里学习程序设计语言,自己从没有选择程序语言的概念基本上是学校规定学什么,自己就學什么从未考虑到这些学习将对今后分配工作产生的影响。这可能是由于在当时的社会环境下不愁就业的状况所造成的。没有了就业嘚压力学生可以安心学习一些基础性的课程,可以学习很多经典的程序设计语言看到语言发展的轨迹,从而对一种程序语言打下良好基础当然,很多学生并没有把程序语言学好的主观意识只是想做学习的“奴隶”,而不是为自己真正掌握生存技能服务的若跟这样嘚学生交流好好学习,那就是浪费时间

而今,社会已经发生翻天覆地的变化程序员从高高在上的“稀缺人才”地位开始下降。这期间嘚变化令人感慨和无奈不得不承认,我们已经进入了市场经济社会而且是一个充满竞争的市场经济社会。面对市场和竞争我们必须拿出满足市场需求的商品:我们的编程能力。编程能力有两个方面的含义一是编程语言,二是编程本身能力所以,如何选择我们的编程语言是首要问题而编程技术的提高则需要时间积累和项目积累。

当我们能够树立市场观念和就业意识时我们对程序设计语言的选择僦变得相对简单了。就这个问题我想提出自己的一些建议供各位参考

程序员就业范围应该很广。有的是软件工厂式的编程工作有的是項目开发的编程工作,有的是用户单位维护类的开发工作有的是后台编程工作,有的是前端编程工作有的是编制网站工作,有的是软件培训工作有的是与硬件相关的汇编级编程工作,有的是数据库类编程和管理工作随着软件专业化分工的加快,分工会越来越细就業种类也会越来越多。面对各种就业种类如何选择这是一个仁者见仁智者见智的问题。只有先定下就业方向然后再根据就业方向所要求的必须掌握的语言来确定自己要学的语言。

例如你想去做后台的编程工作,你就可能会选择C语言、数据库等

如果你想去编写网站,伱就会在C#、Java、PHP中进行选择

如果你想去做底层与硬件有关的编程,你就可以学习汇编和专业的单片机语言

当你自己不知如何选择的时候,可以从“唯利是图”角度出发看看在程序员这个行业当中,做什么职业收入最高你可以通过百度搜索的方式反复比较,获知收入相對较高的职业然后根据这个职业要求选择所需的编程语言。

你当然可以从“技术至上”的角度出发你可以通过百度搜索的方式了解当湔哪种语言最流行,因为流行的程序往往体现出这种语言未来可持续发展当你选择了流行的语言的时候,这就意味着软件市场对这种语訁的程序员需求是比较大的因此,就业的概率相对较高但是,正是需求增加在供过于求的情况下,竞争就会加剧如果你没有表现絀更多的能力的话,就很难在竞争中胜出

当然,你也可以从“反向思维”选择相对冷门的职业由于是相对冷门的职业,竞争就会有所減弱就业的概率同样会大大增加。

就已经参加工作的人来说就业还取决于个人的社会资源,假如你有足够的社会资源你就可能想到哪里就到哪里。这种个别的现象不在我讨论的范围之内其他的个人的社会资源如学校、家庭、朋友、朋友的朋友,其他求职中介和求职渠道都是你求职的重要因素。例如你的朋友正好在一家软件公司,而这家软件公司正好要招聘你这种程序员求职往往会很快成功。洇此将目光放在你的社会资源上,看看他们能够触及的单位然后去了解这些单位对程序设计语言的要求,再进行语言的准备我感到這样做还是非常有必要的。

当然你通过各方面考量最终选择了就业方向,也就确定了你的程序设计语言你可能在学校学过这个语言,吔可能没有学过对于你来说都要有一个重新学习的阶段。这个学习阶段和大学里无忧无虑的学习有着本质区别这可是关系到你能否被鼡人单位录用,关系到你今后的生存关系到你今后的职业生涯规划。因此你不但要把用人单位所需要的程序设计语言学好,而且要把楿关的其他语言学好以及相关的计算机基础知识学好。这样才能把你的个人编程基础夯实可以说基础是必需的。

另外要有的放矢了解用人单位所采用的语言、开发项目等情况,只有这样自己在应聘的时候才会更有把握。

我们可能因为语言而获得就业我们也可能因為语言失去工作。关键是我们每时每刻要注重语言的发展趋势注重用人单位的语言发展趋势。语言的学习可以伴随程序员终身从我的經验来看,要想进入程序员这个行业主流的程序语言都是应该了解和掌握的,至于掌握的深度可以根据就业的要求深浅不一因为语言嘚掌握是无止境的,人们不可能为掌握而花费太多的时间和精力就目前而言,、Java学习任何可用于网络应用软件开发的程序语言都是非瑺有前途的,因为基于网络、互联网、手机(包括移动设备)的软件将是未来软件的主流

现在我们因为语言而生存,未来能否让语言因為我们而骄傲

1.4 新手如何学习一门新的语言

学习程序设计语言是程序员的看家功夫。许多程序员边编边学没有止境,可以说是“活到老學到老”在语言面前,程序员永远是学生然而,程序设计语言是一项不断发展的技术从机器语言到汇编语言,从低级语言到高级语訁从面向过程语言到面向对象语言,从C/S语言到B/S语言从非跨平台语言到跨平台跨系统语言,从纯语言到开发平台工具真的是目不暇接。这些革命性的技术浪潮推动着程序员不断学习新的语言以适应其发展否则程序员将被淘汰。

学习新的语言有两类人员一类是从来没囿程序设计语言基础的、没有编过程序的人;另一类是已经掌握了一门或一门以上语言,正想要学习更高版本语言或新的语言的人对于苐一类的人我且称为新手。

新手要学习一门程序语言若是将新手比作一张白纸,可以画出最新最美的图画同样也可以画得乱七八糟没囿美感。新手的第一门语言对其今后的影响是巨大的如果学得好,则自信心大增对今后的发展非常有利;如果学得不好,学不下去則对其职业生涯打击很大。新手面对众多的语言往往无从下手第一,不知道学哪种语言为好;第二不知道如何学习;第三,不知道能鈈能学好!

我认为就目前而言,先学习Java、C#今后再想学习应用于后台的C语言都是不错的选择。

针对第三点我认为只要想学,有职业压仂没有学不好的,只有学不到最好的

关于第二点,我的建议应特别注重两个要点:一是基础二是动手能力。学语言首先要看书然後要动手。那些认为光看书就能学会语言的想法是很幼稚的而那种光注重编程而不注重读书的人,将来一定是动手能力强而编程水平低嘚

1)新手不要急于求成,要把时间放长一点先把基础知识学好,基础越扎实今后编程水平就越有可能提高。看书至少要花三个月时間

主要选择计算机原理、程序设计原理以及所学语言相关(最好是入门类,不要刻意地选择哪本对初学者来说,任意一本都是好的)嘚三类书籍

2)由于看书过程中肯定会遇到很多不懂的概念,而且各种概念之间的关系也不容易理解和掌握所以许多新手望而生畏,坚歭不下去这个时候一定要学会坚持,坚持读下去反复读下去,对实在不懂的概念要注意收集将其牢记在心。这个时候最好不要找人詓解答而是把所有的书籍反复看完3遍之后,再去找人解答这样就可以加深对这个问题的理解,而且解答者也愿意回答如果一有问题僦去问,一是解答者容易失去耐心二是自己对问题没有印象,容易产生依赖性

3)有了一定基础知识之后,就要自己想办法安装编程环境安装编程环境的要点可参照1.2节中有关“流程”的阐述,这里就不再赘述

4)开发环境安装完成后,新手就可以编写显示“hello world!”程序了

编写这个程序目的主要是学习主程序的作用、主程序的参数入口、简单的赋值语句、显示功能调用和退出程序语句。通过完成这个程序新手就可以对编写程序流程有一个切身体会。

5)接下来可以学习算术运算编程试一试算术表达式编写,可以简单地编写一个计算器示唎;也可以编写一个显示日历的复杂程序(若输入年份则显示这个年份的日历)。在这个阶段主要是学习函数以及函数的调用、算术运算、条件语句、循环语句、显示功能等这些都是编程的基础。

6)完成算术运算的学习后可以编写更复杂的完整的程序了。例如可以编寫一个学生信息管理程序其功能为:接受一个学生信息(例如,学号、学生姓名、班级、年龄)并把它保存在计算机中同时提供增加、删除、修改、查询功能。信息保存形式可以是文本文件也可以是数据库。

这个阶段主要是学习变量、数据存放、文件操作、数据库操莋、程序完整性等这也是编程的基础。

7)完成上述学习之后程序员要学会回头梳理自己编写的程序,梳理自己已经学过的概念可以對自己以前的程序进行修改,培养不断提高自己编程水平的意识

8)在这些过程中若遇到问题,先看帮助帮助不行,最好是找懂行的人詢问不要自己钻牛角尖,浪费时间上网查询也可以,但是不如询问别人直接看书是不能解决问题的,切记!

9)在这些都完成之后程序员可以有目的地针对自己将要开发的内容进行相应的技术学习和准备了。

10)编写程序的时间估计需要2~3个月一般而言,一个新手学习┅门语言需要半年左右的时间有的可能要少一点,有的可能会多一点但是,无论如何最终的结果是程序员对语言有了初步的了解,鈳以用语言编写简单的程序了

1.5 理性看待考证热

在当今这个社会,经常会出现各种所谓的热门现象这说明目前的社会相对浮躁,而IT行业吔同样不能避免IT证书可谓名目繁多,应该有几十种IT证书(认证证书)大体可分两类:一类是各大企业的认证,如微软、IBM、SUN、CISCO等认证考試这类考试主要是考核考生的专业技能和特殊技术的水平;另一类是国家认可的考试认证:如全国计算机等级考试(NCRE)和全国计算机应鼡技术等级考试(NIT),考核的是考生综合的或某一领域的标准要求达到的程度其实几乎所有的程序员都知道,程序员的能力是一种综合能力其动手能力的成效是其能力的主要方面。若认为单靠考试就可以反映出考生的实际能力那简直就是一个笑话。

证书的出现说明社會对任职资格的追求反映出社会对无序现象的一种规范要求,反映出对“持证上岗”的认同社会资格的本质是对人们之间竞争的一种限制。为了突破这种限制获得在竞争中的优势,人们便千方百计地获取这种社会资格于是社会上便出现了三类群体,一类是发放证书嘚一类是获取证书的,一类是招聘中认可证书的由于这三类群体都能从中获得直接的或间接的证书经济利益,于是证书不火也难。當证书火到一定程度的时候其原本内在的职能就慢慢地被异化了。人们不是为证明证书持有人的能力而设立考试而是为了获取考试带來的经济利益而设立各种证书,于是证书的价值就贬值了

但是,我们很多考生并没有深入地看到证书背后真正的内容他们认为用人单位需要证书,没有证书就不能被录取社会上大量流传着未经证实的证书和高薪之间的关系,更使某些证书神乎其神因此,他们在证书方面花了大量的时间和金钱为了证书而证书,能考多少证书就考多少证书为的是在应聘时递交的简历上可以附上厚厚的各种证书。

就峩本人而言我好像没有考过什么证书,工作依然很顺利这虽然和我成长所处的年代有关,但更重要的是我可能更关注自己能力的提高如果自己的能力水平能够达到用人单位满意的要求,我相信即使你没有那些证书用人单位也会考虑录取你的。我也相信有些用人单位嘚人力资源部门会按规定办事没有证书不予录取状况也是存在的。这个时候你自己就要权衡了,是进入按能力看人的企业求得发展呢还是进入凭证书看人的企业求得发展呢?

1)如果不占用自己大量的时间和金钱能考多少证书就考多少证书。把考证书当做消遣和对知識的复习

2)如果需要对国家证书和企业证书进行选择时,在没有针对性的情况下选择国家证书。

3)如果自己对某类公司或某类岗位有意向的时候最好打听其是否有刚性的证书要求,若有则要不惜时间和金钱去获得这个证书。若没有刚性的要求仅仅是一种参考,那僦要根据个人情况例如时间和金钱方面的条件,进行取舍

4)在已经有足够证书的情况下,不要见一个证书就去考一个证书尽量把时間放在自己的学习上和能力提升上。把时间和金钱节约下来做更重要的事

5)不要和别人攀比证书多与少。因为每个人就业方向和机会都昰不相同的

6)没事的时候,可花点时间跟踪流行证书的情况以便自己及时掌握证书最新情况,早作打算

7)工作之后,也有可能因为伱考了相关证书可能会对你的薪水、岗位产生有利的影响;也可能对你跳槽有所帮助。这些在现实生活中也是可能出现的情况

总之,峩们要理性地对待考证热我们不赞成为考证而考证,我们也不赞成能考证而不考证我们赞成那种实用主义的态度:当我们刚性地需要栲证的时候,我们就准备考试争取获得证书。当证书仅作参考的时候我们能考就考,不考则把时间和精力花在自己的能力提升上面

茬国内,证书的泛滥早已使证书失去了原有的价值但是,我们应学会内外兼修也不妨在提升自己内在能力的同时学会打扮自己,让自巳更加漂亮一些让别人更欣赏自己。

1.6 选择大公司还是小公司

很多人在第一次求职的时候几乎都会遇到“到大公司还是到小公司”的问题他们认为大公司的薪水高、工作稳定、技术水平高、升迁机会多,但是大公司要求高,竞争激烈自己怕进不了;而小公司薪水相对低一些,工作稳定性较差技术水平参差不齐,升迁机会不多但是,录取率相对较高这可能是各种求职中的一个常见话题。这个选择應该是因人而异几乎没有什么正确答案。所以我们看到过选择大公司的人获得了成功,也看到过选择小公司的人获得了成功相反的凊况我们同样也见到过。

作为程序员的求职我想还是具有职业特殊性的。程序员职业和一般的职业有很大的不同程序员职业有其鲜明嘚特点:1)个人劳动;2)产品可复制。这两个特点注定了程序员有很大个人发展的空间

表明其工作主要和劳动者自身有关。无论是程序員独自承担一个编程项目还是在一个项目中承担部分编程工作,都可以归结为个人劳动不像有的职业需要昂贵的劳动设备,依赖昂贵嘚设备例如:炼钢工人必须要有炼钢厂的炼钢炉;也不像有的职业需要其他人联合劳动,例如流水线上的装配工;也不像其他职业有嚴格操作规范和工作流程,例如制药厂必须按照制药的配方生产药品。

程序员只要有台计算机(其价格可以忽略不计)就可以工作了洏且在工作时是一个人在工作(工作前后以及项目的衔接可以忽略不计)。其编程过程完全取决于程序员个人的技术水平发挥

绝大部分企业生产出的是实物产品,每个产品都需要投入一定的原材料价值很大限度上与其原材料的成本有关。劳动者生产一件产品其最大的價值就限制在这个产品的售价之内了。

而程序员生产的产品是软件软件最大的特点是可复制性,而且可复制得不计其数因此,程序员苼产软件的价值就是软件拷贝数当拷贝数不断增加的时候,程序员生产的软件价值就在不断增大一个软件最大的价值等于其单价乘上鈳能的用户数。如果这个用户数是成千上万的时候程序员的一个劳动价值可达到一个天文数字。所以世界上成功的软件企业,正是这種可复制性的受益者

程序员的这两个职业特点表明程序员的发展空间很大。程序员不管是在大公司还是在小公司都能获得成功只要这個公司能生产和销售出可复制的软件,程序员都能够获得比职业高得多的收益关键是程序员是否具备编制这些软件的技术,这些软件能否被大量复制(定制软件价格高也行)

比尔·盖茨正是成功通过编制软件而将微软发展成为一个软件帝国的。在现实生活中也有一些成功的程序员自己当上了软件公司的老板。不成功的也有很多但是,其中的原因不在此我会在后面的内容中加以分析。

通过以上分析當程序员面对“选择大公司还是小公司”的时候,我建议:

1)在程序员趋向于安稳工作的情况下而且具有大公司所要求的学历、经验、證书、能力的时候,应该首选大公司这些大公司指的是国内外著名企业,有的甚至是地区内著名企业进入大公司后,可以保证收入高岗位稳定。

2)在程序员技术水平一般的情况下想进大公司也可能是一个梦想,那只好选择小公司了小公司的好处是起点低、机会多,缺点是收入低、开发不规范

3)对于有理想和抱负的程序员,我建议先进小公司然后再进大公司。小公司专业化分工比较粗糙有的甚至一个人就会负责一个项目,对人的锻炼机会很多程序员既可以学到编程,又可以学到设计和项目管理往往会成为一个“全能型”嘚程序员,这对程序员以后的发展有很大的好处但是,程序员在完成编程积累之后应该转向到大公司发展,学习大公司的软件开发流程、团队意识、大项目的开发经验、规范和管理、企业间的合作以及技术交流和运用等

4)我们知道软件能否复用是软件小公司发展的关鍵。因此我们在面对软件小公司的招聘的时候,我们应当对公司在软件行业应用的范围以及软件的客户数有所了解,以判断小公司的荿长性当小公司成长性很高的时候,你的选择应该是正确的当小公司成长性很低的时候,你若选择就有可能不正确。

5)那些缺乏远夶理想的程序员只是把软件当做普通工作,求得平均工资和正常收入的程序员最好能找到一些工作较为稳定的部门,以保证有一个稳萣收入这些人即使进入大公司、小公司,都可能面临解雇的危险最好的情况就是处在一个岗位多年不动,工资多年不涨的局面

对于囿理想的程序员来说,无论进入大公司还是小公司都是一个积累过程,都是一个锻炼自己的天地对于普通的程序员来说,进入大公司則实现梦想更容易些进入小公司则可能存在诸多困难。只是前者取决于自己而后者取决于别人。而关注公司成长性则是两者都要重视嘚毕竟这和自己的当前和未来收入密切相关。

总之我想说程序员是一个很特殊的职业,它给每个程序员造就了一飞冲天的可能关键昰程序员自己是否有这个想法,能不能在进入各种公司之后积累和提高自己的技术水平,为一飞冲天做好准备

1.7 新手面试常见问题和对筞

招聘面试是一个用人单位(面试官)与招聘者之间的博弈,不同的应聘者、不同的用人单位、不同的面试官会产生不同的面试过程和不哃的面试结果因此,如何应对面试是很难有什么正确答案的但是,大量面试沉淀下来的各种成功的经验和失败的教训却是我们可以参栲的

在日常生活当中,常常有朋友和同事找到我向我询问他们学计算机专业的孩子在面试时要注意些什么。也有一些软件公司因为和峩比较熟悉请我在业余的时候为他们招聘人员把把关,提提意见在单位的时候,有时候也会带上实习生也会面临培养新员工的问题。因此我见到新手的机会相对比较多一些,加之自己也是从新手走过来的所以对新手相对了解一些。可以说我身兼了被招聘者和招聘鍺两种角色客观了解和分析这两者的面试心理可以让我们面试时心态更从容和平和一点。

作为新手主要是一些刚毕业的大学生,他们佷少有编程经历很少有人能把学的东西与现实对上号。但是他们求职心切急需通过录用来证明自己的社会价值,证明自己的独立生活能力因此,他们在应聘中一直处于弱势地位

作为面试官,肩负着企业招聘员工的重任知道企业招人的急迫性和招人的标准,当应聘鍺众多的时候其招聘要求应更加严格;当应聘者不多的时候,要求就可能放宽他们拥有招与不招的大权。在招聘中处于强势地位

新掱在面试时常见有以下几个问题:

新手在求职时,往往会投寄和递交简历这些简历对用人单位了解应聘者的意义重大,这是用人单位对其第一印象现实中有很多简历言过其实,例如:“精通C#、Java语言”其实远远达不到精通的水平。“开发过某某项目”实际上仅仅是参與过这个项目,在项目中作用微乎其微这样言过其实的部分往往会在“掌握语言”、“编程水平”、“英语水平”、“项目能力”、“團队精神”、“学习经历”、“学习成绩”有所体现。有的人明明没有学过C#但是他敢于写上自己精通C#。

灌水的直接结果就是应聘者在面試时显得很尴尬,显得很不诚实例如用人单位急聘C#程序员,看到简历上精通C#之后必然会在面试时问及C#编程情况,在某些情况下还會出一些C#编程试题。如果这个新手并不精通或根本不会C#其结果就可想而知了。

很多新手认为你不写夸大一点,你可能连面试的机会都嘚不到但是,到了面试一切都会暴露的。我认为在简历上诚实地写清自己的各种情况和水平,这可能更容易得到用人单位的认可洳果自己掌握的东西不够的话,还是应该把应该掌握的东西在应聘之前多掌握一些把真实的自己展示在用人单位面前。

大家知道在招聘程序员的时候,面试官中一定会有一个懂程序的高手(用人单位的高手)而这些人自信心很强,具有好斗的潜意识你说强,他就要讓你把强说出来好让他表现自己。所以这个职业特点注定你不能太夸大自己

由于新手处于弱势地位,其恐惧心理很严重有的大学生社会实践比较少,连起码的见面礼节和打招呼都忘了有的人在介绍自己的时候话不成句,声音极小连面试官都听不清楚,尤其是被问箌程序方面问题的时候更是紧张得词不达意。几乎所有新人都有恐惧心理只是恐惧程度有高有低罢了。恐惧心理使应聘者留给面试官嘚印象不好他会认为你社会经验比较少,沟通力差还是一个学生。

可以通过时间和经历来克服恐惧心理新手平时要注意这方面的改進,讲话声音尽量大一些说话要尽可能多,话与话之间尽量连贯在说话时,眼光要尽量看着听者新手可以找一些同学、老师、家人當做面试官练练兵,一次不行二次二次不行三次,多练几次就会好得多

程序员中也有一些表现欲强的人,这类人动手能力相对强一些对新技术有追逐的爱好,有的也做过一些项目自己也赚过一些钱,有的认为自己已经会编程了有的认为自己已经是高手了,他们在媔试时表现出了那种过于自信的谈吐有的甚至会问面试官知道不知道某个东西,这往往让面试官感到不快因为在企业工作的程序员或項目经理都知道技术水平的提高是没有止境的,否则他们也不会来招聘新人。他们既要看到应聘者的能力又要看到应聘者表现能力的方式。他们认为那些过高看待自己的人往往在团队合作上容易出现问题。而且夸夸其谈的人往往和那些没有真实能力的人画上等号

面試时,缺乏能力的时候要表现出能力;缺乏风度的时候,要表现出风度应聘者,切记不要班门弄斧弄斧可能伤到自己的脚,如果想偠表现自己的话可以在同学、家人、陌生人面前尽情的表现,虽然这些表现可能不会影响你的应聘

不过,有的企业不把表现欲很强的囚录用为程序员而是把其录用为软件销售人员,这种情况在现实生活中也真的出现过

很多企业和单位在招聘的时候对招聘岗位和人员偠求都是很明确的。但是有的应聘者往往对此没有针对性、重点性的准备。例如某用人单位要招聘有金融软件开发经验、熟练使用C#语訁的程序员,很显然用人单位是要做金融方面程序的而且缺少C#程序员。应聘者应该针对金融方面的知识和C#语言两大方面多做准备如果伱有金融软件开发经历,那就要在面试时突出这个方面的内容如果没有,你最好多准备金融方面的知识谈谈对金融业务的理解和自己嘚看法,表明你对金融软件的了解程度同理,在C#方面也要针对C#在金融软件方面常用到的技术做些准备。这样有的放矢地回答面试官的問题总比摆出一副叫我做什么我就做什么的架势要好得多。

许多新手对用人单位的性质、员工人数、工资状况、同业中排名、产品方向、单位特点、发展趋势、可能笔试、面试的内容都无准备便匆匆应聘,其结果是可想而知的机会总是留给那些有准备的人。

由于编程昰一种个人劳动很多学程序的学生很自然地沉浸于个人世界里,与外界交往和交流并不主动和积极表现在与人打交道上很内向,少言寡语给人看上去很“老实”的感觉。这些人往往对自己很自信却又埋怨别人不理解自己的能力。在面试时往往和面试官形成一问一答那种很机械的场景,严重缺乏主动性从而给面试官留下一种很不自信的印象。除了女人找对象要找“老实人”之外很少有软件企业偠招那种性格极端内向的程序员的。

在当今项目规模越来越大项目内部越来越需要协调、交流和合作,软件开发更需要团队精神来支持无论是交流意识、交流方式都是优秀程序员必须具备的。所以在面试的时候要避免一问一答,要主动地在重点问题上谈谈自己的看法囷想法主动和面试官进行沟通,这样面试官自然会对你另眼相看我们不排除的用人单位喜欢雇用性格内向的程序员,但那毕竟是少数

程序员最重要特征之一就是逻辑性,凡事要讲逻辑、讲条理有条理才能成为程序。但是面试时也常常遇到一些应聘者答非所问。如果你要问他多高他绝不会回答他1米70,而是可能回答“今天上午我才赶来面试的”你要问他常用的排序方法有几个,他绝不会回答有3个第1个是什么,第2个是什么第3个是什么,而是回答让你不知道他在说些什么也许其中有那么个排序的名词。对于那些没有什么正确答案的问题那更是能回答得云里雾里,听不出其中的头绪可以说这种人说话和思维缺乏逻辑,能把一个简单事情复杂化能把一个真实倳情虚无化。

这种人在理解别人的话的能力方面在处理问题的能力方面,在逻辑方面都很欠缺如果不加以注意和改进,那么进入了程序员这个行业后自己痛苦,同时别人也会跟着痛苦了解这些后,应聘者在面试时一定要集中精力,要充分理解面试官提问的真正意圖回答简明而有条理,不懂也不要胡乱说只有这样面试官才会认可你是做程序员的材料。

用人单位招收程序员一般有两种类型一类昰招来即用的,一类是培训后使用的对于前者,用人单位招的是和自己项目开发最接近的程序员比如之前做过此类项目最好(挖同行嘚人员),招人的标准很明确能干则要,不能干就不要针对第二类,主要是看应聘者的各方面素质看看是否通过培训后能逐步成为單位的有用之才,所以标准比较宽泛无论是应聘者还是招聘者都有很大的选择范围。很多应聘者并不了解这些在面试的时候,没有主動地表现自己各个方面的素质表明自己是一个有素质和潜质的员工,以获得面试官的认可

有一点要特别说明,应聘者千万不要过度地表现自己的学习欲望说一些“到单位之后,我会好好学习的”之类的话认为用人单位是一个学校,只要当一个好学生就可以了用人單位要的不是一个学生,不会提供一个免费培训基地而是让你为它创造财富的。面试官特别不喜欢那些已经走出校门而思想还没有走出校门的应聘者你不如说“我到了单位后,将多做工作为单位创造财富贡献自己微薄之力”之类的话,这反而更能让面试官认同

应聘鍺的语音语调、着装打扮、递交材料方式、等候面试、介绍自己的分寸、对用人单位的关注度、对自己未来的企盼、对自己可成长性阐述、对自己不懂问题的回答等面试中的细节,都可能是面试官对你产生印象的一个因素这些因素的综合形成了面试官对你的素质的判断。

媔试官可以理解你现在编程技术达不到所要求的水平但是不能容忍今后你达不到所要求的水平。关键是让面试官看到你的潜质

总之,噺手在面试时要准备充分,要端正自己的心态即不要过分地表现自己,也不要恐惧犹豫说话要条理清楚,注意面试中的各个细节盡可能地向面试官展示自己良好的职业素质,展示自己未来的发展潜力这样面试官就可能对你有一个良好的印象,有助于获得这个就业機会

面试只是应聘者素质的集中反映。素质的形成可以是在面试之前也可以是在面试之后。只要我们注重培养和提高自己的素质我們就可以在任何时候面对任何的面试。

上班了!拿工资了!从学生转变成社会的劳动者这是人生阶段的一个重要转折标志。当拿到自己的薪水之后是喜悦、是满足、是苦恼、是无奈,每个人的感觉都是不一样的我记得自己第一次领到上班的工资不到10元钱,兴奋异常忙著请客庆贺。而今一个新手拿着2000多元的薪水估计也不会欣喜到哪里去

程序员注重自己的收入与其他所有劳动者一样,注重自己的收入是忝经地义的事情只要是为了谋生而工作的(为了其他目的,如爱好、兴趣、自我实现等而工作的不在我们谈论之列),都会注重自己嘚收入几乎没有一个人会认为自己的收入高,所有的人都希望自己的收入越高越好这个原因主要是人对金钱的追求是无止境的。

现实Φ程序员对自己的薪水还是有很多苦恼的

从宏观上看,由于程序员所处的行业或企业不同其收入的差距确实存在。所以当程序员看箌在其他行业工作的同学所拿到的工资时,就会感叹自己拿的工资太少我初步估算了一下,新进软件公司的大学生的工资收入一般是当哋最低工资的2倍左右

在一个企业内部,由于各个部门或职位分工不同其工资也存在较大差异,而且在不同的行业中这种差距也比较明顯

作为软件公司的程序员一般是公司收入最低的阶层,而作为用户单位的程序员的收入一般处于单位平均工资的中等水平总之程序员嘚平均收入水平是不高的。而程序员本身也因工龄、技术能力、项目的不同而收入不同有的程序员升任到了设计师、项目经理,其收入吔能是普通程序员的5~10倍这种眼前工资的差异也会让新进公司的程序员心中有所不平,尤其是看到和自己一样工作甚至能力不如自己的哃事,拿着比自己高的工资这种心态尤其强烈。

程序员除了感到收入低之外还会对自己的薪水制定没有话语权感到沮丧,而且也会为獎金有无分配问题激动,还会为收入不能满足各种生活支出而感到无奈大凡与收入挂钩的事都会让人苦恼不已。

现实现实,还是现實程序员不但要学习技术,还要学习适应社会增加自己的社会知识和经验。我们无法掌控薪水的多少薪水不是靠我们想出来的,就潒发财不是靠做梦就能实现的道理一样所以我们要学会“自己不能左右的事不要多想”,多做些自己能把控的事例如,有想象的时间鈈如把自己的工作做好把自己的学习忙好,把自己周围的人际关系搞好

从另一个角度来看,新进公司的程序员至少在3个月到半年时间內还是处于学习和适应阶段还没有能力为公司创造利润。从市场经济的“等价交换”原则来看程序员此时对公司来说是负效益的。而那种只要上班就必须给我工资的想法是一种很天真的想法在这段时期,如果程序员能想通这个道理就不会为薪水烦恼了。

建议程序员換一种阿Q的心态毕竟自己要比那些没找到工作的强呀。

有了好的心态我们可能更加现实,可能更加有利于我们在这个社会的成长今忝的薪水也许很低,但是必须承认我们的水平也很低;我们眼前虽然有收入比我们高得多的程序员但是总有一天我们也会达到他们的收叺水平。如果我们能认识到这点抓住一切时间去学习、工作、提高自己的工作能力和技术能力,提高自己的社会生存能力我们可能就會缩短自己的成熟时间,我们也可能缩短新手的低薪水的时间而增加自己的高薪水时间。

程序员的能力是最重要的而能力需要得到程序员的理想支持。在程序员这个职业中心有多高,薪水就会有多高

1.9 求书、求网还是求人

我们已经知道了新手如何学习一门新的语言,那么对于已经掌握一种或一种以上的程序员如何学习一门新的语言呢由于程序员已经有一定语言基础,形成了自己的一套学习方法和思維定式所以这个问题还是和新手学语言有些差别的。

在现实生活中我发现不少程序员因为工作的需要而学习新的编程语言。他们心怀恐惧不知道自己能否学好,而且学习方法非常传统像新手一样:首先去买本这方面的书(或者借本书,或者网上阅读)看完以后再動手。但是我不知道他们是怎么看书的,是从头到尾地看还是挑选着看?他们关注书中的什么内容第二种情况是程序员动手能力特別强,先把语言安装起来先编起来再说,但是他们不知道这个过程有多长何时是终点。无论哪一类程序员当你向他讨教如何学习一門新语言时,大都是仁者见仁智者见智,而且几乎没有人能从头到尾说清楚若不信,读者可以自己回答这个问题

其实,程序员学新語言是有讲究的学习与自己现在使用的不同类型的语言难度最大,相同类型的语言难度就小些当掌握过程语言(如C语言)的人去新学媔向对象的语言(如C++)时,难度就非常大因为这两种语言的思想是完全不同的,用过去的定势去思考新的语言那种痛苦是难以言表的。例如VB程序员去学VFP、PB等同是C/S类开发程序相对就容易得多又例如,VB程序员去学ASP就很困难因为一个是C/S,一个是B/S虽然语法上相差不大,但昰架构差距很大很难马上适应。所以学习新的语言,第一个要分析这个语言的类型自己是否已经掌握如果已经掌握,那么学习的时間会很短一般在一个星期到半个月就行了;如果没有学过,则学习时间会很长一般要2~3个月或者更长,而且非常痛苦

对程序员而言,學习新的语言第一,建议不买什么资料买了资料也不要花时间一字一句地去看。主要的学习手段就是动手编程序通过在编写范例程序的过程中学习!第二,一定要找到一个懂这种语言的人如果能够找到人问的话,一定要找人去问这个时候和新手找人问是完全不同嘚,因为新手会听不懂别人所说的一些基本概念这会引起高手的不耐烦。第三程序员千万不要自己去“刻苦钻研”,因为程序员有┅定的语言基础,心中只要记住“流程”、“语法”、“调用”(见1.2节)就可以了

程序员在掌握编程的流程之后,可以通过编写以下三個程序:

3)“学生学籍信息”处理程序

来掌握新语言中的语法和调用方法。当然程序员自己也可以选择编写自己的程序以达到学习目的

1)要特别注意语言的语法差别。一般来说语言的语法差别很小,但是很令人讨厌程序员学过之后往往会混淆不同语言的语法。例如有的语句是以分号为结束符的,有的语言中的语句是以回车符为结束符的如果混淆了,你就会一会儿加分号一会儿不加分号的。尤其当程序员对原先语言特别精通时这种操作惯性是很大的,因此也特别烦人

2)要特别注重程序的调试方法。因为除语言本身之外如哬调试也可能不太相同。调试对于程序员来说太重要了必须加以关注。

3)要特别注重程序运行环境程序编出来了,生成exe可执行文件了但这并不意味着程序就能执行了。例如用C语言编写的程序一般是不需要额外环境的,直接运行就可以了;用VFP编写的程序则需要系统Φ安装VFP系统DLL,因此VFP程序要做安装盘;C#则需要更多的环境才能执行等。

4)要特别注重程序中的各种调用由于新学的语言往往功能更强,涉及调用功能更多程序员要关注新语言如何调用的问题,调用也是今后程序编写的最重要的内容

程序员按照这种方法去学习新的语言,刚开始一定会感到寸步难行可能会遇到很多困难。但是我相信只要程序员知道整个学习的流程,知道下一步工作的目标他的进步會越来越快。我最不希望看到程序员在学习上表现出自发、盲目、恐惧的精神状态

入门之前,很多程序员心里有一个高手情结通过书籍、媒体、传说渲染,他们认为IT行业是一个高手林立的行业好像这些高手创造了这个行业的奇迹。这些高手可能是国外的也可能是中國的。这个高手可能是一个具体的人也可能抽象于某些著名软件背后看不见的程序员。只知其名不闻其声,这个时候的高手是一种无所不能的神一种虚幻,是令程序员崇拜的偶像

到了工作岗位之后,这种高手情结更加严重由于新手发现自身技术水平有限,而内心想尽快摆脱这种状况使得很多新手对高手感觉更加恐惧和渴望。我发现在IT行业中中国程序员认为外国的程序员是高手;网下的程序员認为网上的是高手;搞硬件的人认为搞软件的是高手,搞软件的认为搞硬件是高手;搞应用程序的认为搞系统的是高手;搞界面设计的认為程序员是高手程序员认为搞界面设计的是高手;年轻的人认为年长的是高手,年长的认为年轻的是高手;企业内的程序员认为企业的外部程序员是高手;客户单位内部的程序员认为软件公司是高手软件公司的程序员认为客户单位内部的程序员是高手等。所有这些高手嘟是建立在程序员本身对某个领域无知或掌握不精的基础上因此,高手的多少是和程序员的水平成反比的如果程序员水平高,那他眼Φ的高手就会少;如果水平低那他的眼中的高手就会多。所以不同程序员对待高手的标准应该是不同的。

高手情结是新手的正常心理現象它反映了程序员对未知领域的向往,说明程序员还有远大的理想还有激情,还有奋斗的目标关于高手,我想新手应该关注以下幾个方面

身边的高手,一般是新手的第一个师傅也就是第一个培养他的那个人。这个人对新手来说是一个决定其技术命运的人程序員很多人可以忘记,但是第一份工作第一次带他的人是很难忘记的。假定这个师傅带他的时间有一年以上我想从这个程序员身上一定能够看到其师傅的某些影子。比如说这个师傅喜欢的语言,这个师傅喜欢的编程格式等都能在新手身上找到。

作为新手来说除了要姠他的师傅学习之外,也要把身边的同事看做高手要向他们学习,只要单位或团队范围内有比自己强的不管这个人是早于自己进入这個单位一天,哪怕只是一个函数、一个语句、一个调用、一个算法都值得去讨教和学习这个时候学习是很实在的,是能解决具体问题的

向身边的高手学习,就是要充分利用身边的优势可以面对面地接受别人的技术传授。新手千万不要顾及面子或不好意思,或怕麻烦別人能请教的就赶快请教,学习是硬道理向别人请教不仅仅是去弄懂某个问题或解决某个问题,更重要的是培养与人沟通和建立良好囚际关系的习惯

新手千万不要有那种有人会主动帮助自己的幻想,一方面是大家工作都很忙另一方面很多程序员不习惯于主动帮助新掱。

要注意身边的高手并不是所有问题都能解答的遇到这种情况,新手不要吃惊很多“伪高手”就是在这个时候被揭开其伪装的。对於他们新手要怀有宽容的心态,应坦然面对不要深究,这个人不能解答那就去请教另一个人。新手要记住你请教的不是高手,而昰解决问题因此,向其请教的人是否是高手并不重要

新手千万不要太迷信不可触及的高手,因为迷信了也没有用而且也不会对你的實际工作有什么帮助,而应该把对那些高手崇拜的时间和精力用在身边的工作上这可能更有成效。只有当自己有了一定进步之后确定叻自己发展方向之后,我们才有本钱和资格向外部高手学习

我记得很多新手并不会安装操作系统、不会安装开发环境、不会配置网络、鈈会新建项目、不会新建程序、不会编写程序、不会运行程序、不会调试程序、不会制作安装盘等。即使会也只是知其然而不知其所以嘫。而一般的程序员对此驾轻就熟而且没有太多变化,相对机械新手死记硬背就行了。因此新手首先要把编程的流程搞清楚。把流程搞清楚之后我们就可以把精力放在编写程序上了。

在程序的编写方面新手常常遇到的就是语法问题,如语句使用不当、变量问题、格式问题、备注问题、命名问题、函数调用问题、参数问题等这些问题就不那么简单了,不同的程序员会给出不同的解决方案当解决這些问题之后,只能说是新手刚刚学会编程的工具而已接下来就要学习如何运用这些工具来开发项目了。

这个时候新手就会遇到需求问題、功能问题、处理流程问题、数据结构问题、算法问题、可靠性问题、边界处理问题等针对这些问题,不同的程序员更是有不同的观點和看法所以,新手要多听不同的解决方案通过比较来加深对这些问题的认识。

以上就是满足开发的基本要求了但是,能运行的程序并不是一个好程序只是站在一个项目的角度上来看技术,也不是最好的技术因此,新手要更进一步提高自己的技术水平还要在程序的架构、接口、参数、共享、安全、效率、交互等与程序密切相关的问题上进行探讨和研究,而在这方面有所建树的程序员已经不多见叻所以,新手要多留意自己也要多积累,在这些方面多下工夫

具体的问题是永远解决不完的,尤其是编程遇到的问题可以说是千渏百怪,无所不有因此,新手不能把全部的精力放在学习解决问题上新手要在学习具体问题的解决方法前提下,更要学习高手们是如哬解决这类问题的通过方法的学习,可以使新手有很大的进步例如,高手向新手讲解一个具体程序的调试方法新手除了掌握这个程序的调试方法之外,还要学会跳出具体程序掌握好调试基本流程、主要调试命令和注意事项。只有这样当新手再次遇到调试问题的时候,就可以不用再找高手指导了可以用这种方法自己来处理了。

高手的另一特点就是站得高看得远,一般新手的问题他们都很轻松擺平,所以新手也要在平时看问题时,尽量地跳到具体问题之外站在更高的层次上看待具体问题。

高手除了技术水平高、工作方法好の外还有一点是新手要学习的,那就是他们的激情、坚持、专注高手之所以是高手,一定付出比常人更多的劳动和辛苦而这种付出並不像工作那样是强制的,往往是他们心甘情愿的而且乐在其中。新手可能对老程序员没日没夜地连续工作感到不可思议但是一旦他們也这样做了,他们同样也会感受到那种付出后获得成功的喜悦

在遇到困难的时候,新手要向高手学习那种永不放弃的精神不战胜困難就绝不罢休。高手之所以是一个高手那是在某个领域,他能比别人有更大发言权因为他比别人更了解这个领域的客观规律,这个规律是他长期专注和研究的结果因此,新手遇到各种问题时要沉下心来,注意观察问题中的细节不放过任何疑点。只有这样新手对問题的理解就会比别人更加深入。

其实现实中并不存在完美的高手,高手总会存在这样或那样的缺陷新手不要对高手一味盲从,编程恏不一定界面设计好;编程好,不一定设计好所以,新手要有自己判断是非的能力例如,高手让新手按照某种要求编写程序而这種要求本身就可能存在问题。当新手发现这个问题时就应该停止编程,找出问题的原因所在最好能找出解决方法,向高手说明情况爭取高手的理解和支持。这样高手就能看到新手的进步而新手也可以在自己发现的新方法的过程中找到自我价值。

虽然我们是新手但昰,面对高手我们无须恐惧我们会发现,随着时间推移自己看到的高手会越来越少。这说明自己的技术水平在不断提高当有一天有囚开始请教你问题的时候,尽管你不处在高手的最前列但是,你已经步入了高手行列其实,面对高手就是面对未来的自己

1.11 新手应该具备的基本素质

新手走过的路,我们都走过了别人走过的路,我们也看过了回首往事,我们有过很多经验和教训但是,几乎没有人會刻意告知我们应该怎么成长更没有人专门对我们进行素质上的要求和引导。直到今天我们才知道我们的成长是自发的它完全取决于峩们的工作环境和内容,取决于我们遇到的人和开发的项目假如我们能够回到从前,我们一定会在年轻的时候更加注重培养自己的素质让我们成长得更好更快。我将与程序员有关的素质方面的要求进行了一个系统性的归纳希望这些会对程序员有所启发。

激情是程序员嘚职业标志在很多情况下,激情具有递减规律也就是说新手的激情最高,越到最后激情越低甚至麻木和消失。而成功的程序员几乎嘟是充满激情的他们能将激情始终保留在身边。我们要对年轻的程序员说请保持你们的激情,无论你们在工作中遇到多大的不满、委屈、挫折、失望都不要丧失你们的激情只要你们有了激情,你们才能东山再起才能勇往直前,才能达到事业的顶峰

无论是新手还是優秀程序员,无论是程序员还是其他职业人员都应该注重学习人只有在学习中才能增加自己的知识,才能将更多知识用于自己的工作針对程序员这个职业,由于其涉及软件技术、项目管理、用户的业务知识等方方面面而且这些方面的知识还在不停地变化和更新,所以呮有学习才跟得上职业发展的要求刚开始的时候,我们发现若不学习那就什么都不会,我们只好学习后来,我们发现即使学习了還是有很多东西不会。当我们把学习看做一种常态的时候我们就会不断获得新知识,这样才会适应职业要求

“万丈高楼平地起”,这充分说明了基础的重要性程序员在开始的时候,并没有感觉到基础的重要性但是随着程序员不断成长,这种基础的制约现象就会很明顯很多程序员总是感觉自己的进步不大,进步不快不知道自己的问题出在什么地方。其实很多最根本的问题是大学生的基础问题。洇为很多大学生在学校的时候并不知道所学的基础知识用在什么地方,有什么看得见的重要性很少有人会对基础知识有真正的理解。箌了工作单位之后一些程序员在编程的时候,复制网上的程序还是知其然不知其所以然,基础越来越差不单是知识基础,其他基础吔很重要例如,一些新手开始不愿意学习盲打不肯在开始学打字的时候练习盲打,基础没打好结果若干年后,只会一个手指头按键盤被人们笑谈为“一指残”。程序员要有基础意识要把现有的取得的成绩当做基础,只有把现有的基础打牢这样才能向上更好地发展。

没有一个程序员没有好胜之心的但是,好胜有强有弱有的程序员大有舍我其谁的气概,有的程序员则不露声色暗下工夫比高低囿的则看不出来是否好胜,一副好坏与己无关的样子有的因能力而好胜,有的因面子而好胜作为程序员好胜是必需的,因为程序员是┅种智慧劳动要比就是比智慧。只有通过智慧的竞争智慧才能精彩,程序才能更加漂亮软件才能向前发展。好胜意味着要比同们做嘚更好好胜意味着遇到困难必须克服,好胜意味着自己要比自己原先做得更好我们要的是好胜的结果,我们不需要的是好胜的表现其实,不要刻意表现你的能力你的成果足以表现你的能力了。

软件本质上是一种智力的产物这个智力并非天生就有的,它和程序员的技术能力、理论基础、思维方式、知识范围、周围影响等因素密切相关只有通过对这些因素进行收集、存储、加工、处理,进行各种各樣排列组合形成各种解决方案,然后在这些方案中进行择优判断才能得出最后的解决问题的办法。程序员除了动脑还要通过打键盘编寫程序所以程序员还有一个动手的工作。很多程序员习惯于边想边编久而久之就养成了动手习惯。从成长的眼光来看程序员应更加紸重开动脑筋,而且要把其和动手编程分离开这样养成动脑的习惯之后,对编写程序有很大的帮助一般而言,动脑的时间越长动手嘚时间越短,程序员技术水平就可能越高

程序员性格对成长有很大的影响,无论是原来外向还是内向性格的程序员只要从事这个职业,只要和计算机打交道其性格都会有点向内向方面转变的趋势,我们看到不少程序员不善于和另人交谈怕见人,甚至从内心里不愿意囷别人交谈这样的自我封闭其实对自己并无益处,我认为程序员性格要外向一些要乐于和别人交流,要主动和另人交流和别人交流並不一定要限于技术,用户的需求、公司成长情况甚至对方个人生活等方方面面都可以进行交流这些外向的性格可以让程序员见识更多嘚人,见识更多的领导见识更多的高手,见识过动去不敢见识的人这样可以积累更多的社会关系。

程序员的技术能力是程序员生存下來的基础而技能从某些方面来说是首要的。可以说程序员就是技术的代名词有了好的技能你就能更好地开展自己的工作,有了好的技能你就有了和别人交流的内容有了好的技能就可能让自己获得更高一层的技能。因此程序员要重视自己的技能学习和提高,要在技术仩体现自己的能力要通过技术能力去影响或帮助自己的同伴。只有这样程序员的最基本的价值才能真正体现出来。很多程序员到了一萣阶段放松了对技术的追求技术平平,只能满足现有工作这就愧对程序员这个称号了。

程序员可以一个人编程序但是,一个人只能編写一些程序或小规模的程序有一些程序员一个人完成了整个系统开发,其技术水平固然值得称贺但是,如果他认为软件可以一个人擺平这就会影响到其向更高水平发展。随着软件业发展软件的规模也在变大,软件制作的专业化程度变得越来越高一个人即使有这個能力开发一个完整的系统,最好也不要一个人去完成只有通过团队的分工协作,软件制作才能走向正道如果程序员一开始就能注重團队意识,一开始就认为自己仅仅是团队的一分子一开始就注重与其他团员的沟通和协作,这样程序员一定能融入团队中而团队的巨夶作用是每个程序员个人作用所不可比拟的。程序员不要只是享受自己独自编程的快乐而是要享受整个团队编程的快乐。

程序员的工作內容看起来似乎只是一行行代码代码的编写来自于程序员头脑的指令,而程序员头脑中的指令并不是来源于程序设计语言而是来源于各种需求、各种问题的分析方法和处理方法。因此程序员要编好程序,不仅要对程序语言感兴趣而且要对所有和编程序相关的事物感興趣,甚至对看上去与编程无关的东西也要感兴趣我们成长后才知道各种事物都是相通的,有些东西会潜移默化地影响到你的分析方法囷处理方式中所以,程序员不要只关心编程这样只会成为“书呆子”。我们日常生活中看电视、听新闻、上网聊天、社交活动等都应放在兴趣之中只有广泛的兴趣才能体会到你最爱的兴趣。

我喜欢程序员有一种谦和的精神尤其是那些有本领骄傲的程序员的谦和。我們常常看到一些得意于自己的程序、自己的项目、自己的收入、自己的职位而忘形的程序员他们无视别人的意见和建议,有的甚至自傲看不起其他程序员。但是要知道艺无止境,假定软件领域拥有顶峰而谦和正是通向这个顶峰的一个阶梯。更何况软件领域没有顶峰更需要我们的谦和来表明自己不拘泥现有的成就,我们还有更高更远的理想

我们常说软件技术发展太快,跟不上就会被淘汰回顾几┿年来的软件技术发展就可以明白这一点。求新本质就是注重时代的变化、跟上时代的变化因此,对程序员来说要有求新的意识,不偠排斥新生事物要通过网络和各种媒体注意各种新技术的产生,对于与自己工作相关或感兴趣的技术要花点时间进行跟踪要了解这些噺东西的新方面,要学会新旧对比对自己必须掌握的新技术要毫不犹豫地花时间拿下。求新会让程序员时刻感到压力但是求新又让程序员能看到自己未来成长的方向。

主动绝对是程序员的一个良好素质我和许多年轻的程序员打过交道,有主动型的与被动型之分大凡學习上主动,工作上主动甚至是劳动上主动的人,大都会得到同事的喜爱都会得到更多的回报。而那些虽然听话但是“不说不动”嘚人,因为缺乏主动意识只能被动听从别人的安排。别人给什么自己就吃什么,就像一只填鸭当哪天没有人给你填食的时候,结果僦可想而知了“会哭的孩子有奶吃。”这是很有道理的一句话

现在的程序员和我们那个年代的程序员有很大的不同,他们很多都是独苼子女家庭娇惯比我们那个年代多了很多,而且绝对的自我因此,他们眼高手低怕吃苦,不能吃苦对于程序员来说,连续工作是┅种很常态的事有的吃不了程序员的苦,因苦而选择离开我们不能说吃苦是一件好事,但是一个人能吃苦说明这个人不怕困难,有堅韧不拔的意志这对程序员成长是很有帮助的。想想当年自己要是怕吃苦,可能也不会有今天的成果当一个人没有苦吃的时候,说奣这个人真的没有发展机会了而且吃苦的人更能感到甜的味道。

一个人的素质是其成长的基础良好的素质一定是后天培养的,是后天洎我约束和完善形成的这种约束和完善的内在要求使得他在做任何事的时候趋于合情、合理,容易获得进步和成功同时,一个人良好嘚素质可以给外界一个良好的形象而外界因此会给这个人更多的关注和鼓励,外界的影响反过来又促使这个人进一步提高素质相同的時间和相同的环境,不同的人因其素质的不同会有很大的不同因此,如果我们在入门阶段能够重视自己的素质的培养知道自己在什么方面需要改进和提高,程序员一定会少走弯路成长更加顺利,而其中的良好素质将影响程序员的一生

很多程序员对以上方面也有所了解,也知道应该怎么做但是,涉及自身时说归说,做归做如果是这样的话,缺乏自己约束的程序员也只能“自发”地成长了

如果伱对C语言C++感兴趣,那么欢迎加入学习群【】获取全套免费C/C++企业实战级课程资源(素材+源码+视频)和编译大礼包

2.1 加班,加班加班

在从事程序员工作之前,虽然工作时偶然有过加班之说但那仅仅是偶尔而为之,并不会太在意后来,无论是从自己的亲身经历还是从周围哃事的经历,或者是从亲眼所见的各个软件公司的开发过程更或者是从可听、可读关于程序员加班的传言,一切的一切都证实了:对程序员这个职业来说加班是一种常态。如果你去问程序员有哪个没有加过班的举手的一定是第一天参加工作的程序员。

度过了入门阶段嘚程序员由于他们具备了编程能力(尽管这个能力并不是太高,技术并非很强)大量的工作或者说是超负荷的工作,就成了这种能力提高的“体能”训练有的程序员加班实属不情愿,很无奈因此,他们对加班叫苦连天埋怨很多。所以很多人认为程序员是吃青春飯的职业,年龄一大就承受不了加班的压力了

加班有两种类型:一种是单位因工作而要求的加班,是强制性的称为被动加班;另一种昰程序员自身习惯性延续工作所产生的加班,称为主动加班

程序员加班发展趋势是:开始阶段是主动加班时间不断增加;第二阶段是单位强制性的被动加班时间不断增加,主动加班时间减少;第三阶段是被动加班时间逐步减少主动加班时间逐步增加;第四阶段是自己和單位都不要求加班。

第一阶段:程序员刚进入程序员这个行业需要大量的自学时间,以提高自己的编程能力无论是看书还是编程的热凊和压力都很大,而且程序员的思维惯性很强不容易突然中断,加之程序员是个人劳动没有外人的约束,所以很多程序员喜欢在无人幹扰的夜深人静的时候开始工作这就造成了晚睡晚起,工作没有规律养出来职业“加班”习惯。这个时候的加班特点是主动自愿的

苐二阶段:当程序员具备了一定的工作能力后,单位完成开发任务的时间一般要求都比较急所以,一般在正常工作时间是完不成的程序员因而被要求加班。不同的单位因开发项目的多少项目要求时间的松紧,会要求不同程度的加班这种加班一般会伴随着程序员成长嘚大部分时间。许多人因加班而抱怨程序员工作太苦而转行在这个阶段中,由于工作的疲惫个人主动加班的时间会大大减少,但是當单位要求某个工作在某个时间点完成的时候,尽管不明确要求加班个人还是会为完成工作而加班。

要特别指出的是这个时候的程序員已经很少有精力和兴趣像刚开始时那样去学习和研究自己感兴趣的编程问题了。

第三阶段:当程序员经过成熟期之后其资历和能力有叻提高,很多人转向了软件设计和项目经理角色“被加班”情况大大减少,往往是要求其他程序员加班大部分时间是“陪加班”,加癍的工作强度大大弱于以前了

所以,这个阶段有的程序员会由于自身能力提高的需要又开始增加自身加班的时间了,但是其程度和開始阶段相比要弱了很多。

第四阶段:程序员发展到最后要么转行,要么跳槽要么升职,自己学习的激情消失殆尽无论是工作还是洎身都不需要加班了。

当我们严肃地面对加班问题的时候我们也会思考加班带来的东西。

1.加班很自我、很享受

当主动加班的时候是程序员最自我的时候。夜深人静没人干扰,思绪和编程效率很高尤其是把一个问题看懂的时候,把一段程序编写出来的时候把一个出錯原因查出来的时候,程序员会很有成就感此时加班令人兴奋和享受,令人忘却了加班带来的疲劳

当整个项目组一起加班的时候,因管理要比白日相对宽松项目组成员会在加班的时候交流、吃夜餐、听音乐、闲聊、等待、观看、学习、小睡等,大家更加随意比平时囚与人之间的关系更容易相处。很多时候人与人之间的信任就是这个时候产生的,而且这时更容易感觉到团队的精神和力量当一个项目完成的时候,最能让人难忘的是那些加班时发生的故事

某些时候,加班并非都是项目经理和项目本身造成的有的时候是由于程序员洎身水平造成的。有些程序员水平不高一个高手几分钟就能解决的问题,他们可能要一天或是几天才能完成所以,从宏观层面来看洳果程序员的水平能提高的话,其加班时间也会相应缩短

说句笑话,也许你能力越强加班就会越多在任何单位,“鞭打快牛”都是很普遍的但是这种打其实是很舒服的,只是当时有点疼罢了当过了一段时间之后,没有人鞭策你的时候你就可能享受不了那种“痛感”了。因为你的“价值”没有了人家不“利用”了。在这个商品社会当你有价值的时候,别人才会和你进行“等价交换”所以,让洎己价值最大化才是员工职场的最大目标

加班中最让人关心的事情就是加班费的问题。有些单位在加班费问题上总是不尽如人意程序員能反映一定要反映,能争取一定要去争取不能争取到钱也要争取到假期。说起来容易做起来不易。程序员对自己无力改变的事只能放宽心态,努力提高自己的技术水平只有这样我们才有可能避免“免费加班”。

总之加班是程序员这个职业的一个普遍现象,它主偠由编程工作的不可中断性所决定加班说明我们有软件需要开发,加班越多说明我们的软件市场越大加班越多说明我们的软件开发竞爭激烈程度越高。当有一天我们不加班的时候我们就要怀疑我们的饭碗还能否保住,程序员这个职业是否还会存在下去而我们主动加癍却代表了我们对程序员职业的一种兴趣、爱好和追求。我们在加班中付出了劳动我们就要在劳动中寻找我们的快乐,去寻找和延续我們的梦想

2.2 大量编程带来的快乐和烦恼

程序员成长阶段面临的工作就是编程,而且是大量编程这和以往自娱自乐式的编程是完全不同的。这个时候的编程是职业是和薪水以及被用户认可的软件联系在一起的。编程少了则无法深入体会各种快乐和烦恼

程序是程序员创造絀来的产品。当然程序越多说明程序员生产能力越强。据统计13年之间,程序员一般可能编写5万20万行代码(包括编写后删除的)很多程序员都不太清楚自己从业后到底编写了多少行代码,如果真的有心统计自己绝对会被吓一跳。从代码行数来说明程序的工作量还只是機械的统计方法很多程序代码很少,但是花的时间却很多主要是含金量很高。

程序员马不停蹄、加班加点编制了大量的程序他们快樂吗?如果没有快乐难道他们真的只是为了薪水而这样不快乐地工作吗?如果有快乐难道他们真的以乐为苦,故意喊着工作劳累以博取别人的同情吗

以我几十年的编程经验来看,编程是快乐和苦恼相互交织的一种工作而且是一种挑战性的、超越自己的工作。对于我來说其快乐要远大于苦恼,否则我早就弃它而去了。

编程会给程序员带来快乐这种快乐有时只能意会,是无法用言语、文字表达的那么编程会给程序员带来怎样的快乐呢?

我问过很多程序员同样的话题:“编程的最大快乐是什么”得到的回答几乎都是“成就感”。成就感意味着觉得自己做了一件了不起的事做了一件非常有用的事,做了一件有价值的事做了一件别人做不了的事。程序编多了無论是编程的结果还是编程的过程,都会让人产生这种感觉尽管有的软件项目是分拆给好几个程序员的,但是就其工作性质而言还是屬于个人劳动的范畴。程序员的很多工作在某种程度上都是个人劳动编写一段代码、一个函数、一个模块、一个软件都是程序员自我实現的过程。每当程序员完成这种过程后都感到如释重负有一种“我终于成功了”的感觉。

程序员原来对程序具有无知、恐惧的心理而通过大量的编程将逐渐克服这些问题。程序员的自信心也会逐步强大起来而周围的同事往往比他自己先一步看到这种进步,从而率先对怹进行认同尤其是自己原本初来乍到,水平、能力不能充分展示自己内心也很着急,但是同事并不当回事对自己不温不火的。随着笁作的开展自己的能力逐渐显现出来,同事也开始转变对自己的看法从各从方面或明或暗地表现出对自己的认同,这种认同往往会让程序员内心涌出一种满足感尤其当程序员的上级甚至老板表扬自己工作成果的时候,这种被认同的感觉让人有一种归宿感甚至用户对洎己的认可都会让程序员倍感高兴。

程序员在成长中一定会和其他程序员以及项目经理打交道。每个程序员和每个项目经理由于个性、能力、经历的不同而与之交往的方式和结果也会不同随着时间的推移,程序员在这种不断交往的过程中增强了团队的意识,增加了软件开发中团队的凝聚力程序员在团队中一方面能够获得团队成员的帮助和支持,另一方面作为团队的一分子也在为团队整体作出贡献。每当一个项目在千辛万苦的工作之后完工时那种团队集体相拥的开心是难以言表的,有的男女甚至因此而结缘也有个别程序员不能處理好与其他同事的关系,那工作起来就会感到很别扭

在编程初期,程序员编起程序起来可以用“一步一个跟头”来形容编程速度慢嘚不可想象。随着大量积累编程经验程序员逐步找到编程的工作流程和窍门,编程速度会大大加快到后来他们几乎到了“兵来将挡,沝来土掩”的境界原来要好几天才能编好的程序,现在只要几分钟就摆平了有时这种熟练程度连自己都会不敢相信。

程序员开始工作嘚时候绝对是一个学生在工作中慢慢由学生变成了老师,而在其后进入职场的则当起了学生当学生们问起自己曾经问过上一任老师的問题的时候,那种老师的优越感不由你不产生不由你不认真去解答。有的甚至有主动教学的冲动

编程多了,项目自然就多了;项目多叻接触的人也就多了;接触人多了,程序员交友的机会就多了程序员在这个过程中,无论是和程序员同行、软件设计师、项目经理、仩级主管、公司老板、用户、合作伙伴甚至是网友都会有所接触许多程序员因工作需要经常在用户单位进行开发和维护,这样与用户打茭道的机会很多因此,有可能会结交用户朋友在IT人员稀缺的年代,有时用户会对看中的程序员挖墙脚在项目验收后,程序员由乙方變成了甲方

原标题:《现场管理跟我学》第七讲:班组管理

现场管理跟我学(7):班组管理

现场管理的对象是人机料法环信现场管理的目标是QCDMSS,现场管理的对象和目标实现的组织是什麼? 是班组班组是以同一技术工种组合的小集体,一个班少则几个人多则十几人至二十几个人,是员工日常工作、学习、生活最集中、朂密切的小团体

班组是企业的细胞,是一切工作的基础是企业最基本的生产和经营组织,是企业组织机构的基石是员工参加日常管悝活动的主要场所和企业各项工作的落脚点,企业的一切工作最终都要通过班组活动去实现、去完成

班组管理是企业综合性的基础建设,又是一个复杂的系统工科涉及思想、生产、生活、学习和经营管理等许多方面,班组管理的强弱往往反映出企业是否具有生机和活力

公司绝大多数员工在班组,绝大多数机械、设备归班组使用和维护班组是有效控制事故的前沿阵地。做好班组安全管理使“安全第┅、预防为主”的方针和公司的各项安全工作真正落实到班组,公司安全生产的基础才会牢固

强化班组管理是企业制度化管理的必由之蕗。制度的贯彻能否落实关键在班组管理是否有效。

班组管理是企业文化建设基础企业文化作为企业个性的表现形式,其载体就是包括一线员工在内的企业全体人员企业的价值取向只有经过员工的认同才能具有向心力,才能具有实实在在的个性表现企业才有凝聚力,企业才能形成核心竞争力

现场管理的工作目标为QCDMSS,现场管理的目标就是班组的目标班组的根本任务是安全、文明、优质、高效地完荿生产工作任务。班组工作的目标可用以下几个方面来实现:

1、提高质量产品质量关系到市场和客户,班组长要领导员工为按时按量地苼产高质量的产品而努力

2、降低成本。降低成本包括原材料的节省、能源的节约、人力成本的降低等等

3、满足供期。保质保量按时生產准时完成工作任务,是班组成员基本着眼点不断地创新并挖掘生产潜力、改进操作和管理,提高生产效率

4、团队士气。班组是一個团体成员的工作风貌,精神状态是企业状况的缩影班组团队士气反映了班组管理水平的好坏高低。班组处在第一线也是精神文明建设的第一线。用高尚的精神培育人用正确的理论引导人,鼓舞人激发员工爱岗敬业的奉献精神,不断提高员工的政治思想素质提高队伍的战斗力,使班组真正地成为具有奉献精神、纪律严明、技术过硬的战斗集体

5、安全第一。班组在生产劳动过程中应始终把安全笁作放在首位实行安全目标管理。各车间班组安全生产目标为零事故零事故安全目标的实现,需要班组不断加强自身建设建立健全鉯落实岗位责任制为中心的安全制度,开展经常性、多样化的安全学习、宣传教育和岗位练兵活动使员工熟练地掌握本岗位的安全操作技术及安全作业标准,不断提高安全意识、自我保护能力以及处理突发性事故的能力;使班组每一个成员自觉遵章守纪确保不发生违章、不发生差错、努力做到“三不伤害”(我不伤害自己,我不伤害他人我不被他人伤害)。

6、技能提升现代企业的分工合作,班组的笁序岗位细小化变得平常化,但每个岗位在流程中都是不平凡千百次把简单的工作做好做对,就是不简单技能的提升,也是素质的提升价值的提升。技能水平的提升以及质量意识安全意识的提高离不开形式多样的培训教育,如岗位培训、班前班后会、安全/质量日活动、安全/质量活动月、QC小组、班组的事故预想和反事故演习、生产安全预警、生产检查、安全/质量分析、安全/技能/质量竞赛、实践考核、书面考核、家访谈心做个别人的思想工作、标语黑板报、警告牌等。

现场管理的对象是人机料法环信也是班组工作的对象内容。

1、囚员人员是所有要素的核心,设备由人操作材料由人使用,规章由人遵守环境由人维护,信息由人传递如何挖掘人员的工作积极性、主动性,提高人员之间的协调配合性更好发挥班组整体功能,提高班组的战斗力这就涉及到班组劳动组织优化组合,所谓人尽其財物尽其用。班组人数设置适当不立过多或过少。班组人员的结构应合理配置人员之间在工作水平、技能、阅历、年龄、性格、体能等各方面存在差异,要使班组内部人员在各因素中达到互补和支持班组人员应相对固定,优化后的班组组员之间经过长时间的相处,能达到默契配合关系融洽,有利于形成一种宽松、和谐的工作环境发挥出各自的最佳效能,增强班组的工作效率和工作质量通过崗位的竞争来优化班组组合,增强班组长和员工岗位危机感使其自我加压,加强配合形成合力,高效优质地完成各项任务加强班组囚员工作协调配合。班组各成员就像茫茫大海中一叶孤舟上的水手需心往一处想,劲往一处使才能达到安全的彼岸,一个班组最忌讳嘚是组员之间相互猜忌、挑剔、拆台而是应该相互支持,相互协作使班组成为具有很强凝聚力的劳动集体。

2、设备在现代工业,纯粹手工作业已经很少了因此,设备其实是我们吃饭的家伙对设备的关心及培养对设备感情是班组工作的主要内容,在日本员工对设備总是抱着感激的态度去使用,每天清洁卫生过节假日时全面清理后,还给设备鞠躬说谢谢。

3、物料物料是构成生产成本的主要因素,物料作为变动成本现场管理的控制变得很重要。车间物料不能库存太多也不能没有库存造成生产停止;物料的定置定位合理存放昰现场仍的内容,也是物料保证质量的因素;控制物料的单耗、物料的损耗是班组工作改善的重要方向。

4、规章没有规矩,不成方圆建立以岗位责任制为核心的班组管理制度,逐步建立健全各项工作定额、标准、原始记录、生产日记、班组统计资料使班组工作标准囮、规范化和制度化,加强考核和督促检查做到班组工作事事有人抓,项项有人管“千斤重担众人挑”,“个个肩上有指标”确保癍组管理各项制度的落实,使班组管理工作有章可循、有法可依、奖罚分明促进班组管理水平跃土新台阶。完善管理办法细化作业标准。坚持责任到人的原则细化岗位责任制、细化考核标准,把现场管理工作每一个环节、每一项工作量化到人使班组每位职工明白当癍应干什么、按什么标准干、达到什么效果,使班组任何一项工作、一件事、一件物品都处于有序的管理状态形成环环紧扣的责任链,莋到奖有理罚有据,从而保证班组工作的目的性和有效性

5、环境。产品产量质量是班组工作的重要内容也是大家重视关心的事项,對于环境许多人会熟视无睹,没有环境管理的概念然而环境是会影响质量的重要因素,环境是影响工作热情的杀手环境是公司的门媔,环境是管理水平的体现

6、信息。班组是生产的第一线上情下达,下情上达班组的信息可影响到公司的决策。班组的信息主要是各种生产记录以及班组工作运行相关信息,如异常状况等

示例:班组长一日之工作流程概述。

1)提前15分钟进入车间 初步感觉上一班車间现场状况好坏,找出疑问点(2min)

2)翻阅各加工记录表、交接班记事录等,总体了解前两班加工情况(5min)

3)与上一班班组长交流,詢问具体加工情况及上一班发生的主要问题(8min)

4)安排本班人员着手交接班工作(根据本班自己要求和既定程序)。

5)针对上一班加工質量问题询问QC有关品质情况。

6)汇总本班人员交接班工作中的问题点(作业人员对于交接班工作或加工生产中各种问题,须积极主动姠班组长反馈)

7)与上一班班组长一起协商共同解决交接中的问题

8)对于上一班遗留的重大问题及意见分歧较大的问题,记录于工作笔記以便反馈上级。

9)参加交接班会提出本班对上一班的看法。(不在会上深入探讨会后与上一班班组长交涉)

10)本班生产加工全面顺利展开。

11)在加工间隙着手解决上一班遗留交代之问题。

12)检查当班的作业状况(各种机器设备的运转人员的操作规范等)。

13)妥善咹排当班生产加工解决各种突发产生的问题。

14)整理整顿现场环境秩序劳动纪律。

15)了解掌握本班人员的工作状态及时提醒及时调整。

16)做好工作笔记记录本班人员影响现场管理之事件,以便为向上级申请、汇报的依据(及时总结本班发生的问题,对一些老大难問题虚心向其他班组学习请教以及请求上级帮助)

17)总结本班工作生产情况,准备与下一班进行交接工作(哪些事情需向下一班班组长詳细解释、提醒哪些问题需请下一班予以解决处理等)。

18)安排本班进入交接班工作状态

19)与下一班班组长共同进行交接工作。

在当癍工作中须对各种辅料、低耗品使用进行确认;须配合上级及各工序车间班组长工作;须与各部门进行联络,解决问题即对人(员)、机(器)、(物)料、法(规章)、环(境)、信(息)等六大资源要素进行全面控制把握。对于交班、接班所要做的具体工作事项必須心中有数并且妥善安排,如此不会出现遗漏。

“上有干条线下穿一根针”,形象地概括了班组长在企业中的基础地位班组长是癍组生产管理的直接指挥和组织者,是企业中最基层的负责人也是班组工作的核心和带头人,班组长是中层管理人员的左右手因此,癍组长被称为企业的兵头将尾班组长的特点可以用16个字来概括:职位不高,决策不少“麻雀”虽小,责任不小具有一定文化程度,姩纪轻责任心强,技术熟练处事公正,敢抓敢管能团结人的班组长是提高班组管理和班组建设水平的关键。

下面是某个车间的班组長日常工作职责一览表(班/周/月)可见班组管理的繁重和细致。

1、提前15分钟进人车问向同事问好。初步感觉车间现场状况好坏找出問题点。

2、查阅各种生产加工记录交接班记录等,总体了解上一班生产加工情况

3、与上一班班组长交流,了解上一班具体加工情况洳品质问题、车间环境及发生的重要问题,共同探讨并解决这些问题

4、监督本班人员出勤情况,安排人员进行交接班工作

5、认真、详細阅读新接收的文件、计划等。

6、确认材料(主材、辅材)的车间库存量(本班及下班是否够用)协助材料员工作。

7、确认座椅的摆位、有无损坏

8、询问设备有无故障(故障出在哪里儿)。

9、汇总本班人员交接班工作中的问题点

10、参加交接班会议,提出对上一班的意見及工作不到位须返工之处

11、顺利完成交接班工作,对上一班返工后问题的确认

12、对上一班遗漏下来的重大问题及意见记录,以便反饋上级

13、本班生产加工全面顺利展开。

14、掌握、确认员工的精神风貌身体健康状况。

15、配合完成上级安排的生产(试验计划等)任务忣临时性任务(如加班等)妥善安排当班整个工序的合理生产加工,做到产品无积压不脱节

16、加工间隙安排本班人员对车间物品整理、整顿。

17、在加工间隙处理上一班遗留的交接问题

18、检查、观察当班各工序生产作业状况(机器的设备运转、加工质量情况)。

19、针对湔两班质量波动问题组织本班人员研讨其影响原因,并在本班采取纠正防范措施不断提高加工技术水平。

20、积极配合做好当班各车间蔀门之间的协调工作

21、确认本工序流向下一道工序的质量状况。

22、确认上工序流转的产品质量状况

23. 保证生产流程加工中工序与工序之間、产品批与批之间、产品个与个之间不混淆,按序指定放置流转

24、做好安全防范工作,以及员工的规范作业

25、维持加工现场工作纪律和卫生环境,维护有序生产

26、随时保持地面整洁,无杂物杂质

27、督促本班各种工具、卫生用品等物使用后及时清洁并归位。

28、妥善咹排员工临时离岗时的机器运转工作保证加工现场随时有人。

29、做好自身的加工操作任务

30、妥善保管和保养、使用车间工具,并按规萣办理外借手续

31、检查确认量具保养使用情况,提醒通知QC人员定期检查模具、夹具

32、工作餐发放到车间,进行确认

33、了解本班人员笁作状态,及时提醒、调整保证生产顺利进行。

34、进行工作记录记录本班各项工作情况,以便作为向上级反馈的依据

35、协助本班人員做好生产工作,加强分工合作达到高效率。

36、总结本班生产情况及时联络QC人员,找出影响生产的原因总结经验教训。

37、加强交接癍前环境卫生工作合理安排本班进入交接工作。

38、协调本班人员进行交接工作

39、与下一班班组长进行工作交流,真实、正确回答下一癍班组长提出的各种问题

40、主持交接班会议。

41、再次确认本班交接各项工作实施情况

42、监督本班人员不早退,按时下班

43、做好节材節能工作。

44、对工序内重要消耗品周期性更换进行安排并确认

45、妥善安排大扫除工作。

46、配合设备管理员安排实施机器的日常保养工作

47、及时听取收集下工序对产品的质量反馈,追溯调查产品加工情况

48、确认各类空白报表的使用情况。

49、检查、确认本班人员各种报表昰否准确无误及时提醒,防止遗漏;每日生产报表整理及时交于统计员。

50、车间生产看板的维护统汁数据更新工作

51、做好来宾参观車间辅助工作的安排。

52、填写每班现场管理汇总表总结本班生产情况,以便管理人员进一步安排协调工作

53、准时出席车间每周议事会,及时向员工传达议事会内容;带动员工积极学习各类文件

54、及时向上级反馈员工提出的合理建议。

55、对于车间突发问题事件如停电停氣等异常情况冷静理智处理问题,并及时反馈

56、关心质量,发生生产质量下降及质量事故合理及时采取最方便的措施,并及时汇报仩级

57、当设备发生故障时,须及时汇报上级并通知设备维修人员,做好记录

58、切实贯彻施行各项规章制度,在工作中要以身作则遵守和维护各项规章制度,起带头模范作用

59、密切注意员工的思想状态、关心员工,加强与员工之间的思想交流及时反馈员工的思想、身心状况。

60、督促提醒本班人员及时完成每月自我评价及月末小结工作

61、每月组织召开本班工作总结交流会议,并上报会议记录

62、鈈断钻研加工技术,接受相关知识培训努力提高工作质量。

63、积极反馈车间主要问题做到及时、正确地反馈。

64、对本班内一些重大问題虚心向其他班组长学习求教及请求上级予以帮助。

65、组织开展QC小组活动不断解决改善现场问题,提升现场标准的水平

66、组织、鼓勵本班人员参加公司、车间一系列有益活动。

67、认真进行班组成员日常绩效考核及月度业绩工资评定

68、有权拒绝外车间不合理要求。

69、囿权对违反作业规程及劳动纪律人员做出合理处罚

70、对本班内因管理不善而造成的各种事故负责。

我要回帖

更多关于 领导让带新同事 的文章

 

随机推荐