一年前,我因一些原因,工作变动,当时痛下决心,引用了《程序员的呐喊》封面的那句话:
Just stop sucking and become awesome!
一年很快就过去了,最近看了不少大神的博客和Github,也刷了不少Leetcode的题。有感而发。
如何评估一位程序员的技能和水平呢?有太多办法了,但基本上就是项目和算法,更细化一些,可以罗列如下:

  • 对数据结构和算法的掌握和水平, 如各类排序和树算法
  • 对某种底层技术的理解和认识,如TCP/IP
  • 是否对技术有很大的兴趣,如个人项目,博客,自研的类库和软件
  • 项目经历,是否完成过大型系统设计,如海量数据处理经验
  • 对业务是否有自己独特的理解,并如何服务于技术

当然,也要看其他软技能如沟通能力,不过基本上还是看上面这五条。我能占几条呢?大概2.2条的样子。

人和人的能力水平,简直是天上地下,甚至不具备可比性。乃至于,靠一般的努力都无法望其项背!

往上看,看大神的博客和教诲,感受代码看都看不懂的“酸爽”。强者愈强。很多人从中学甚至小学就开始接受编程教育,名校的计算机科班,本硕博每天研究的都是算法理论和优化,之后再工作中又有大量机会去亲身实践。加上这些人既刻苦又聪明,而且那种对问题的兴趣,又极大地加速了他的发展。

强者自然有了更好的平台和工作,接触更牛的人,进而有了更广阔的视野,又进一步强化自身能力,良性循环。

而默默无闻如我者,非科班出身,本科研究生学的都是通信,研究的是信道编码和通信原理,虽然说也是“计算”的某一个分支吧,但这种细分领域的能力和知识迁移起来,是需要不少成本的。大神刷leetcode都那么多遍了,我两年前才知道有这么个东西!一个月前看SICP感觉无比惊艳,之后才知道那本书不过是MIT大一新生的入门教材!

我常常会陷入自己创造的迷宫中沾沾自喜。几年前做的一些项目,当时觉得很赞,到后来才明白那不过是口水代码堆成的不牢靠的土城墙,在时间的腐蚀下慢慢被腐烂。若不是去年研究文本分析tn,接触编译技术,那些概念我抓破脑袋都想不出来。而我开发的爬虫和引以为傲的流技术,不过是SICP里的一个章节而已。

往下看,还有大量初级码农刚走出学校大门,对基本的原理也不甚清楚。不少人编程只是为了养家糊口,连兴趣都谈不上。

有时可怕的不是自己的无能,而是无知。而且是不知道自己无知。觉得自己已经很厉害了,便对别人的工作不care。有多少人很久没看过有深度的技术书籍了,多少人只是在GitHub上star或是fork一个项目,之后就再也没有关注过。

只是,要想进步,谈何容易。有那么多的杂事和其他细节,你努力,别人也在努力。常逛博客或是知乎,会有一种错觉,大神写得东西非常精彩,拍案叫绝。但是只要你点击了关闭按钮,文章里说的东西,就和你没有半毛钱关系了:自己该怎样还怎样。谁都能说出一堆高端名词,分布式,大数据,人工智能,大家都是键盘侠。可是,真正去写个代码啊,不少人就开始抓耳挠腮了。之后那句名言,我也就不需要引用了吧。

只看文章不写代码,就会出现典型的“能力跟不上理想”,每天谈的都是FLAG又出了什么新东西。只写代码不学习,就会陷入自己的世界。忙时晕头转向,闲时不知所措,时间就这么哗啦啦的过去了。

很多人太缺乏专注力,这种专注不是针对他感兴趣的那些事情,而是他不感兴趣或是感到困难的事情。某些宝藏就在视野之外,我们却草草扫了一眼,而忽视了它。比如我,看了那本神作《具体数学》,我深知看完之后我的技能会突飞猛进,然而我却依然在几章之后默默地放弃了它,兵败如山倒。

我之前对“训练”有偏见,觉得我每天都在编程,干嘛还要花那么多时间去刷题呢?这不是浪费时间吗?后来才意识到,开了十年的车,是一位好司机,却不是好车手。想要让技能更上一层楼,就必须对其进行专门的训练。

是啊,我做了一年自由的工作,收获了什么呢?我庆幸自己重新开始更新技术博客,开始更新GitHub;我庆幸自己从C#和Windows的泥潭中跳了出来,拥抱了开源;我庆幸自己学了python,写了tnpy和etlpy。如果没有这些改变,恐怕生活会更加黯淡。

我后悔自己没做什么呢?依然不够开放和专注。对核心和高难度的技术(比如机器学习),没有深入地推导公式而只知皮毛,无法让自己冷静下来认真思考;没有仔细去做leetcode和刷题;没有让更多的代码接受大众的审阅。

