热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

程序员如何让自己的技术能力突飞猛进?

​最近在Blink 发表了几篇小作文,讲述了自己的学习方法,没想到竟然成了爆款,很多小伙伴都在评论区里面根据自己挺迷茫的个人情况,请教自己的学习方向,我居

最近在 Blink 发表了几篇小作文,讲述了自己的学习方法,没想到竟然成了爆款,很多小伙伴都在评论区里面根据自己挺迷茫的个人情况,请教自己的学习方向,我居然回答了几百条,我觉得这是一件非常有意义的事情,因此我做了一次文章的整合与延展,以文章的形式发表出来,方便学习编程朋友们收藏,勉励各位能在技术事业上不断突破。


一. 初学者如何自学

世界上伟大的人才都是孤独的,因此对于初学者在家自学要规避妈宝和社会人,一不要围着家人扯不完的家事,二不要过度寻朋访友,要留给自己连续、成片的时间和精力,这很重要。

大学计算机、软件和大数据等专业,会学习各种编程,每年不重样的学习,其实这只是符合考试,并不符合编程规律,专精于一种语言的连续学习,不断训练编程思想才是关键,假期梳理很重要。你可以理解为掌握一门主流语言等于为自己创造了一件好产品,而这件好产品是肯定能在社会上找到很多买家。重点:选择看好书,寻找优质源代码样例进行修改训练,尝试构建 Linux 环境。

  1. 希望在 C 的路线发展,将来的机会领域是在系统层和硬件驱动底层,除了 C 语言之父的程序设计外,推荐 Unix 高级环境编程和 Unix 网络编程,懂得 Unix/Linux 的开发环境很重要。

  2. 想走 Java 路线,Java 是最为通用的应用层编程语言,但基础一定是要掌握面向对象,推荐买本 Java 编程思想,静下心看,边看边练,除了寒暑假,坚持大学就看完它,这本书对初学者的编程和面向对象思维塑造很有效,别总想二十一天解决问题,欲速则毁灭。

  3. 想走 C++路线,C++既能和 C 一样搞系统底层,还适合游戏、图像、云计算和高性能组件等,除了 Web 应用,也算样样精通,但是 C++学成很难,我身边的朋友十年 C++开发经历,不认为自己学懂了。因此 C++适合有恒心是人,初学者建议不要看 C++之父的程序设计,先从 C++Prmier 入门,若能入行了,回报颇丰。

  4. 想走大数据路线,那么掌握分布式理论、数据库/NoSQL、Linux 服务端、网络通讯都很重要,大数据技术可以通过 Java、Python、SQL 等语言来操作数据采集、清洗、存储和分析,这是应用需求;也需要监测、维护和优化分布式多节点的 Linux 系统,这是运维服务;还会延伸到数据挖掘、机器学习和神经网络的 AI 领域。那么对于学习大数据技术的同学一定首选要认清自己必须是个“杂食者”,推荐书籍:分布式系统概念与设计、TCP/IP 网络经典三卷、Linux Shell 命令与脚本、Java 编程思想、数据密集型计算、机器学习基础。学习顺序:网络知识-> Linux 知识->分布式知识->编程知识->数据技术知识->AI 算法知识。

二. Linux 怎么学

如果想要当一名厉害的程序员,最好的老师其实就是了解你的操作系统,而选择正确的操作系统是进步的关键所在,对于程序员来讲,操作系统的学习选择非 Linux 莫属,从现在大趋势来看,懂 Linux 就是必备技能了!

在长期的使用当中,你从 Linux 身上能了解到 tcp/ip 协议,网络连接与通讯,配置调参,文件和权限,shell 命令和编程,性能观测,进程服务以及网络端口,等等,我从上大学开始玩 Linux,蓝点 Linux、中软 Linux、Mandrive Linux、Debian Linux...,到现在二十年,老鸟一枚。总之程序员学习 Linux 操作系统,要经历三个阶段:

  1. 第一阶段,从会安装到图形玩家也就是懂得各种发行版的安装,例如:Debian、Ubuntu、CentOS、Redhat、Suse 等。然后开始在 Gnome,KDE,fvwm(高级水平)各种桌面系统进行美化和应用体验。这就是 Linux 应用和玩家级别。

  2. 第二阶段,从图形到终端,这时候就要开始大量云服务,数据库,应用服务的安装,配置和运行,让自己达到 Linux 系统管理员级别。

  3. 第三阶段,从命令到编程,这个阶段掌握了 Linux 的体系结构,可以搞定各种 Linux 策略配置,懂得了大量 shell 命令,这时候开始学习 shell 编程和 Python 编程,让 Linux 操作系统的所有问题都听你调遣和部署,那么你就进入到了 Linux 黑客阶段。

