精华内容
下载资源
问答
  • 一发入魂的音乐,如何来到你的耳边?

    千次阅读 多人点赞 2021-03-10 15:49:19
    穷极一生,你也可能遍历这庞大的曲库——不仅是你能,甚至音乐平台的编辑也做到。 所以,谁能为你推荐下一首歌?谁来给你惊喜? 今天,听歌似乎简单又容易,但从前并非如此。 早期互联网音乐播放器比较原始...

    本文转载自 放大灯,作者 陈颖、杨景诒

    在中国,几家头部互联网音乐平台的曲库规模共计超过7000万首(如果计算重复),假设每首歌平均时长3分钟,一个人需要连续收听400年才能听完。

    普通人一辈子往往只会听三五千首歌曲。穷极一生,你也不可能遍历这庞大的曲库——不仅是你不能,甚至音乐平台的编辑也做不到。

    所以,谁能为你推荐下一首歌?谁来给你惊喜?

    今天,听歌似乎简单又容易,但从前并非如此。

    早期互联网音乐播放器比较原始,用户需要主动搜索并点歌。1999年上线的九天音乐,与后来的百度MP3、酷狗等,起初都是点播平台。

    与点播相对的,则是电台音乐(Radio)——它由专业的编辑或算法决定用户听什么歌。

    2009年,豆瓣基于推荐算法,推出豆瓣FM。中国互联网音乐平台从此进入算法时代,QQ音乐、虾米音乐、网易云音乐等也纷纷效仿。

    这项功能颇有前瞻性——在国外,以推荐算法成名的Spotify,其电台功能的上线时间,也比豆瓣FM晚两年[1]。至于推荐算法在其它领域大杀四方,还要等到2012年才上线的今日头条。

    国内互联网音乐平台发展历程 | 放大灯团队制图

    为什么互联网音乐平台对算法这么积极?

    算法不仅革新了产品体验,更能决定平台的生死存亡——你能想到,仅仅把“搜歌”变成“推歌”,平台就能省下一大笔钱吗?

    豆瓣FM做电台的主要原因是——穷。

    音乐行业有一套细致的版权定价规则。点播版权、配乐版权、下载版权的价格均有不同。其中,电台播放的版权费用比点播的版权费更低

    现实条件是,豆瓣手里只有电台播放的版权,于是因陋就简做了一款纯电台产品。“在豆瓣FM里,你不能重听前一首歌。”前豆瓣FM技术总监赵凌告诉放大灯团队(ID:guokr233),这也是因为版权的限制。

    算法推送不仅降低了版权单价,也改变了音乐平台向唱片公司付费的逻辑。

    此前,互联网音乐平台以预付费模式,花钱批量“租下”唱片公司的版权曲库(租期2~3年),吸引用户听。但这种简单粗暴的模式有明显漏洞,像传统磁带A面录热门歌,B面录充数的“水歌”一样,唱片公司也会把热门歌和“水歌”打包售卖,导致一部分歌曲播放量极高,一部分播放量又奇低,因此,预先支付给唱片公司的费用,本质是为热门曲库买单。

    低效的预付费模式浪费了版权资源利用率,互联网音乐平台自然不能忍——如果不能单买热门曲库,那就必须改变计费规则。

    如今,国外音乐平台如Spotify、Google、苹果、亚马逊等公司已开始尝试按播放量支付版权费(如 Spotify 定价0.00331美元/次,Google 定价0.0054美元/次,Apple Music 定价0.00495美元/次,Amazon 定价0.00395美元/次)[2]。就匠音乐创始人张昭轶告诉放大灯团队,按播放量付费未来会成为行业标准。

    计费方式改变后,算法会在很大程度上影响唱片公司的收入。

    一方面,算法面前,曲库与曲库并不平等。

    通过播放量,算法将轻易分辨出热门/冷门音乐,并将其经济价值分为三六九等。以早年虾米音乐的独家曲库为例,滚石音乐的曲库规模只有几万首,但都很热门,所以很快被网易云音乐抢走;BMG的曲库规模超过250万首,但多数冷门,所以迟迟无人争抢,几乎到了虾米关闭前夜才转给网易云音乐。

    接下来,算法分发将引发马太效应,热门曲库会给唱片公司带来更多收入,而曲库冷门的唱片公司就讨不到什么好处。通过按需付费,互联网音乐平台可以将经费用在刀刃上——购买消费者真正喜欢的歌曲。

    另一方面,算法本身并非完全中立,它更能体现出平台的意志。

    算法不仅能决定推什么歌,还能决定推谁的歌。虾米音乐的算法,就更倾向于向用户推荐小众音乐人和他们的作品[3]。这也意味着,唱片公司在虾米音乐得到的推荐量会更少,其版权收入也会因此缩水。张昭轶表示:“这样一来,传统唱片公司的地位会变得十分被动。

    算法给互联网音乐公司带来的不止是经济效益,还有更好的用户体验。

    Spotify研究总监莫妮亚·拉玛斯·罗列克称,Spotify的“灵魂”是一个名为BaRT的算法系统。这个系统能分析每一个用户的特点,选出用户感兴趣的音乐,生成“千人千面”的推荐歌单[4]。莫妮亚还表示,BaRT能够帮助提高用户的使用体验——让用户更久、更频繁地使用算法推荐(wanting to use the technology longer and often)。

    此外,随着算法不断迭代,互联网音乐平台推荐的内容越来越准,用户还会对产品产生依赖。而算法留住的用户越多,用户停留的时间越长,他们为内容付费的可能性也就越大。“这件事有难度,但如果能做好,它会给音乐平台带来很大收益。”赵凌认为。

    但早期的推荐算法,不像现在的那么“高级”。

    推荐算法刚在音乐行业火起来的时候,大家用的都是协同过滤算法。”赵凌告诉放大灯团队。

    举个例子,如果有两个用户a和b,他们都听了A歌和B歌,那协同过滤算法就会把a、b当作两个相似用户,会把用户a听到的另一首C歌推荐给用户b,这就是简单的“用户协同过滤”逻辑。

    用户协同过滤算法工作原理 

    事实上,协同过滤算法诞生于上世纪80年代,在本世纪初,亚马逊将其用于商品推荐,而它的确也比较适和推荐复杂内容,不仅仅是豆瓣FM,网易云音乐也用过这种基础算法。

    就在2020年底,还有一位新消费圈的创业者曾发文总结自己一年来的朋友圈,其中就有一条提到音乐推荐算法,她将Spotify基于行为的协同过滤算法称为高级的,并认为国内的音乐App算法“好弱哦”。

    我们现在知道了,国内音乐App们也在用协同过滤,豆瓣FM甚至比Spotify还早做出来两年。

    然而,协同过滤是一条简单粗暴的算法路线。它的优势在于,机器不需要理解内容,仅凭用户行为数据就可以完成推荐。而这也是它最大的问题,协同过滤算法无法判断歌曲的特点,只知道其中的相关性,但这个相关性往往不那么准确。

    协同过滤算法的精确度与行为数据的积累量有关,它的确越用越好用,但新用户初来乍到、新歌曲刚刚上线,都是协同过滤算法的处理盲区。但新用户的体验又至关重要——每一个增长黑客理论中,“新用户留存”都是重要的环节。

    随着技术的发展,机器也逐渐学会“理解”内容——简单来说,算法会抽取歌曲的音乐和歌词特征,给每首歌都打上数个“标签”。通过标签理解歌曲内容,再将其匹配给最合适的听众。

    于是,互联网音乐平台纷纷抛弃协同过滤,把希望寄托在基于标签簇的个性化推荐算法上。

    网易云音乐算法团队告诉放大灯团队,推荐算法不仅会给歌曲、歌单打标签,还会盘点用户的群体特征,“如果系统判定你喜欢‘旅行’标签的歌单,就可能把这群用户偏好的其它标签歌单也推给你。”

    基于标签簇的推荐算法工作原理 | 放大灯团队制图

    如今看来,基于标签簇的推荐算法比协同过滤算法更先进。它是主流在线音乐平台的标配,但不包括Apple Music。

    苹果现任CEO库克认为,相比起冷冰冰的算法,由真人进行运作的Apple Music更懂它的听众。

    虽然路线一致,但不是所有在线音乐平台都能把算法做到尽善尽美。用户在使用时,会感到明显差异,而这又涉及公司之间不同的推荐策略,以及它们在算法细节上不同的处理方式。

    对于普通用户而言,评价音乐播放器算法的维度非常简单:它推的歌适合我的口味吗?

    豆瓣FM是国内最早启动纯算法推荐机制的音乐电台。在豆瓣FM上线10年后、几乎没有什么市场份额的2019年,还有人在知乎回答:豆瓣最大的优势在于其强大的算法,它“总会找到我喜欢的歌曲”[7]。

    豆瓣FM的初始定位是一款后台产品,在用户聊天、工作、居家时播放背景音乐。

    豆瓣FM由豆瓣孵化,后者是以兴趣为核心的社交网站,用户会产生并积累大量书、影、音等标记和偏好数据,可供豆瓣FM作更精准的音乐推荐。

    用户在豆瓣FM上能进行的交互行为不多:点红心、跳过、暂停、下一首……但所有这些行为都会被豆瓣FM收集起来,用来分析用户的喜好。

    早期豆瓣FM还尝试过用一些新奇的办法来优化算法。比如,采取人机赛马的方式,分两组、按照歌词情感属性对音乐进行分类。在这次尝试里,人类胜出了——机器只能分出几个大类,再细分其准确度就会下降。

    不过,豆瓣还是通过几十个推荐引擎,日以继夜地为用户推送音乐。赵凌表示,这些推荐引擎也并非一成不变,会随着产品的运行不断修正。

    除了豆瓣FM,虾米音乐的推送品质也为人称许。

    与豆瓣FM的定位不同,虾米想要建立起高质量的音乐社区。成立初期,为了完善曲库,虾米音乐“从全球范围内召集了300多个音乐爱好者,用社区的方式去做”[8]。

    虾米音乐充分动员了用户——它鼓励用户自由上传曲目,修改音乐分类、编辑歌词、专辑信息。这些用户们“调教”算法的行为数据,成为算法完善数据库、提高推送精度的帮手。

    得益于用户众包,虾米建立起全网音乐曲风分类最全、流派分类最细的音乐库。在2020年7月举办的上海国际独立音乐季(IMS)活动中,虾米音乐产品及用户运营负责人龙吉就表示,虾米音乐拥有超过3000万首曲库[9]。而根据虾米音乐用户2021年初的整理,虾米音乐曲风流派共有24个大类,566个小类[10]。

    从豆瓣FM和虾米音乐的案例中,我们可以看到,算法想“随我心意”,需要产品定位、曲库规模、用户行为、运营策略等因素的共同参与。

    算法在努力推送用户喜爱的歌曲,但推荐歌单里用户喜欢的歌越多,就越好吗?

    并非如此。我们可以假设一个极端的状况——如果一个用户只收听某个特定类型的歌曲,会发生什么?

    事实是这个用户很快会进入“听歌茧房”:算法不再推荐新的音乐类型,用户也对新音乐类型不感兴趣,同时对已收藏的歌曲感到烦腻。音乐App用户的黏性和使用时长也会降低。

    是推送用户喜爱的特定歌曲,还是探索用户的兴趣边界?是选择低风险的大众流行,还是冒更高的风险尝试给用户一些惊喜?算法必须做出权衡。

    网易云音乐算法团队向放大灯团队介绍,为了规避“听歌茧房”现象,网易云音乐会推荐用户平时不太接触的歌曲,增加用户听歌类型的多样性。

    扰动因素的作用

    在推送中加入扰动因素——用户比较陌生的歌曲,也已经成了在线音乐播放器的标配。

    算法运转之下,数千万首歌曲从曲库中出发,被推荐到用户耳边。在这个过程中,用户对音乐App推送算法有了朦胧认知:虾米的推送很有品位、豆瓣FM的推送很准、QQ音乐更喜欢推流行歌……

    还有网友脑补网易云音乐“算法小哥”的小剧场:“我还不知道你好那一口?”“你以为歌单80%都会是日语POP?呵呵,我知道这个时候你需要一首后摇来调整回丧的氛围。”[11]

    网易云音乐是在故意推荐特定情绪类型的音乐吗?

    网易云音乐算法团队向放大灯团队表示,网易云音乐的“情感”歌单一共有怀旧、清新等13个类型。根据2020歌单年度报告的统计,平台歌单的高频词第1名正是“治愈”,超过75%的用户听过治愈相关的歌单。

    推荐算法风格的差异也导致用户群进一步分化

    赵凌向放大灯团队介绍,2013年,QQ音乐曾试图和豆瓣FM合作,将QQ音乐的用户行为数据导入豆瓣FM,改进各自的算法。可该项目在开始不久后,就被叫停了。

    原因是,两方用户行为之间的差异实在是太大了。QQ音乐的用户呈现出偏低龄、爱听流行歌的整体特征,这和豆瓣FM的用户特征发生了剧烈冲突。

    但音乐App的竞争维度不只是算法,产品、社区和最基本的核心版权曲库规模也非常重要,正是由于这些短板,豆瓣FM和虾米在版权大战中相继失势。

    虾米音乐创始人王皓在接受播客《坏蛋调频》采访时表示,不认可互联网音乐平台打版权战。恶性竞争之下,版权价格会越抬越高。但王皓也进行了反思:“当时真的很天真地以为,我们可以在互联网时代找到更透明、更直接的方法帮到所有音乐家。”

    虾米没有找到更好的方法,优秀的推荐算法没能挽救虾米。2021年2月,虾米正式停止运营。

    推荐算法的初衷,是用技术手段帮用户挖掘“好歌”。但实际上,无论推荐音乐还是流量变现,15秒的短视频都比动辄三四分钟的单曲更高效。

    QuestMobile发布的《2020中国移动互联网半年度报告》显示,至2020年6月,短视频行业MAU已经达到8.52亿。而同期,中国在线音乐行业的MAU为6.55亿。同时,短视频App占据用户的时长份额接近20%,成为了仅次于即时通讯的第二大互联网行业[13]。迅速崛起的短视频App正成为不折不扣的流量黑洞。

    这些短视频App带火了众多“一夜爆红”的神曲。从《学猫叫》到《绿色》再到《酒醉的蝴蝶》,历代“抖音神曲”不光影响了听众的音乐品味,也带来其它改变。

    借由神曲们的崛起,短视频App的推荐算法也开始影响音乐制作。

    张昭轶向放大灯团队介绍,在没有算法的时代,“1645”“4536251”和“卡侬”这三套和弦已是“大歌”要素,而算法将这几套和弦体系的显著性继续放大。为了追求效率,算法倾向于推荐与热门神曲相似的音乐。除了和弦体系,短旋律重复、反拍副歌这些刺激性更强的音乐特征,同样被算法强化。

    对于音乐制作人来说,如果想让自己的歌曲得到算法的青睐,那么就必须迎合算法的口味。“事实上,很多音乐人、经纪团队和MCN已经开始这样做了。”张昭轶告诉放大灯团队。

    从这个角度来说,推荐算法已经在迫使上游的音乐制作行业,去生产符合算法口味的歌曲。

    在虾米音乐宣布停止运营之际,有人在知乎上提问:“虾米能不能把个人推荐算法公开?”但即便这套算法被公开,但它能帮某个小而美的播放器杀出重围吗?或者,某个巨头把它买下来,就能改善用户体验吗?

    从互联网音乐到短视频,算法的形态、作用和影响看似发生了变化,但有一点确定无疑:算法不断更迭,但它终归要服务于互联网音乐产品的核心定位,以及背后公司的意志。

    算法不是音乐行业唯一的神,但它让音乐App更有神采。

    展开全文
  • 他获得了词作家Barry Mason(写过Last Waltz-最后的华尔兹的作者)的欣赏,从此一发不可收。我们听到的这首Walking In The Air是2001年录制的,那时候他才9岁。据传好几家唱片公司争相与他签...
    Declan简介:
            Declan Galbraith今年12岁,4岁开始展露歌唱天赋;8岁那年,他开始参加一些音乐比赛,并在14个月中曾经获得16个大奖。他获得了词作家Barry Mason(写过Last Waltz-最后的华尔兹的作者)的欣赏,从此一发不可收。我们听到的这首Walking In The Air是2001年录制的,那时候他才9岁。据传好几家唱片公司争相与他签约,最后Emi(百代)以超过百万英镑之巨,签了他3年,并承诺发行3张唱片。
      
      大家都相信这个小男孩的音乐天赋和对爱尔兰传统音乐的理解及热爱,来自他的祖父Ben。才6个星期左右,就是Ben照顾他了。Ben常常在酒吧演奏六孔笛和爱尔兰鼓,并常常带上他。Declan从小就耳濡目染;祖父96年去世,可是Declan忘不了他,他的第一张专辑(Declan)就是献给他祖父的。
      
      Declan的声音,清亮脱俗,演唱歌曲的范畴也是极广。从流行的Angels之类到Carrickfergus这样传统的爱尔兰歌曲,他都把握得不错。而这个小小童星的心愿却是有一天能够不再翻唱别人的歌曲,能有几首属于“Declan Galbraith”的歌。
      
      除了天使般的声音,Declan小小年纪,已经表现星探们热衷的所谓“明星气质”--一头松软的深色头发,浓密的睫毛,明亮清澈的蓝眼睛,充满童真颇富感染力的笑容,还有满满的自信。更重要的是,他从不怯场,每次上台都异常兴奋;应该说,也有过一次紧张,那是在圣保罗大教堂女王特赦的演出上。为Robbie Williams和Phil Collins制作MTV的John Carver十分有信心的说,“Declan注定要成为一个超级巨星的,不仅是因为他超群的声音,更重要的是他极好的个性,他非常聪明。”
      
      除了他的音乐天赋,以及身后的百万合同,Declan和12岁的其它小男孩没有什么分别。喜欢足球,电脑游戏和游泳,房间里贴满海报,足球,Robbie Williams,Westlife,还有哈里波特。他也曾为签名不够快而苦恼,直到听从父亲的建议,用“Dec”签名才算解决;他也会在采访中忍不住想要从凳子上逃走,当然会事先礼貌的问“我可以很快去踢球吗?”他喜欢的歌手包括Carole King,The Fureys,Christy Moore, Led Zeppelin,Robbie Williams 和Westlife。
      
      Declan一边上学一边参与专辑的推广。他有专门的家教,确保他不会因为缺课而影响学业;他有专门的造型设计师,帮他打点Armani的定购,带他去Toni and Guy's做头发,也有专门的声乐导师和经纪人,还有他的歌友会。这对于一个床头还摆着恐龙惦记着遥控车的小男孩,似乎的确有些兴师动众了。
      英国媒体对于过早享有声名的儿童,通常不是太客气的。当2002年Declan发行第一张专辑的时候,就有媒体预言在他16岁之前,不会吸毒就会酗酒,而父母多半等不到那时候就已经离婚了。Declan的父母,颇有信心的表示他们不会做急进的父母,他们只需要支持Declan做他喜欢做的事情。当然,他们也表示了自己的担心,这么小的一个孩子,就已经获得了经济上的保障,而不必像普通人那样为分期付款担心,的确不是太好的事。
      
      事实上,Declan已经是这个4口之家(父母和7岁的妹妹)唯一的经济来源。妈妈自小孩出生后就离职了,做电工的爸爸也已经辞工全程陪同Declan。对于很多成人歌星也羡慕的百万合同,Declan说,“其实我拿不到这么多,100万是公司承诺投入在我身上的全部资金。不过我不在意,我只是喜欢唱歌而已。”在一段自白中,Declan也说道,他最希望的是能够照顾好家人,父母再也不用去工作;如果他有了钱,会给爸爸买一辆新车;如果还有剩余,就给自己买些足球球星卡;如果还有多,就存进银行。很可爱很单纯的小孩。
      

    GalbraithDeclan1.jpg



    评:
    很美的一个童声,附加现代唱法,让人陶醉。一个很值得一听的音乐。童真、鸣唱、纯洁。正如其专辑中的:Walking in the air.



    专辑:
    None.gif  专辑名称:Tell Me Why 
    None.gif  发行时间:2002年 
    None.gif  专辑歌手:Declan Galbraith 
    None.gif  
    None.gif  专辑曲目: 
    None.gif  01-Danny Boy 
    None.gif  02-Carrickfergus 
    None.gif  03-Imagine 
    None.gif  04-I'll Be There 
    None.gif  05-It All Begins With Love 
    None.gif  06-Your Friend 
    None.gif  07-Love Can Build A Bridge 
    None.gif  08-Mama Said 
    None.gif  09-Till The Day We Meet Again 
    None.gif  10-Amazing Grace 
    None.gif  11-Circles In The Sand 
    None.gif  12-Angles 
    None.gif  13-Tell Me Why 
    None.gif  14-Twinkle Twinkle Little Star 
    None.gif  15-Walking In The Air 



    试听:
    《Walking In The Air》
     
     

    转载于:https://www.cnblogs.com/HD/archive/2006/04/08/370325.html

    展开全文
  • 两年前咬咬牙跳了Matlab的坑,入手了Python,从此一发不可收的成了PY的重度依赖者。本人研究工作皆涉及大量的数据处理工作,PY和R作为数据分析的两驾马车,得其一者得天下。另外,我接触的许多软件皆比较小众,每次...

    187fbe8651dd30b25d8d3ea82ee429c5.png

    两年前咬咬牙跳了Matlab的坑,入手了Python,从此一发不可收的成了PY的重度依赖者。本人研究工作皆涉及大量的数据处理工作,PY和R作为数据分析的两驾马车,得其一者得天下。另外,我接触的许多软件皆比较小众,每次在涉及二次开发时,很多都是Matlab之流不支持的,而PY又往往是官方指定接口。因此,PY作为程序界的黏合剂,实在是方便至极。

    如今机器学习和深度学习之热,再次炒热了PY。当然,涉及到统计模型,R的功力还是更深的。很多前沿或者有一定深度的统计模型,在R中都能快速实现,但在PY中则没有现成的package。因此,现在不得不承认,PY和R,各有千秋,要都熟稔才行。

    写此文,是为记录一些灵感,供广大PY爱好者,也供自己,学习与查阅。

    List形式的for in if else

    爬到一组房价数据,但经纬度皆以'121.43247'的string形式存储于DataFrame的一列中,且对于空缺值,以int形式的0或者float行驶的0.00填充。也就是说,该列存在多种数据格式,必须写条件判断才能循环。现需要将其进行修正提取,将'121.43247'提取为121.43247,而对于空值,统一以int形式的0填充。

    于是,最低级的写法出现了:

    for jj in range(0, len(all_fangjia)):
    	if all_fangjia.loc[jj, 'len'] > 3:
    		all_fangjia.loc[jj, 'new_lat'] = all_fangjia.loc[jj, 'lat'].split(''')[1]
    		all_fangjia.loc[jj, 'new_lon'] = all_fangjia.loc[jj, 'lon'].split(''')[1]

    该法思路清晰,但速度奇慢。对该列数据进行遍历,先判断该数据长度,如果大于3,说明是string形式的,然后再按照'''进行拆分(需要用来转义),选取第二个值进行提取。

    思路是对的,但速度实在太慢了。于是,就要请出循环的list风格化了:

    all_fangjia['new_lon'] = [var.split(''')[1] if len(var) > 3 else 0 for var in all_fangjia['lon']]
    all_fangjia['new_lat'] = [var.split(''')[1] if len(var) > 3 else 0 for var in all_fangjia['lat']]

    将代码压缩至了两行,速度更是提升了几十上百倍(具体提升量级没算,但反正速度是飞快的了)。此法非常关键,掌握了对之后的数据处理效率大有提升。

    佛系空格分隔符的处理

    在拿到某些奇葩的原始数据文件时,其不同列间的分隔不是传统的',',而是奇葩的不规整的空格符,也就是说,某两列用了三个空格符来分隔,某两列则用了四个,甚至在一列中,某两行用了2个空格分隔,某两行则用了3个。。

    对于这种佛系空格分隔符,一种处理方法就是用正则(re)表达式,而另一种非常简单的方法,则是:

    import pandas as pd
    tem=pd.read_csv('583211-2017.out', delim_whitespace=True, engine='python')

    即在熊猫包里面的read_csv中,设置delim_whitespace=True即可。

    字符串数据转化为数字编号

    比如有N个样本,且存在一列专门对其类别进行标记,但标记用的全是字符串,如“大”、“中”、“小”。为了之后处理方便,需要将其变成0、1、2这种数字形式。这时就需要请出category类型来操作了。相关操作皆针对DataFrame格式实现。

    obj_df["body_style"] = obj_df[body_style"].astype('category')
    obj_df["body_style_cat"] = obj_df["body_style"].cat.codes
    绘图时批量改变所有字体大小

    在利用matplotlib绘图时,题目、坐标轴标签、坐标轴名称等等的字体大小都需要分别设置,非常麻烦,而下面的方法则可以批量一次性设置,修改起来也就随之方便了。

    应注意,如果有多个ax,则还需要再嵌套一层循环,先指向某一个ax.

    import matplotlib.pyplot as plt
    fig,ax=plt.subplots()
    for item in ([ax.title, ax.xaxis.label, ax.yaxis.label] +
                     ax.get_xticklabels() + ax.get_yticklabels()):
        item.set_fontsize(20)
    批量快速导入Oracle

    做数据工作的,拿Python去接数据库是非常常见的事情,而Oracle又是数据库里面的老大哥。在此不介绍如何安装接口包cx_Oracle,只介绍如何快速将大量数据一次性导入到Oracle中。

    在没Get到此技能之前,我都是一条条的往里面插入数据的,数据量小还好,一旦大起来,速度就奇慢无比了。

    于是,便有了下面的思路:先打包,再导入:

    #导入连接包
    import cx_Oracle as oracle
    db = oracle.connect('scott/redhat@192.168.223.138:1521/oracle.test')
    #对待导入的数据进行处理
    DFV = DFV.fillna('None')
    DFV = DFV.values.tolist()
    rows = []
    for jj in range(len(DFV)):
        # 转list
        row = (DFV[jj][0], DFV[jj][1], DFV[jj][2], DFV[jj][3], DFV[jj][4], DFV[jj][5], DFV[jj][6])
        rows.append(row)
    # 写入数据
    cr = db.cursor()
    cr.prepare(
        'insert into OTJ_WATERLINK_WK2 (linkid,fromnode,LONGITUDE,LATITUDE,GRIDID,ROADNAME,SECT) values (:1, :2, :3, :4, :5, :6, :7)')
    cr.executemany(None, rows)
    db.commit()
    cr.close()

    试过的都知道,速度杠杠的。再也不用担心大型数据文件要花上好几天才能撸进Oracle了。

    Groupby不支持的函数如何使用

    数据处理里面的groupby简直就是小白第一课也得学会的技能了。但groupby方便虽方便,很多时候却不支持一些函数。比如,我要对某一列进行groupby,并对groupby后的数据块内的另一列求分位数。这时:

    train_day=data.groupby([TIMEID']).percentile()['GOSPEED']

    却显示报错,原因是groupby之后的数据块不支持percentile()这个函数。

    这时你想到的可能就是只能写循环一步步进去了,不慌,groupby还给我们留了后路:

    dg=data.groupby('TIMEID')
    for a,b in dg:
        z = np.percentile(b['GOSPEED'],5)

    不只是percentile(),其他什么函数,都是可以这么玩的。速度虽然比groupby慢了一些,但比直接写循环进去要快不少。

    指定区间,计算频率

    做频率分布直方图大家都会做,非常简单,对离散型变量做频数统计也很简单,value_counts()函数就行,但如何对连续型变量按照指定的区间就行频率统计呢?这里就需要用到cut和value_counts()的结合了。

    cut函数可以将一个区间进行切割,返回切割后的小块,再将其作为参数传递给value_counts()函数,就可以得出结果了。

    xse = range(1, 5000, 1)
    fanwei = list(range(0, 4500, 500))
    fenzu = pd.cut(xse, fanwei, right=False)
    print(fenzu.categories)  # 分组区间,长度8
    pinshu = fenzu.value_counts()  # series,区间-个数
    读入输出文件的中文乱码问题

    这个问题大家几乎都会遇到,解决方法也非常简单,只要指定对了编码,自然就不会乱码了:

    输出CSV乱码的话:

    import codecs
    FGIS.to_csv(FINALPOINT.csv',encoding="utf_8_sig",index=False)

    导入CSV乱码的话:

    test=pd.read_csv(busgps_0309_0310_71.txt',encoding='gbk') #gbk不行就改成‘gb18030’

    不论读入导出啥文件,记住encoding不要乱,编码就不会乱。

    数据结构化输出及读取

    某个变量需要先保存好,下次再来直接读取,而不是重新计算?MATLAB里面可以直接保存WORKPLACE里面的变量,PY怎么做呢?用pickle

    import pickle
    #导出
    output = open('FWRON.pkl', 'wb')
    pickle.dump(FWRON, output, -1)
    output.close()
    #读取
    pkl_file = open('FWRON.pkl', 'rb')
    FWRON = pickle.load(pkl_file)
    pkl_file.close()
    多版本PY的管理

    由于不同的包可能在不同版本下才能生存,所以一台电脑有好几个PY很正常,而解决他们的共生问题也是十分的头疼。比如我的电脑里就有三个版本的PY(我也不知道怎么这么多)。。其中,conda管理的两个:2.7和3.4;还有在系统下的一个3.6。

    对于用conda来管理的各种版本,则可以使用conda来进行切换,相对要简单很多。切换完毕后,就可以在该版本下进行包的安装管理。强烈建议用conda而非pip来安装package。

    conda info --envs
    source activate python34 # conda activate geo_env
    conda install -c conda-forge osmnx
    sudo pip install [package_name] --upgrade

    而我之前没用conda之前,一直都在用系统的3.6。所以,很多时候我还是要对3.6系统下的环境做配置。下面记录了更新pip以及利用pip指定版本安装包的过程。注意全程加上python3来指代PY3的版本(我默认是用的2.7),以及,记得加上--user,否则会一直报错[Errno 13] Permission denied。

    curl https://bootstrap.pypa.io/get-pip.py | python3 - --user
    python3 -m pip install  --user osmnx

    PY版本是非常头疼的事情。最好的办法是完全基于conda来配置自己的环境。不要和我一样,多个PY版本分散在各个地址,配置起来非常麻烦。

    一行代码解决两个字符串组的匹配

    近期在做特征的时候,需要对异常站点进行清洗。其间遇到一个问题,记录如下:

    有一个list A,里面存储着系列表征站点错误的关键词,如“关闭”、“不开放”、“非运营”。

    另外有一个list B,里面存储着所有站点的名称,如“虹桥站”、“上海南站”、“五角场站”。

    在list B中,有部分站点是出错的,这些站点会在名称中进行标记,如虹桥站出错了,该站的名字会改成“(关闭)虹桥站”,当然,也可能改成“(不开放)虹桥站”。

    现在需要把list B中所有的出错站点找出来。

    问题复述一遍就是:以list A中的每一个元素为关键词,对list B中每一个元素进行匹配,如果list B中某个元素包含list A中的任意一个元素,则将list B中的该元素标记为FALSE。

    当然写循环,用 A in B,是肯定可以做的。但是,有没有更简洁的写法呢?

    尝试了一下,是有的:

    Wrong_list=['关闭','不开放','非运营']
    Test_list=['虹桥站','(不开放)虹桥站']
    Bool_result=[any(list(wrongs in var for wrongs in Wrong_list)) for var in Test_list]

    最后返回:Bool_result=[FALSE, TRUE]

    需要注意:

    1)两个for的顺序:先写for wrongs in Wrong_list,再写for var in Test_list,最终得出的Bool_result才是针对Test_list的。

    2)list在此的作用:将generator object 转化为bool格式。

    3)any在此的作用:表示“只要有一即可”。

    4)括号在此的作用:为any提供计算优先级。

    applymap与匿名函数

    常常会遇到需要对矩阵中的所有数值执行某个函数的情况,但又懒得写def,这时候就可以祭出applymap大杀器了:

    DF.applymap(lambda x: -(x * math.log(x)) if x > 0 else np.nan)

    这句话的功能是,对DF这个矩阵里面的每一个大于0的值,执行-(x * math.log(x))的运算,如果该值小于0,则置为nan。

    要注意applymap和apply的区别。后者是对行或列进行处理:

    DF.apply(lambda x: sum(x != 0), axis=1)

    如上面的代码,则是返回每一行(axis=1)中不等于0的个数。

    去除DF中含有重复名字的列

    有时候MERGE多了,难免会出现一个DF里面有好一些列完全一致——内容一致,列名也一致。这在某些时候,列名一致是容易出错的,最好需要及时清理他们。清理方法是:

    DF=DF.ix[:,~DF.columns.duplicated()]

    一句话就可以去重啦,非常的利索有没有。

    选取groupby后某列最小值对应的行

    做数据处理的时候常常会遇到这样的问题:对于一个DF,我们按照A、B两列进行groupby后,选取每个group内C列最小值所对应的行并返回。

    DF1=DF.loc[DF.groupby(['A','B'])['C'].idxmin()]

    原理其实很简单,用到了一个idxmin(),可以返回最小值对应的行索引。

    根据列类型选取列

    很多时候如果列很多,而且我们需要选取特定类型的列进行变化。比如,在做线性回归时,把所有BOOL类型的列改为0,1类型:

    Exposure_DATA_NEW.loc[:, Exposure_DATA_NEW.dtypes == np.bool] = Exposure_DATA_NEW.loc[:,Exposure_DATA_NEW.dtypes == np.bool].astype(int)

    这里用到了DF.dtypes == np.bool,来对列进行圈取。

    对每一个group进行NA均值填充

    很多时候我们在做缺失值填充时,会需要先groupby,然后再对每一个group,计算该group的均值,并填充至该group的缺失值处:

    Exposure_DATA["surfacewid"] = Exposure_DATA.groupby("rank_artclass")["surfacewid"].transform(
    	lambda x: x.fillna(x.mean()))
    CX_ORACLE的中文乱码问题

    在利用CX_ORACLE读入数据时,不做处理,中文就会直接跳问号。需要在程序前加上:

    import os
    import sys
    
    reload(sys)
    sys.setdefaultencoding("gbk")
    
    os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'
    去除列名,竖向叠加
    npCombined_Net = np.concatenate([metro_route.as_matrix(), tem_null.as_matrix()], axis=0)
    metro_route = pd.DataFrame(npCombined_Net, columns=metro_route.columns)
    Brew的安装与运用

    如何安装:

    /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

    安装完还找不到怎么办:

    export PATH=/usr/local/bin:$PATH

    利用brew来安装一个mysql:

    brew install mysql
    矩阵的去方向groupby

    在做出一个网络边矩阵时,常常会出现这样的情况,我们需要的是无向的,但边矩阵却是有向的。即,假如矩阵一共三类,‘FROM’,‘TO’,‘VALUE’,我们认为FROM 3 TO 1和FROM 1 TO 3是一类的,因此,我们需要把FROM 3 TO 1和FROM 1 TO 3的VALUE 求均值。怎么做:

    edge_centrality_nodir = pd.DataFrame(np.sort(edge_centrality[['from', 'to']], axis=1), edge_centrality.index, edge_centrality[['from', 'to']].columns)
    edge_centrality_nodir['bc'] = edge_centrality['bc']
    edge_centrality_nodir_f = edge_centrality_nodir.groupby(['from', 'to']).mean()['bc'].reset_index()

    其中edge_centrality为有向矩阵,edge_centrality_nodir为矩阵无向化,edge_centrality_nodir_f为最终groupby后的结果。矩阵无向化的过程,实际是对每一行进行重新排序的过程。注意把from 和 to两列单独拎出来。

    绘图label只显示两位小数
    from matplotlib.ticker import FormatStrFormatter
    fig, ax = plt.subplots()
    ax.yaxis.set_major_formatter(FormatStrFormatter('%.2f'))
    range()不能产生float??

    不要慌,用arange:

    import numpy as np
    np.arange(1,10,0.1)
    DF某一列中是否包含某个字符

    比如要判断DF的某一列中是否含有“A”这个字符:

    DF['Names'].str.contains('A')

    那如果要把“A”这个字符替换成“-”怎么办呢:

    DF['Names'].str.replace('A','-')

    真心的方便呀。比如你在处理时间字段时,有些直接就成“XX年XX月XX日”这种格式了,这时你为了转化为datetime,首先就是把“年”、“月”、“日”都替换成“-”。

    多个DF的merge

    譬如你有N个DF,这些DF具有相同的KEY列,你需要把他们按照这个KEY列一并MERGE起来。怎么做?

    首先把需要MERGE的放在dfs这个list里面,然后用reduce来解决:

    from functools import reduce
    dfs = [ord_count, ord_real_mn, order_coup_mn, order_final_mn]
    df_final = reduce(lambda left, right: pd.merge(left, right, on='authid_s'), dfs)

    我们的宗旨是:代码这东西,多写一行都是在浪费生命。

    list以及numpy的repeat

    在构造全序列时,常常需要对一个list进行重复,重复又分为两种:

    • [1,2,3]--->[1,1,2,2,3,3]
    • [1,2,3]--->[1,2,3,1,2,3]

    需要注意,在python中这两种写法是截然不同的。假设我们需要构建三列,第一列为站点ID,第二列为每一天,第三列为每一个小时:

    3e3a417507ddad095fff321223cf900a.png
    timerange = pd.DataFrame(pd.date_range(start='1/1/2017', end='12/31/2017', freq='D'))
    timerange[0] = timerange[0].astype(str)
    full_time_range = pd.DataFrame({'SHOPSEQ': np.repeat(list(shop_need_seq), 365 * 24),
    				'date': list(np.repeat(list(timerange[0]), 24)) * len(shop_need_seq),
    				'HOUR0': list(range(1, 25, 1)) * len(shop_need_seq) * 365})
    DF中的mean和count是怎么对待NAN的?

    The internalcount()function will ignoreNaNvalues, and so willmean(). The only point where we getNaN, is when the only value isNaN. Then, we take the mean value of an empty set, which turns out to beNaN

    即:默认情况下,DF的 count()和mean()函数都是自动忽视NAN的,在计算均值时,除非你的所有数都是NAN,才会出现NAN的结果。

    reshape(-1)?-1是什么size?

    这是非常能提现python之懒的一个点,懒得什么境界呢?就是你只知道变形后的列数,懒得算变形后的行数,你就拿-1代替好了。。:

    假如是这么一个array:

    z = np.array([[1, 2, 3, 4],
             [5, 6, 7, 8],
             [9, 10, 11, 12]])

    直接-1之后,变成12行1列的矩阵:

    z.reshape(-1)
    array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])

    我想把他变成2列,但我懒得算有几行:在行数那里写-1,系统自动帮你补全为6行:

    z.reshape(-1, 2)
    array([[ 1,  2],
       [ 3,  4],
       [ 5,  6],
       [ 7,  8],
       [ 9, 10],
       [11, 12]])
    Datetime格式的LIST相减并返回秒

    DT格式直接相减,得到的格式是非秒的,因此需要再做一个匿名函数转化:

    train['check_trip_duration'] = (train['dropoff_datetime'] - train['pickup_datetime']).map(lambda x: x.total_seconds())
    多索引排序后的重索引

    在做多索引排序后,常常遇到的一个问题是,我们想按照排序后的结果,对每个组内的数据按照排序后的结果进行索引重定义:

    DF=DF.sort_values(['A','B'],ascending=True)
    DF=DF.groupby('A').apply(lambda x: x.reset_index(drop=True)).drop('A',axis=1).reset_index()

    第一句是多索引排序,排序完成后,我们先对GROUP后的结果做一个匿名函数进行reset_index,这时DF的索引变成A+range(0,len(A))的格式。注意,在进行再重索引时,务必先将A删去,否则会出现两列A而无法进行。

    绘图时解决中文乱码、批量设置字体大小以及扩大图像可容纳的点位
    import matplotlib as mpl
    import matplotlib.pyplot as plt
    mpl.rcParams['agg.path.chunksize'] = 10000
    plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
    plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
    plt.rcParams.update({'font.size': 22})

    这几句在做中文图、整体修改图的字体大小的时候可以加上。

    APPLY函数

    当需要以DF格式的两列为参数,做一些函数关系与条件判断的处理的时候,通过先构建函数再APPLY的方式,可以避免逐行循环,提高效率。

    比如我想以某DF的某一列为参数,对另一列中的string进行切片,并需要满足一些规则:

    def eachrowsplit(index0, strr):
        if index0 - 3 >= 0:
            return strr[index0 - 3:index0]
        elif index0 == 2:
            return strr[index0 - 2:index0]
        elif index0 <= 1:
            return np.nan
        else:
            return np.nan

    在定义好这个函数后,我们再调用APPLY,将函数APPLY到对应的两列上:

    Baishitong_station1['price_final'] = Baishitong_station1.apply(lambda row: eachrowsplit(row['Index_yuan'], row['price']), axis=1)
    对比两串字符串的相似性

    目前有许多算法来界定字符串的相似性。在这里介绍一种,可以无序判断的,即“广东深圳”与“深圳广东”他认为相似度是100%:

    def similar(a, b):
        # return SequenceMatcher(None, a, b).ratio()
        return fuzz.token_sort_ratio(a, b) / 100

    然后对DF的两列进行对比:

    Baishitong_station1['simi_name'] = Baishitong_station1.apply(lambda row: similar(row['name'], row['parkName']), axis=1)
    Groupby+values_count+stacked bar plot

    两行代码搞定,感谢unstack大法,还可以做筛选

    tem = ALL_DATA_RAW.groupby(['app', 'time_diff_int']).size()
    tem[(tem > 100) & (tem < 100000)].unstack(fill_value=0).plot(kind='bar', stacked=True)
    Groupby后返回第一行和最后一行且不skip nan

    依旧是一行代码搞定

    ALL_DATA_RAW.groupby('parkSeq').nth([0, -1])

    这里不采用.first()的原因是.nth()是不会忽视NAN的:

    “The difference between them is how they handle NaNs, so.nth(0)will return the first row of group no matter what are the values in this row, while.first()will eventually return the firstnotNaNvalue in each column.”

    distplot+groupby怎么实现
    g = sns.FacetGrid(ALL_DATA_RAW_1, hue="app", palette="Set1", legend_out=False)
    g = (g.map(sns.distplot, "ratio", hist=True)).add_legend()

    distplot是不带hue,但可以借助FacetGrid的hue来实现groupby的绘制:

    22e74d3b091d085a05a2b8747951f250.png
    旋转矩阵
    pd.pivot_table(tem, values='PFloor_Area', index=['ParkSeq'], columns='Land_Category').reset_index()
    PYCHARM的全局搜索快捷键失效

    CTRL+SHIFT+F是全局搜索,不要用双shift,搜不全的。

    但是CTRL+SHIFT+F同时还是微软自带的简繁切换快捷键,需要先把这个关了:

    热键是什么,详细教您电脑热键冲突被占用怎么办 - 装机吧

    多维转一维
    df2=FSEMF.groupby([day','m5']).agg({'volume':'sum'}).unstack().fillna(-1).stack().reset_index()
    计算连续时序长度
    # Build dataframw
    tem = pd.DataFrame({'ID': np.repeat(range(1, 10), 31),
                        'Date': list(pd.date_range('2020-03-01', '2020-03-31', freq='D')) * 9})
    tem1 = tem.sample(200)
    
    # Sort
    tem1 = tem1.sort_values(by=['ID', 'Date']).reset_index(drop=True)
    # Diff
    tem1['Diff'] = tem1.groupby('ID').diff()['Date'].dt.days
    tem1.loc[tem1['Diff'] != 1, 'Diff'] = np.nan
    tem1['CUMSUM'] = tem1.Diff.groupby(tem1.Diff.isna().cumsum()).cumsum()
    # Max
    final = tem1.groupby(['ID']).max()['CUMSUM'].reset_index()
    final['CUMSUM'] = final['CUMSUM'] + 1
    展开全文
  • 【导读】清华“差生”10年奋斗经历:只写事业,写女人。作者从2004年本科毕业写到2012年,近10年的奋斗经历。反正一字一句看完后,各种反省各种彻悟。不要老去抱怨别人“天时地利人和”,做好当下,后来人或许还会...

    看到一篇文章不错【清华差生10年奋斗经历】 共勉一下

    里面有不少引起共鸣的句子

    原文:http://kb.cnblogs.com/page/163907/



    发布时间: 2012-11-15 17:04  阅读: 26433 次  推荐: 488

    【导读】清华“差生”10年奋斗经历:只写事业,不写女人。作者从2004年本科毕业写到2012年,近10年的奋斗经历。反正一字一句看完后,各种反省各种彻悟。不要老去抱怨别人“天时地利人和”,做好当下,后来人或许还会羡慕嫉妒恨你。

      我的故事里有三个人:我自己、我大学同宿舍的哥们、我第一个公司的直接领导。我们三个都是学建筑设计的,我哥们和我同年,都是80后,领导比我们大 5岁。讲讲这几年经历和感触。放在一起可以有个比较。我是认认真真据实写,希望大家点启发。

      先讲讲我们的现况:

      我:现在辞职了,辞职前在一个地产公司做设计经理,一个月基本工资16k,月补助5K得拿发票换。年终奖看公司效益,去年十几万,今年可能很少。

      我同学:自己开了个设计所,挂靠的某大院。今年自己到手估计70W。(当然这是他告诉我的)

      我前领导:现在是那个公司的集团副总,年薪在7位数,关键是还有公司的股票分红。

      2004年

      大五准备毕业。我的成绩在年级偏后,我同学设计很好,但是高数挂科了,所以我们都悲催的没有被推研,只能找工作了。我去了一家房地产公司,当时还不是很有名,但是拿了很多地;我同学去了一家大设计院,解决了北京户口。那时候我们工资都不高,我一个月才3.3k,季度有奖金;我同学更惨,基本工资只有1.2K+项目分成。而且悲剧的是当时我俩都不知道能拿多少奖金。

      日子过得战战兢兢。我们合伙租了一个房子,在东三环,两室一厅,1800一个月,我们一人900。不过物价也低,一个羊肉泡馍5元就有好多好多羊肉了;8块钱的鱼香肉丝满满一盆子,我能吃两顿,午饭一顿,晚上打包一顿。北京鲜有房价过万的楼盘,潘石屹的建外soho卖1万多就让人惊为天人。

      我进公司就跟着我现在的领导,当时他是设计部的部门副经理,据说是这个公司招的第一批名牌大学生。随后几年他飞速提升。我佩服他的胆识——那时建筑系学生是以进地产公司为耻,大多去设计院画图或者去规划局做公务员。他在公司没有敌手,迅速得到了老板的赏识。

      在刚进公司时,我很多工作方法和工作习惯都是在他手底下养成的。比如他每周都会把要做的事情列成1234写邮件发给我们,要求我们拆成每天要做的事项,早上发给他。白天做自己的事,下班后再开会,把做完的销项,没做完的讲困难,他再给我们解决。

      刚进公司的时候,他还经常请我吃饭,很详细的和我讲工作方法。这些东西对我一直很有用,甚至受益远超过大学的课程。其实社会上大量需要的都是你能把一件事有条理按时保质的完成,至于创造力和个性,那是少数达到尖端的时候才需要的。

      还有一件事也是我记得很清楚。公司拿了一块地,我们做户型研究。他叫我去画几个出来,我刚毕业,一股冲劲,第二天就得意洋洋的拿了一大堆自己设计的带三角的多边型的户型给领导看。他啥也没说,给我一本土的掉渣的深圳住宅设计全集叫我翻翻,然后他画了一个中规中矩的户型给我。后来他跟我讲:“别人不在乎你对他们炫耀什么,而在乎你给他们的是不是他们想要的,有理想是好事,但也要面对现实。”

      这年我几乎天天在加班,因为很多事情都不熟练,又不想耽误事,每天都要十点多才弄完。终于到三个月发季度奖金的时候,领导把我叫到办公室,给了我一个信封,里面有2W的现金,我当时就傻了,老子第一次拿这么厚的钱啊。然后他告诉我他升成正经理了,所以钱由他发,原来的经理滚蛋了。

      这时我设计院的同学正在每月1.2K挣扎着,为了生活费,他还拼命的给原来的老师干私活。我请他吃饭的时候,心里充满了优越感。

      不过有个现象,我领导有时会叫我们一起唱歌喝酒,有一次我带上他,随后他每次必到,不管多忙,并且每次都抢着买单,甚至没钱的时候、刷信用卡。最后到了我不去他也会去的地步。

      2005年

      2005年是关键的一年,令我至今难忘的大事是我同学还我钱了。

      经过是这样的,他每月1K2的工资,刨去房租只剩下300了,而且他还经常冲老大请人吃饭喝酒唱歌,所以钱根本就不够,而他苦逼的设计院居然到年底都没有清帐。于是他除了每天晚上蹭我饭之外,还经常管我借钱。

      那个时候我经常加班,但不管多晚他都会等我回来,然后舔着脸说去吃夜宵吧,你看我一画图连时间都忘了。那段时间我们天天同出同进,以致房东一度以为我们是基友。吃东西的时候就一把鼻涕一把泪的讲又没钱花了,然后我就会借他200、300的。但他有个好处,每次借钱都会拿本子记下来,然后到月底就说: “我又欠你XXX了。”每月不多,但从9月上班到年底,他也欠了我1W多了。

      终于过完年,他的一个项目结了。有一天他神秘兮兮的说:“我请你吃饭吧,吃好的。”我说:“你不是没钱吗?”他说:“发奖金了。我再找个银行把欠你的钱转给你。”

      然后他拿出他的小本本,噼里啪啦一算,就和我去银行了。但他请我吃的所谓好的,就是在劲松桥的一个叫富丽客的自助餐厅,一个人才48块钱。当时我一边吃一边骂丫:“孙子,我借你的钱的利息都不止这点饭了!”

      第二件大事是魔兽世界公测了,这导致我沉迷了好久,并损失了2W块钱的季度奖,并且损失了一次向上爬的机会,这是让我最痛心的一件事。那段时间我每天按时下班回家下副本,玩到凌晨3点,导致工作效率直接下降。最后忍无可忍的领导把我叫到办公室,痛批我之后说:“直到现在我都不敢把一个项目设计完整的交给你管理。”这使我痛心疾首且痛改前非。

      第三件大事是我买房了。当时北京的房价微微开始冒头了,让我萌生了买房念头的,是有一次一个温州的姐姐直接摸到我们董事长办公室,半天出来了。后来公司流传开了,这个姐姐一下买了15套,这让我一下有了紧迫感。

      上半年我到处看房,主要集中在东三环(公司的房当时有点远),发现国贸及以北我依然买不起了,往南过了通惠河,一看:靠,和乡下一样,但房价还没有那么悲剧,想反正就隔河相望嘛,就凑合吧。

      钱一部分是我自己攒的,我在第一年除了买衣服和“供养”我同学之外,没有什么开销(大五的时候我和我女朋友分手了,她去了深圳,悲剧)。半年下来存了6W多,后来家里又凑了17W(我是啃老,很丢人),本来打算买个90多平的二室一厅。

      然后我就跑去单位开收入证明,我领导也正好走过,就问:“买房还是买车啊?”我说:“买房。”他问:“多大的?”我说:“90平米吧?”他讲:“这么小以后肯定不够。”我讲:“多了我也买不起啊。”他就讲:“买大的,我让公司给你先开10W,然后从你以后的奖金里扣。”

      这一扣就是1年多啊,但就因为这句话,我的房子多了30平米,这是我最最感激他的地方,因为这30平米,比我现在的1年工资还要多的多。这件事情,也成为了我妈每年一次的时候在亲戚朋友那儿必炫耀的材料。

      买完房子之后,我的压力一下就大了。我和家里合计,我自己还1.5k的贷款,家里帮忙还2k多的贷款,等到交房再租出去。但关键是我没有奖金了,而且不能失业,每个月也只能剩下2K不到。恰逢我们的房东想涨房租,我就和我同学说咱们退租吧,他说也好。然后我们在东南五环附近租了了拆迁房,开始了我们最苦逼的一段生活。

      每天早上我们得6:50起床,经过近两个小时的颠簸,到达公司。只能买两个5毛的包子做早饭,然后去公司换上西装,开始一天的工作。晚上最怕加班,末班车是22:10,要是没赶上,那就只能在公司睡觉了,后来我在公司的洗手间了备了牙刷和肥皂。

      现在回想起来,买房就像场豪赌,只不过在那个时间那个地点我赌对了。好多机会都是转瞬即逝的,但我觉得这样讲又有点犯贱,过后看谁都知道是机会,但置身其中谁又能看透呢?

      更加苦逼的是,公司在这段时间找香港梁志天做室内设计,而且指定要在香港做,我负责这个项目,于是经常飞香港去事务所盯图。当我怀揣着10块人民币走在琳琅满目的打折货柜之中的时候,心中暗自涌起一种苦涩。工作顺利了不少,这感谢领导的悉心培养,很多东西知道了怎么去做,再做就是熟练的问题了。而在这个过程中,我也渐渐发现了他受老板赏识的原因了。

      一、工程刚刚开始的时候,我和他去巡查工地,工程经理也陪着。有很多东西做得很糙,然后我领导就说这里不好那里不好,说着说着,他突然拿起一个混凝土块,冲着一个完工的部分一砸,然后说:“重新做吧。”就扬长而去了,留工程经理傻愣着。

      从此,工地施工的时候都知道要找我们研发部确认,施工质量好了很多。这事很快传到老板耳朵里去了,年底他就升为北京公司副总了。但这件事也埋下了很多后遗症,最终也成为我离开这里的原因之一。

      二、销售部的人跟我要一个报告,但这个东西应该是他们找广告公司做的。他们找我的时候,我正在忙别的事情,就随口答应了,后来也就忘了。第二天他们没拿到东西,就找我领导投诉了。

      领导下班找到我,我就很委屈的说:“这东西不该找我呀。”他问:“你答应了吗?”我说:“我随口应了一声。”他说:“既然不是你的事情以后不要随便答应,既然答应了就要做到,而且做了一定要做好。”然后我们两个一起熬夜把东西赶出来了。

      第二天一早他把东西发给了销售,同时附了封邮件讲这本来不是我们部门的事情,但东西是我熬夜赶出来的,建议以后这种事情最好找广告公司做。其实职场有尔虞我诈,但有个道理,你想要立足,就得让自己可靠可信。

      2006-2007年

      对开发商来讲,这是鸡犬升天的两年。什么叫鸡犬升天?用一句我们老板的话讲:“你就是弄条狗来摆在售楼处,它都能把房子买出去。”

      我看到了售楼处门口排起的长龙,人们彻夜排队为了一个买房号,还有人雇佣民工排队,拿到号的人好像拿到了未来,满脸洋溢着兴奋。我清楚的记得公司一个楼盘开盘15500,第一天推出的200多套房一抢而空。

      晚上我们跟销售一起吃饭,销售总监说,咱们涨价吧,就涨3000好了,第二天200多套还是一抢而空。像儿戏一般的涨价,像儿戏一样的售罄。这是地产商最暴利的两年,暴利背后是再高价拿地,再银行贷款,上市圈钱,整个市场冲入了巨量的资金,房价和打鸡血一样,离老百姓越来越远。

      对我来说这是好运的两年,高额的利润,可以让公司在开发的时候,不在对成本投入斤斤计较。想做作品,这种状态最合适了。公司拿了几块好地,做酒店,做写字楼,做商业。北京公司从单项目运作变成了北方区的总公司。对于我的领导来说,这是最好的消息,很快,他的头衔变成了北方区集团总裁。悲剧的是,我的职位还是职员。

      公司招了一个研发部经理,和政府是有点关系的,变成了闲职。冲在前头干活的还是我们原来这批人。这阶段我感觉我在扮演大内太监的角色,这让我很不爽,但也仅此而已。因为工资涨了好多,每月工资已经有7K了,还有季度奖金,再加上2007年我跟着好多老头老太冲进了股市,加上拼命的干私活,两年下来到年底的时候竟然存了40多W。

      工作也越来越得心应手,拿地、策划、委托设计、开会汇报、报规报建、配合施工,这些事情好像机械一样的重复着。我开始越来越少的加班了,我有小弟了。我开始把越来越多事情交给别人去干而不是挽起袖子自己干了。这时我开始理解我刚工作时,领导为什么要手把手教我干这干那。一件事也许他干只要一小时,教会我要十个小时,但以后他就不用再花时间在这件事上了。

      还有刚毕业的时候总以为自己很牛B,只有自己干才是最好的。做得时间越久越发现,社会上牛人多的是,而且人家是几年几十年干这个,设计我不是大师,施工图我画不过设计院的,砌砖我比不过瓦工。我要做的,只是发现这些资源,用最小的成本整合起来,这才是我的价值。以前我一直为自己的学历学校引以为傲,鄙视其他,到现在真正懂得尊重了。你越尊重别人,别人越尊重你。

      但是有些事情也不可避免了。讲几个我的经历。

      有次陪政府规划局的人吃饭——我十分讨厌这种饭局,说是吃饭,其实就是拼酒,我不明白这帮孙子除了喝酒还能干嘛,白酒一杯一杯的灌,头涨的像爆了一样,一疼好几天,而且不喝不行,第二天他们就给你图纸上挑刺——席间一个GWY讲,我家新砌了个小院,就是有点空。第二天我们就挖了几万块钱的树给丫家种上了,这种事情太多了。

      公司内部的勾心斗角也多起来了。以前公司刚发展,内部气氛很好,现在部门越来越多,手续越来越繁杂。我的职位是很尴尬的,职位低,但对什么都要指手画脚了,这就很招人恨了,再加上我的领导以前那么强势,现在他升了也是红人,别人不敢对他怎么样,但我们这些人有气撒了。

      举个例子,以前那个被砸的工程部经理,就拿了一张园林设计图纸要我签字,说是我发给他的,赶紧签完好进苗,我怕耽误了工期就给他签了,结果第二天全种上了老板最不喜欢的竹子,我赶紧问他,他说是你签的啊,我拿过来一看,在图纸里看了半天看见藏在黑底里的小字——X竹。

      这种斗争一直持续到我从某个供应商那里得知他吃回扣的消息,然后我电话他讲:“我找到了个更便宜的货源,要不要介绍给你啊。”他回答:“好啊,不过一直供货的那个质量有保障啊。”这个电话后,我们的关系才保持了微妙的平衡状态。

      该讲到我的同学了,这两年也是他转折的两年。他孜孜不倦的陪我们唱歌喝酒终于杰出了硕果。我领导先是给他一个在河北不怎么重要的售楼处设计让他试手,那小子设计的不错。我觉得设计是讲天赋的,这和音乐、美术是一个道理,有的人天生就能做好东西,平心而论,我的设计能力就平平。

      后来又陆陆续续给他楼盘做设计,而他不知道又从哪里遇到了几个老板,总之是从设计院跳出来自己单干了。那两年连格力空调都干房地产了,他的活能不多吗?后来我们也就不合租了,但每周都会去工体那儿喝酒。

      另一个硕果是,他泡上了我们公司的前台。那前台是朵花啊,我觊觎很久的,被那小子抢占了先机,当然后来他们分手了。总之这小子的一切都是从喝酒唱歌开始的。他一直也没买房,但2007年他买了辆车,宝马5,他说是业务需要。我心里在估算着这两年这小子赚了多少钱。后来我请他吃饭,是在工体*河蟹*,不是在富丽客。

      2007年我和他一起考一注,就是一级注册建筑师。一注至于我们,就好像是狗男女有了结婚证,总之很厉害,而且租出去每年能收8-10W。考试一共9门,可以考8年,这哥们巨禽兽的一次过了,我只过了7门。

      2008年

      2008年实在是跌宕起伏,荡气回肠啊。年初的一场大雪,搞得我差点被困在北京了。无数人抱着奥运会前中央不会让房价跌的憧憬,结果被赤裸裸的现实迎头棒喝。2008年初的关键词“次贷危机”。

      2008年初公司的售楼处迎来又一批人,这次他们不排队了,这次他们脸上洋溢着被欺骗的愤怒,这次他们是来退房的,顺带手把售楼处给砸了。2008年上半年大家都恐慌了,公司上层谁也没经历过这样的事,随着各个地产龙头的降价打折,整个公司都开始降价销售了。

      对于我来讲,最明显的感受,年初我去深圳出差,在华侨城办事,晚上一看行政给我订的是威尼斯人皇冠假日酒店,而以前我都是住洲际的,就打电话问,给我的回答是,公司账目有点紧。后来连皇冠也住不起了,只能住快捷假日。

      年初领导又请我吃饭,然后宣布,他调回总部做公司副总,就要离开北京了。他问我去不去,我说不去(因为这时候我苦命坑爹的找到了女朋友,我已经3年多空窗了,久旱逢甘霖,打死也要留北京)。他走后,我们的研发部经理又是个闲人,我们就成了没头的孩子。再加上楼市不景气,年初我基本上很闲的,除了每天对着跌停的股票长吁短叹。 但找到女朋友,让我有了向上的心思。

      首先是要把一级注册建筑师考了,今年这个证已经涨到8、9万一年了。为什么这么值钱,我给行业外的人解释下。设计院要干活,是要资质的,资质的一项就是院里有多少个一级注册建筑师,有资质你才有资格出施工图,拿去给人施工,相当于营业许可。现在设计院遍地开花,但一级注册建筑师又没那么多,僧多粥少,于是小的设计院就想出了租这个证,我每年给你9万块钱,你名义上是在我这里工作,实际上你爱干嘛干嘛。

      考一注是一件很费体力的事情,有设计作图题,自己背一个画板,吭哧吭哧一画就是大半天。考试的时候,还能碰上好多许久不见的师兄师弟同学,大家就聊:“你在哪里高就啊?”“你考了多少年啦?”然后互留电话,也是很好玩的。

      所幸的是,今天我把剩下的两门都过了。领证的时候,门口就被一个设计院的堵住了,他说他在西北开一个设计所,想租我的证,9万一年,租两年。我说好吧,第二天他就给我账上打了18W,我把证给他了。后来跟我同学讲,他就怒了,说我干嘛不给他,他在凑几个证,就可以不挂靠了,自己开设计院了,我说得了吧,你上哪儿弄去。

      考完证之后很空虚,就是那种一开始绷得紧紧的,后来猛然放松的感觉。再加上楼市股市也一直是半死不活着。这段时间我和女友打的火热,老租房不是个事,我们寻思这就买套房吧。(我的一套房租出去了,8K一个月,足够还贷款还有盈余)。

      那段时间市场非常差,房子基本上是随便挑。当时我们想买套大点的,就不在市里看,主看望京的楼,当时我手里已经有些钱了,再加上一注的钱,一次性就全划出去了。后来这里的房价涨到了3、4万,又是我始料未及的,可以说是狗屎运。

      买完房压力就大了,我迫切需要一个月薪多一点的工作来还房贷。而且这里没领导罩着了,好多事情不好做。正好这时候有猎头找我,推荐另个小地产公司的设计经理。

      当时我歇的百无聊赖,突然很怀念当年刚进公司的时候几个人天天熬夜加班,共同奋斗的日子。后来就答应去看看。他们给的薪水也合适,一个月是 1.2W,加奖金加3K津贴。月工资刚够我还房贷,月津贴用来平时生活,奖金买点金融产品,但进去的时候职位还是职员,因为我工作年限太短了。

      办完离职的时候,已经差不多是年底。我领导回北京这边开会,叫我一起吃饭,还叫上了我同学。这时候我同学已经成为这个公司的御用设计师了,同时我们见面的机会也越来越少了。

      在后海那边吃的,我领导在荷花市场和恭王府中间盘了个四合院,开了个私人会所式的餐馆,吃无非就是鱼翅鲍鱼这些。领导来的时候开了辆保时捷卡宴,还挽了个娇脆欲滴的小姑娘,后来介绍的时候说是南锣鼓巷某表演学院的学生。我同学带着我们公司的前台也款款的来了,还有苦逼的我,孤零零的在瑟瑟的寒风中等他们几个。

      开始气氛有点冷,毕竟大家好久没见了,喝了几杯酒之后,才渐渐活跃起来。酒席上得主题永远就这么几个,拼酒、吹牛逼、忆苦、讲兄弟情。中国人是一个特别喜欢吹牛逼的名族,不管混的多么成功,也有强烈的炫耀的欲望。

      我们领导开始从他的高中开始吹牛,就是如何如何聪明,如何如何万人迷,高考在学校数一数二之类,我就拍着他讲,我高考成绩秒杀他几条街,在省里也是排上号的,还不是照样在他手里装了四年孙子。他说你是没赶上好时候,我说不,我是真心服你,论做事做人,你甩我几条街。后来我同学和他女朋友先回去了,他也把他得小姑娘支走了,我们又去了朝阳公园旁的一个高级会所健身。

      现在回想起来,我说真心服他是真的。我发现不管机遇怎样,成功的人都有共同的特点——他们勤奋且坚韧不拔,目的性强,善于学习,从不抱怨规则的不公平,而是善于从不公平的规则中找到有利于自己的漏洞。他们对于成功的渴望,好像饿狼对于肉食的觊觎,他们随时肌肉绷紧永不懈怠,时机一旦成熟,一口就把肉吞下去。

      2009年

      2008年一整年部分场合地点的“北京欢迎你”还余音绕梁,CCTV新楼的一把大火把我带到了2009年。那天是元宵节,我跑去帮租房的人交物业费,在楼道里亲眼目睹了这一盛况,那家伙,当时正是锣鼓喧天,鞭炮齐鸣,好像一把火炬,浓烟蔽天,不见月亮。

      后来在这个楼下面用红的10米多高的铁板挡起来了,再后来这个板上碰了争做文明朝阳人的宣传画。后来在同样在东三环,CCTV楼往南的写字楼乐成中心也着了,这一次是在白天,同样的浓烟蔽日,我同样有幸见证了。2009年就与火结下了不解之缘。

      中央在2008年底投入的4万亿已经初见成效,楼市先是试探性的冒冒头,接着就开始了报复性的暴涨。对,是报复性的,当年跌多狠,现在就涨多狠。这一轮的涨价中,有个明显的特点,郊区领涨。当时通州有楼盘已经涨到3万多了,当时他打的广告是,30分钟直达CBD,你妹,三环30分钟步行CBD的楼盘也才3万多。

      这一年拱出很多地王,开发商抢地到了白热化的地步,政府赚得体钵满盆。这次的补涨给社会传达了一个很不好的信息,就是:房价是不会跌的。再加上2008年股市的崩盘,大量的资金都涌到了地产业。这已经变成了一场疯狂的盛宴饕餮。

      这也意味着整个社会都在房地产及相关产业豪赌,实体经济会遭受毁灭性的打击,这些在以后会慢慢显露出来。2008年股市6000点的时候,我们楼下的扫地大妈都赶着买股票;2009年的时候,人们见面必谈房事。

      2009年对我来说,在个人财务状况上也出现了质的转变。我现在月薪12K正好用来还银行的贷款,3K月补助用来应付我和女朋友的花销(女朋友自己也挣钱,我们月消费在5K左右),这样我每月有8K的房租盈余。我不用再战战兢兢的担心哪个月还不上银行的房贷了。于是我在手机上装了个记账的软件,记录每笔花销投资(以前我不敢记,因为经常赤字,完全没有成就感)。

      我在工行开了个买黄金的账号,股票没有信心,楼市我看着都胆寒,也没实力炒,黄金还是保险的。我每个月会花6K买黄金,2K存成定存,这个习惯一直保留到现在,不要小看这些钱,积少成多,现在也成了一笔不小的资金量。

      工作上也顺风顺水。刚去新公司,觉得精神状态为之一振。虽说招进去是职员,但是部门经理的职位一直是空着的,然后公司又找了两个建筑师,但是都是刚毕业的。我花了一个月熟悉了新公司的流程,就开使展开自己的工作。

      我还是习惯性的每天早上梳理今天的计划,晚上下班消项;我还是不停的提醒自己,要么不答应,要答应就做,要做就做好;另外,虽然我设计能力一般般,但这几年东走西看,肚子里也存了点货货,再加上楼市大好,公司有舍得花钱在设计和材料上了,总之是大展拳脚的时候。

      我甚至学会了前领导的砸工地事件,不过采取了更稳妥的方式。在工程初期的时候,做了大量的样板,我跑去工地,把不按设计做的,我没确认过的,一一拍照片记录下来。然后中午我去找大领导,说工地做了样板,您什么时候有空去指教指教,他就答应了。

      然后我写邮件给工程部经理,讲大领导要去看工地,但我发现还有写瑕疵,又把拍得照片发给他。他吓得下午就和我去了工地,把施工方臭骂了一顿,然后我又一一把不好得指出来,工程部经理自己就说了,你们砸了重来吧,以后什么事要和研发多沟通。

      在工作中,所有人都是打工的,谁给他发钱,他就听谁的。大老板给工程经理发钱,所以大老板的事情他就特别隆重;工程经理又给施工队批钱,所以施工队听他的。

      后来大老板去看完,夸工程经理管的好,他就很感激我提醒他,以后大家相处就容易多了。而我又达到了控制项目质量和效果的目的。这就是领导教会我的,凡事不要蛮干,要利用其它人的能力和资源。

      很快,我就升成了部门经理,月薪涨到了1.4W,每月4k的补助。我觉得这是我应得的,因为我一直在很尽力的保证项目的质量和效果,同时还兼顾这成本。我甚至比成本部还清楚每项分包,每种材料的价格。这得益于我砸工地之后对施工方产生了良好的控制。

      这时候我同学事业也蒸蒸日上起来了,除了原公司的项目,他又发展了4、5个地产公司,都是刚起步不大的那种,但设计费不菲。他招了4个人,再找他喝酒的时候,他披着burberry的围巾和风衣,穿着hermes的衬衣,拿着lv的公文包,香水味呛得我想咳嗽。我说装吧你,谁不知道当你你在宿舍扣着脚打游戏的熊样。他说没办法啊,有几个客户是富婆。我说我操,真的假的啊?喝醉了我们才会放声大笑。

      我常在网页新闻上看见我领导和原公司的消息,我们偶尔会发个短信聊聊。2009年底发奖金了,我拿了19W,这是最多的一次,我和女朋友去了法国,我给她买了一个卡地亚的戒指,花了7K欧。我隐隐觉得,有些事情变了。

      2010年

      2010年相对比较平淡,我现在回想起来,居然想不起来2010年我到底干了什么,也想不出2010年有什么标志性的事件,纠结。我突然想起我高中很痴迷的光荣三国志,刚开始一个城,几个人,每录用一个人,每攻下几个人都要兴奋半天,打到后来就是机械化的攻城掠地,就等着看统一后的结局,反倒提不出什么兴趣了。

      我已经工作6年了,我突然想到了我的领导,他大我5岁,4年前他已经是一个大公司的北方集团总裁了。我明年能升职吗?应该没戏,我应该还是个苦逼的研发部经理。

      或者我那个同学,自己一个人在外面打拼,虽然辛苦,但挣多挣少全是自己的,我还有勇气跳出去吗?我没有了,失去了稳定的工作,我就要很吃力的还房贷,我就要告别好不容易得来的安逸的生活。人生就是这样,在刚毕业租房挤公车的日子里,我有舍得一切重来的勇气,因为我除了激情啥也没有;等到什么都有的时候,我的激情却没了。

      我突然发现我老了,最明显的事实是,每个星期我都会回母校打篮球,六年如一日;从开始的时候干拔急停跳投,到现在弓着背用体重吭哧吭哧的往里抗,偶尔想跳一下,膝盖就会一阵酸痛。以前在同学群里振臂一呼,至少能组个队去打球,到现在我形单影只的走到一帮小孩子身边,舔着脸说:“同学,加一个吧。”

      同学聚会的主题从聊设计、聊月薪、聊前途,变成了聊结婚,聊小孩、聊政策。从以前的600块钱一桌还要AA的家常菜馆,变到了6000块钱一桌还是大家抢着埋单的高级餐厅。

      记得毕业那会大家二锅头就这燕京,又哭又吐稀里哗啦,现在彬彬有礼的用嘴唇沾点红酒。我突然有一种想骂人的冲动,当装逼成为一种社会性行为的时候,我也被卷进并淹没,亢奋着并痛苦着。

      我居然怀念起和规划局一起吃饭的日子,至少我们灌得茅台五粮液,每口都是货真价实的人命币,吐出来,在中国一口多少钱,在国外一口也是那么多钱;而这里2000块钱一支的所谓波尔多,在法国的酒屋里不会超过30欧。

      我那个曾经的室友迷上了打高尔夫,他的理由是球友有10%的机会发展成客户。他带我去打了两次,试图把我发展成会员。但我不明白着种不流汗的所谓运动有什么令人着迷之处,难道用这么细一根棒把这么小一个球打到这么紧一个洞里,就会有一种男性征服的原始快感?

      我问他这个问题,他笑了,很知趣的找了两个小妹一起吃饭,于是在这家球会的度假酒店客房里,我流着汗打完了第19洞。于是我明白了,在他的这些球友里,10%的被他发展成客户,还有10%把他发展成了客户。

      我买车了,买车的好处是去饭局有借口不喝酒,感谢中央严惩酒驾,感谢高晓松;买车的坏处是我在路上的时间又多了一倍,并且我没有名正言顺的理由不加班了。这段时间我迷上了看电影,我和我女朋友在蓝色港湾的影城办了张会员卡,下班早就会去看一场,只要时间合适,多烂得片子都看。看电影可以坐着不动,可以连脑子都不动,我觉得我快要退化到猪的形态了。

      讲工作吧,公司给我招了个应届毕业生。我终于看见了当年的我,胸有豪情万丈志,手无点滴半寸兵。于是我就用以前老大带我的方式来带他。有次我带他去考察个楼盘,到那里我就问,觉得怎么样。他滔滔不绝的讲出了这里不好那里不好,搬出了一大堆学院的理论。

      我听他讲完了,就问,那又什么好的吗?他愣了半天,将不出来。我说:“那这次参观就没有意义啦,什么都不值得学。但我觉得有些节点做得很好啊,我想找图纸来看看具体是怎么弄。”

      这时我想到我刚工作那会儿,一样的情景,我当时一样的回答,把项目批得体无完肤,想显示自己水平有多高。领导很生气的打断我,说了让我一辈子都难忘的话:“我不要听你讲哪里做得不好,我要听你讲学到了什么。再烂的东西都有他的优点,你今天学一点,明天学一点,才会有提高。要不然除了骂社会,你什么都不会,一辈子白活。看别人要看到优点,看自己要到缺点,懂不懂?”

      老祖宗讲过这么两句话,我觉得很深:一句叫静坐常思己过,闲谈莫论人非。还有一句叫露巧不如藏拙。

      但转念一想,我这么刻意的模仿我那个领导的行为,却永远没达到他的高度,本身就是个悲剧;而我还在这里说教,不是装逼?我的2010年就再这种悲剧装逼的氛围中度过了。

      2011年 终结了

      终于到今年了,我发现年代越近,记忆也越模糊,再次感叹自己老了吧,或者又在刻意忘记些什么。不过有始有终,我还是要把他写完。

      上半年楼市遇到了前所未有的阻击,限购几乎打击了所有的京城地产商。但有了2008年的经验,地产业内的共识是,只要扛住资金流不断,必然等到云开雾散的一天,再加上2009、2010屯了充足的资金,房价没有松动,但成交量少得可怜。就这样做吃山空,钱总有花完的一天,到下半年的时候,资金的问题开始暴露了。

      到后来,公司的付款都出现问题了。好在在年初公司有钱的时候,我催着把设计费都付了,要不然到了下半年的时候,估计连钱都发不出去了。做管理的,一定要善待自己下游的合作伙伴。最好是一个项目下来,大家能做很好的朋友,朋友永远不会嫌多,即使是酒肉朋友,朋友多了,路就多了。下半年发生了一些变故,就不多说。

      2012年

      反正是世界末日,我就顺带手写了吧,与主题无关。“你还相信爱情吗?”当有人这样问你的时候,怎么答?答相信说明你没经历过爱情,答不相信说明你再也不会有爱情了。所以当别人这么问我的时候,我会轻抚他的狗头,笑而不语。

      写在最后,都是我自己的看法,大家姑且看之:

      1、关于机会和选择

      平日,看到别人的成就,我一定会感慨:“为什么他的机会这么好?为什么我就赶不上,如果我生于他那个时代,我将怎样怎样。但我没有,所以我什么也做不了。”长此以往,我就看见一个个机会从我身边溜走,然后再一次次地发出这样的感慨。那么,我会永远在蹉跎叹息中度过,碌碌无为。

      终于我发现,这种感慨不过是出于嫉妒和懦弱的感情,为自己的懒惰找一个冠冕堂皇的借口。如果我当年不是每天回去打魔兽,不是每天上班先要打开电脑泡会儿论坛,而是把这些时间在自我提高,那我就能抓住那次房价大涨的扩张期,做到更高的职位,拿到更好的薪水。于是,机会溜走了。

      人生路上总有好多的岔口,当时选哪一条路往往很偶然。既然选择了一条的时候,另一条就关上了大门,那我们何必停下来,去感慨如果当初选了另一条会怎样怎样,自增烦恼。还不如勇往直前往前闯。

      用俗的不能再俗的挖井理论,永远有人在挖,有人挖出水了,他是winner;有人没挖出来,他是loser。因为他挖的地方比我好;因为他挖的比我早;因为他的铲子比我好;因为他从小学的是挖井,而我一开始学的是切烟囱……管他呢,只要地下有水,早晚有一天我能挖到。winner和loser只有一个区别,winner挖到了最后,loser放弃了。临渊慕鱼,不如退而结网。

      2、关于青春和大学

      鉴于好多筒子都是在校大学生和即将进入大学的,我再唠叨两句。青春一去不再来,越来越懂得这句话。从18-28岁是黄金十年,无论智力和体力都达到巅峰。这时候有不顾一切的拼劲,也不惧怕失败,因为还年轻,随时可以推倒重来。在这几年积累的东西,会影响你一辈子。所以千万不要恣意挥霍这几年,等到发现青春不再的时候,空悲切。

      比如我,现在回想起来,这十年里唯一亮色,只有高考。高中贪玩,成绩也一直是大起大落,直到高三急了,恶补。早上6点起床,晚上12点睡觉,买历年东城卷、西城卷、黄冈卷,除了吃饭就是做题。其实这么多年,好多题都是大同小异,后来做到看到题就想到最后一步公式的境界。而且每次做完对答案都对,居然有了成就感,也就没以前那么厌恶。终于高考成绩不错,语文还破天荒的考了144分,进了不错的大学。

      到了大学,整个人就松懈了。泡马子、打篮球、玩暗黑、逃课、设计作业都是在要交图之前赶出来。成绩越差,越没心思学。人就是这样,不是说成绩有多么重要,但是优秀是一种习惯,懒惰是一种惯性。人和人的差别又是就是因为每天积累差了一点点,终于有天你发现,原来我和他差了这么多。

      如果离成功只有一步之遥,那谁都会咬牙坚持下来;如果忽然发现距离很远,那谁都会放弃。而关键的一咬牙,上了一个层次,有人就会春风得意,越活越成功;有人没上去,永远在苦逼中挣扎求生存。然后想,原来在当时,我们俩的距离才那么近。

      大学毕业,我们系三分之一出国;三分之一推研了;剩下最差的三分之一,入社会找工作。我就是那最差的三分之一。有人说我现在也不错啊,还有现随着普通劳动者的工资越来越高,读书无用论的说法也越来越甚。

      我觉得首先这是对以前大学生高高在上的一种不正常的风气的反弹,那时大学生稀缺,身价虚高,仿佛读了大学就高人一等,毫不费力得拿高工资,凭什么?同样付出劳动,同样创造价值,就应该得到合理的收获;终于人们发现不是所有的大学生就一定比农民工干得好,有时不是抛出名校研究生卖猪肉之类的新闻,让长期被压抑的神经在嘲笑中得到释放。

      依我看,在这种浮躁的社会风气中要保持冷静。大学的意义在于他给你打开了一片天,让你看的更远,让你知道原来在这个山头之外还有一个更高的山头。并不意味着你已经达到了那个山头,但你有了往上爬的方向,同时他给你聚集了一帮志同道合,以后可以互相扶持的社会单元。所以完全不必短视和急功近利,人生那么长,炫耀是做给别人看的,本事是自己,好像跑马拉松,一时谁跑得快慢不重要,关键是谁跑到了最后。

    展开全文
  • 作为程序员界的一枚小菜鸟,可谓是,从大量的 CRUD 业务中,练就了一身复制粘贴即可用的本领。...但是呢,迫于网上不断流出的 “35岁程序员危机” 话题,我不得开始认真思考,我这马上奔三的大龄青年...
  • 他获得了词作家Barry Mason(写过Last Waltz-最后的华尔兹的作者)的欣赏,从此一发不可收。我们听到的这首Walking In The Air是2001年录制的,那时候他才9岁。据传好几家唱片公司争相与他签约,最后Emi(百...
  • 开始写blog了!

    2007-03-14 10:43:00
    第一次写blog!从此一发不可收! 
  • Python 快速入门实战教程

    万次阅读 多人点赞 2018-04-17 23:30:03
    两年前,因项目需要,作者首次接触 Python,从此便一发不可收,基于 Python 完成了多个项目的开发。一路走来,深感书本与实践脱离之痛,市面上种类繁多的编程辅导书,大都力求面面俱到,动辄数百页,难免...
  • 从此SGI超级电脑制作的电影特技一发不可收从斯皮尔伯格执导的《侏罗纪公园》直到斯瓦辛格主演的《终结者Ⅱ》无论是巨型恐龙还是会变形的液态金属机器人都尽情展示了电脑图像的迷人风彩把世界电影特技史带到了一个...
  • 0x01 前言自从去年小白师傅在owasp论坛上分享过这个工具后,从此一发不可收拾,开启了躺着洞的好日子(略浮夸~),本以为这个神器应该是小白入门标配,没想到前些日子看到官网竟然联合i春秋出了视频,足见对小白选手...
  • 微风2005

    2017-02-23 13:17:00
    刚入模时看到一篇KT板机制作过程,从此一发不可收拾,但是现在网站已经打开了:高翼练习机制作,还好网络上有心人早就复制备份了:打造一台适合初学者使用的练习机「微风2005」,这里也收藏一下: 好友hogkin说他...
  • 收藏吧 少年

    千次阅读 2014-07-19 13:14:20
    下载的兄弟注意了,点击下载后,可以在url中看到后缀名:),如果把后缀名改错了就看了了,所有的资料都有人下载过了,应该都能看。 Python相关的资料还可以看: http://jythoner.javaeye.com/blog/569987 ...
  • 两年前,因项目需要,作者首次接触 Python,从此便一发不可收,基于 Python 完成了多个项目的开发。一路走来,深感书本与实践脱离之痛,市面上种类繁多的编程辅导书,大都力求面面俱到,动辄数百页,难免令初学者...
  • 两年前,因项目需要,作者首次接触 Python,从此便一发不可收,基于 Python 完成了多个项目的开发。一路走来,深感书本与实践脱离之痛,市面上种类繁多的编程辅导书,大都力求面面俱到,动辄数百页,难免令初学者...
  • 今天是个开始,很高兴来到博客园的大家庭。  先来个自我介绍,给将来...作为三方人员外派到了这里,变成了一名小小码农,为更高效更快速的处理表格,开始接触了VBA,从此以后便一发不可收,凭借着大学里学习的那点...
  • 从此一发不可收拾,写了不少脍炙人口的系列文章。 重构不是阳春白雪的高端玩意,而是码农的编程利器 CSDN:对重构,大家的理解可能都有所一样,你对重构是怎么理解的? 范钢: 有人认为重构是...
  • 然而让陈女士想不到的是,已过不惑之年的丈夫竟然痴迷上了一个叫“开心农场”的网络游戏,从此一发不可收。 他连说梦话都是“葡萄熟了” 陈女士清晰地记得,变化是从一个多月前开始的。“上个月12号左右,我回了...
  • 个人转发收藏

    千次阅读 2019-01-02 10:01:00
    如果不可核查,对整个市场就建立不起信用。那它就不可能成为资本市场上的玩家。好了,现在有了移动支付,它对餐馆的意义不是顾客支付方便,而是让餐馆的每一笔收入都可追溯、可核查、有信用,这个信用还可以扩张到...
  • 你收藏了哪些藏品?

    2016-07-09 17:43:00
    这是我无意中发现的,从此就掉进了坑里。成套的我暂时只有这四盒,剩下的很多都是散张。看的时候把照片放在观影仪器上。由于利用的是左右眼视觉差,所以手机拍不出效果,当把眼睛靠近后,两幅照片会重合到一起,然后...
  • 多年的收藏

    千次阅读 2010-12-14 15:38:00
    2010 ...下载的兄弟注意了,点击下载后,可以在url中看到后缀名:),如果把后缀名改错了就看了了,所有的资料都有人下载过了,应该都能看。 Python相关的资料还可以看: ...
  • other 猿 多年收藏

    千次阅读 2013-06-25 13:30:53
    下载的兄弟注意了,点击下载后,可以在url中看到后缀名:),如果把后缀名改错了就看了了,所有的资料都有人下载过了,应该都能看。 Python相关的资料还可以看:http://jythoner.javaeye.com/blog/569987 新书区 ...
  • 一个偶然的机会该生接触了网吧,从此便一发不可收,学习成绩一落千丈.到最后,该生偷偷上网甚至一连十几天不回家.孩子母亲含泪给学校、县市领导写信反映情况,在当地引起了极大的反响. 这类情况在心理医学上叫"病理性...
  • 一个程序员多年的收藏

    千次阅读 2015-12-01 19:15:47
    程序员珍藏的东西会是什么?呵呵,除了平时写的代码,就是那些百看不厌的电子书了。...下载的兄弟注意了,点击下载后,可以在url中看到后缀名:),如果把后缀名改错了就看了了,所有的资料都有人...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 874
精华内容 349
关键字:

从此一发不可收