人是有局限的,振臂一呼就拿下山头的英雄主义,明显不适应于对智力要求较高的学习任务。我敢打包票,看那本《具体数学》,绝大多数人两个小时以后就看不下去哈欠连连了。如何让自己坚持下来简直也是一门艺术,大部分人,对自己根本不够狠,下不了狠手,更别说想要有多大的提高了。看书,做题,编程,写博客交替进行,效果也许会好很多。

这一年中,我肯定是进步的,但我深深地感觉到,自己学习,每天感叹别人的博客,随手翻一翻书本,再随便敲敲代码是绝对不行的。编程是一种社会活动,是“任务导向”的,需要有团队,有人带,并且包含持续的集成和输出。

这篇文章,权当是我这一年在技术方面的一个简单的总结吧。我期待之后的我,能接触到更好的团队和环境,更踏实稳定的技术,不求成为大神,让自己尽量awesome起来。

Stop sucking,Become awesome.这一年我做到了么的更多相关文章

  1. (转)LSTM NEURAL NETWORK FOR TIME SERIES PREDICTION

    LSTM NEURAL NETWORK FOR TIME SERIES PREDICTION Wed 21st Dec 2016   Neural Networks these days are th ...

  2. <老友记>学习笔记

    这是六个人的故事,从不服输而又有强烈控制欲的monica,未经世事的千金大小姐rachel,正直又专情的ross,幽默风趣的chandle,古怪迷人的phoebe,花心天真的joey——六个好友之间的 ...

  3. CodeForces 173B Chamber of Secrets spfa

    Chamber of Secrets 题目连接: http://codeforces.com/problemset/problem/173/B Description "The Chambe ...

  4. python瓦登尔湖词频统计

    #瓦登尔湖词频统计: import string path = 'D:/python3/Walden.txt' with open(path,'r',encoding= 'utf-8') as tex ...

  5. A Game of Thrones(15) - Sansa

    Eddard Stark had left before dawn, Septa Mordane informed Sansa as they broke their fast. “The king ...

  6. A Game of Thrones(2) - Catelyn

    Catelyn had never liked this godswood(神木林). She had been born a Tully, at Riverrun far to the south, ...

  7. English Learning - Vampire bats

    " Vampire bats are very adaptable." Bambi said. And when their roosts are disrupted or the ...

  8. 程序员大牛 Jeff Atwood 的两本中文书

    程序员大牛,StackOverflow.com创始人之一--Jeff Atwood 英文博客:http://blog.codinghorror.com <高效能程序员的修炼>,人民邮电出版 ...

  9. 程序猿大牛 Jeff Atwood 的两本中文书

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/happydeer/article/details/17094271 watermark/2/text ...

随机推荐

  1. HashMap实现缓存

    package com.cache; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import org.a ...

  2. SQLServer触发器创建、删除、修改、查看

    一: 触发器是一种特殊的存储过程﹐它不能被显式地调用﹐而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活.所以触发器可以用来实现对表实施复杂的完整性约束. 二: SQL Server为每个触发器 ...

  3. codeforces 360 D - Remainders Game

    D - Remainders Game Description Today Pari and Arya are playing a game called Remainders. Pari choos ...

  4. git 常用操作命令

    A. 新建Git仓库,创建新文件夹git init B. 添加文件到git索引git add <filename>  --- 单个文件添加git add * --- 全部文件添加 C. 提 ...

  5. 谁说JavaScript容易?

    你尝试过给一组数字排序吗? Javascript的sort()方法默认用来给数字排序 所以[1,2,5,10].sort()将会输出[1, 10, 2, 5]. 要正确的对数组进行排序的话,你可以使用 ...

  6. PHP的FastCGI

    CGI全称是“通用网关接口”(Common Gateway Interface), 它可以让一个客户端,从网页浏览器向执行在Web服务器上的程序请求数据. CGI描述了客户端和这个程序之间传输数据的一 ...

  7. iOS开发点滴:iPhone屏幕适配

    最近开始做iOS开发,遇到一些小问题和解决方法,记录下.   今天是iPhone屏幕适配 iPhone5出来之后屏幕就有iPhone就有了2种尺寸:3.5寸和4寸,xcode 5 的IB设计器里面界面 ...

  8. 基于Deep Learning 的视频识别方法概览

    深度学习在最近十来年特别火,几乎是带动AI浪潮的最大贡献者.互联网视频在最近几年也特别火,短视频.视频直播等各种新型UGC模式牢牢抓住了用户的消费心里,成为互联网吸金的又一利器.当这两个火碰在一起,会 ...

  9. SpringMVC拦截器详解[附带源码分析]

    目录 前言 重要接口及类介绍 源码分析 拦截器的配置 编写自定义的拦截器 总结 总结 前言 SpringMVC是目前主流的Web MVC框架之一. 如果有同学对它不熟悉,那么请参考它的入门blog:h ...

  10. js中几种实用的跨域方法原理详解

    这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...