三. 如何提升编程能力

想成为高水准的编程工匠需要经过三个基础方面的努力:1.看书、 2.阅读源代码,3.代码重构。

JAVA、Linux 是我的擅长的核心领域,但我不排斥其他领域的技术书籍的学习和理解,包括:C/C++、C#、Windows 编程、Unix 网络编程、Python 等。这是作为一位专业程序员应该具有的基本素养。另外并不是编程技巧好就自以为是个牛人了,那你就错了,还要更多在软件工程方面的去理解和感悟,那么人月神话、敏捷开发、团队之美这类书籍就也需要多读,多体会,多在工程实践中去理解。往往说一将无能,累死三军,不是说将军的武艺不够强,关键原因是将军总是赤膊上阵,不懂得指挥,团队就如无头苍蝇乱飞,那么再优秀的个人代码技巧也抵不上一个团队稀烂的开发工程。

阅读源代码,当很多人只想着 ctrl+c/ctrl+v 赶紧解决完工好回家追王凯、靳东的新剧时,而黑客潜质的程序员,正在电脑面前阅读着大师们的杰作,想从框架的源代码中寻找到更优解的答案,因此很多人只能称之为码农。面对 github 浩如烟海的大师之作,就好像电影《七宗罪》里面老警探对着图书馆的保安说:“先生们,我永远也不会懂,有这么多书,知识的世界完全唾手可得,可你们呢?整晚打扑克牌”,可能很多人看到会反驳我。没有关系,若有心人能体会到其中的奥秘,对人生发展定大有裨益。

我在 10 年前就看完了 JSF/MyFaces 80%的源代码,Springframework Core 源代码,那时候极为推崇 Rod Johnson 的编程风格。去年把 Hadoop HDFS 的 Client 部分看了大半。每当阅读完这些源代码之后的几年都会在相应的工作中受益无穷,不仅仅是编程,还有对软件架构洞悉的能力极速提升,这是千真万确的事实。

再说说重构的重要性,当你接手了一个项目,屎一样的 if if if ... else else else ...,几千行嵌套的方法体时,你是不是脑海中出现了万只动物。请相信这不是一个人的力量,而是无数和你一样的程序员接手后经历了一样的愤怒,又不得不继续 if else 下去。这种烂代码是对程序员群体最大的羞辱。自己的代码永远有一个硬性要求,方法体绝不能超过 100 行,平均应该在 10-20 行之间。一个类可以重构为出更多的方法,解决不同方法的重复代码,甚至成为一种代码洁癖。

四. 如何变得卓越

我们对精英人才所作出的卓越事迹都会赞叹不已,实质上他们经历的训练都是反人性的。例如:面对击打,普通人的意识是躲避、恐惧和愤怒,但拳击运动员的意识是闪躲并伺机反击;面对写作,普通人的思维是浅层碎片化,但作家的思维是层次系统化。达到专业的能力,必然要在身体、思维上经历痛苦。程序员也是一样,想要成为卓越,就要经历痛苦,所谓因兴趣而生,也都是能抚慰这个痛苦过程的吗啡而已。

那么怎样才能成为卓越的程序员呢?我提供的观点是:不怕麻烦、代码洁癖、成为模仿者。

先说不怕麻烦,学编程和其他技术的过程,前方就是崎岖的山路,平坦的路不多,除非你选择放弃或安于一隅。我记得十几年前安装 Debian Linux 的时候,只给个基系统,需要配置内核与硬件的参数,运行起来才是熟悉 apt-get,我深刻的记得我第一次 Debian 安装成功我用了整整三天,特别是晚上,头皮都发麻,可是成功跑起来 Gnome 后,我了解到 Linux 的软件包体系都有什么了。

还有一次 2010 年开发应急指挥系统,需要整合多少技术呢?Swing、EJB3、MQ、语音调度设备(CTI、IVR)、MQ、触摸屏、WAS、DB2、语音识别、CentOS,麻烦吧!大半年的时间为团队夜以继日的搭建调试,当有一天看到身边 10 个 IP 电话通过 API 调用同时响起,并组成会议时,触摸屏的模拟电话状态乖乖跟随设备变化时,那种激动无比的心情。

再说代码洁癖,前面我聊过,我对自己代码方法体的要求极为严苛,不能超过 100 行,平均 10-20 行,这不是写到一大堆才干,而是写一点,实现一点,再重构一点。我现在写代码,只看 Log 输出,从不用调试,很多功能代码都是一次写完就单元测试通过,大量的测试精力都留给了集成环境的反复测试。

还有一次是好几年前我负责的系统是从内网通过网闸实时取外网 Kafka 的数据,当时团队使用 Spring Streaming,海量数据下有 Bug,不稳定,我就替代重写了数据采集和流式处理框架,表现挺稳定,正当我跟客户炫耀的时候,客户也很懂啊,就问我:“你咋不用 Spark 流计算呢,费那么大劲”?我猛然醒悟:“呀!太着急,忘了!”

当你编程能力精益到了一定程度,开发技术框架都是自然而然随需而生。

最后说说成为模仿者,黑客社区有句经典:“寻找大师, 跟随大师, 模仿大师, 洞察大师, 成为大师”。我最早盯上 Joshua Bloch,模仿 Collection 集合设计;后来又偷学 Rod Johnson 早期 Spring 代码...,当你进入到大师的作品中时,你可能就是下个踩在巨人肩膀上的人。


本文由「守护石」公众号出品,转载请注明来源和作者


推荐阅读
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • Python入门后,想要从事自由职业可以做哪方面工作?1.爬虫很多人入门Python的必修课之一就是web开发和爬虫。但是这两项想要赚钱的话 ... [详细]
  • bat大牛带你深度剖析android 十大开源框架_请收好!5大领域,21个必知的机器学习开源工具...
    全文共3744字,预计学习时长7分钟本文将介绍21个你可能没使用过的机器学习开源工具。每个开源工具都为数据科学家处理数据库提供了不同角度。本文将重点介绍五种机器学习的 ... [详细]
  • Hadoop——Hive简介和环境配置
    一、Hive的简介和配置1.简介Hive是构建在Hadoop之上的数据操作平台lHive是一个SQL解析引擎,它将SQL转译成MapReduce作业,并 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • GPT-3发布,动动手指就能自动生成代码的神器来了!
    近日,OpenAI发布了最新的NLP模型GPT-3,该模型在GitHub趋势榜上名列前茅。GPT-3使用的数据集容量达到45TB,参数个数高达1750亿,训练好的模型需要700G的硬盘空间来存储。一位开发者根据GPT-3模型上线了一个名为debuid的网站,用户只需用英语描述需求,前端代码就能自动生成。这个神奇的功能让许多程序员感到惊讶。去年,OpenAI在与世界冠军OG战队的表演赛中展示了他们的强化学习模型,在限定条件下以2:0完胜人类冠军。 ... [详细]
  • 数据结构与算法的重要性及基本概念、存储结构和算法分析
    数据结构与算法在编程领域中的重要性不可忽视,无论从事何种岗位,都需要掌握数据结构和算法。本文介绍了数据结构与算法的基本概念、存储结构和算法分析。其中包括线性结构、树结构、图结构、栈、队列、串、查找、排序等内容。此外,还介绍了图论算法、贪婪算法、分治算法、动态规划、随机化算法和回溯算法等高级数据结构和算法。掌握这些知识对于提高编程能力、解决问题具有重要意义。 ... [详细]
  • 前言:拿到一个案例,去分析:它该是做分类还是做回归,哪部分该做分类,哪部分该做回归,哪部分该做优化,它们的目标值分别是什么。再挑影响因素,哪些和分类有关的影响因素,哪些和回归有关的 ... [详细]
  • cs231n Lecture 3 线性分类笔记(一)
    内容列表线性分类器简介线性评分函数阐明线性分类器损失函数多类SVMSoftmax分类器SVM和Softmax的比较基于Web的可交互线性分类器原型小结注:中文翻译 ... [详细]
  • 机器学习——KMeans算法
    相似度或距离假设有$m$个样本,每个样本由$n$个属性的特征向量组成,样本合集可以用矩阵$X$表示$X[x_{ij}]_{mn}\begin{bmatrix}x_{11}& ... [详细]
  • 一份来自清华的数据分析笔记,请查收!
    之前发过很多数据分析的文章,收到不少好评,但也有一些困惑:入门数据分析该学哪些知识点?该看哪些书?是从Pyth ... [详细]
  • 深度学习与神经网络——邱锡鹏
    深度学习与神经网络——邱锡鹏-一、绪论人工智能的一个子领域神经网络:一种以(人工))神经元为基本单元的模型深度学习:一类机器学习问题,主要解决贡献度分配问题知识结构:路线图:顶 ... [详细]
  • 大数据学习入门难,给初学者支招 ... [详细]
author-avatar
wymanNi
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有