编程并不是说代码怎么写,框架怎么用,业务怎么转换为代码逻辑,这些都不是编程的要素(但却是工作的刚需......)。我认为按照下面这个路线来学习编程,会使自己在学习的路途上少去很多问题(比如为啥会有多线程问题啊,什么是阻塞啊,为啥单线程模型反而更快啊,I/O为啥是阻塞的啊,为什么要报NPL错误啊等等等等,可能不太恰当,打个比方嘛)。

先学一门程序语言

首先得掌握编程的逻辑。

要学会把生活中的问题,用程序语言的方式来转换。最简单的学习就是直接学一门编程语言。可以是C/C++,Python,Go,Java, C#,Kotlin,Swift等等面向对象语言,随便选一个喜欢的/以后会用到的都可以。

你会学习到变量、循环、条件判断、类与对象、基本数据结构的一些用法甚至更深一些,获取文件、控制栏输入输出等之类的东西。这是一门程序语言的基础。

然后最好开始学习数据结构

因为此时掌握了基本编程语言的你,是完全可以把理论的数据结构转换为代码逻辑的。数据结构一般不需要了解一些底层复杂的机制,也暂时无需考虑并发问题。基本的线性表、树状结构、图型结构、查找/排序算法,高级数据结构等等,慢慢学习并总结,尝试用这些数据结构与算法去类比生活中的一些事务。那时你会发现,算法无处不在(就跟数学一样)。

可以上LeetCode看看了

掌握了编程语言与数据结构,就去刷题吧。鲁迅说过,刷题千万遍写代码如有神。大胆地刷吧,不会就看答案,去理解答案,然后思考并总结其方法,最好是写文章记录下来。写文章不要记流水账,一定要你完全弄明白了再去写,保证写下来的都是自己所领会到的(虽然百分之九十九都是别人写过的...承认吧这就是事实...)。LeetCode社区还会有一些比赛之类的,虽然我还没去体验过。

计算机是如何运作的?

如果你不知道计算机到底是怎么运作的,那你也很难去深刻理解你写的那些涉及多线程、I/O、文件、网络的代码的原理。《计算机组成原理》《操作系统》《计算机》这两本书也是计算机系学生的必修课。为啥要学这个,这不明摆着嘛。。

一开始挺枯燥的,慢慢看,有耐心一点。其中会有一些东西运用到数据结构,正好派上用场。

要理解处理器、磁盘、网络、内存这些东西的基本运作方式,后面才能为你解决一些想不通的问题(比如读取文件时为啥CPU可以暂时挂起啥都不干)。

看完这些知识后你也基本上理解了你写的代码到底是在干嘛了。

做一个网站或者手机App或者桌面App?

此时你应该基本掌握你学的这一门语言了。你想做一点什么,比如你学了Kotlin想开始做安卓应用?上google看开发文档或者买本书照着学就行了。照着步骤一步一步来,不会难倒你的。也许会有一些疑问,为啥这个地方会这么设计啊,为啥这些东西可以这么用啊,此时去学一些设计模式,然后你也许就能理解为啥源代码里一些东西会这么设计。

学网站的话,C#、Java、Python之类的都可以做到。另外由于网页肯定是浏览器打开,所以你还得去学一学前端的东西(JS、Html、CSS)。难不到你的,只是做基础网页(基本的数据展示与输入)的话用不了太多知识。网上各种资源都有,去照着做就是了。另外学一学基本的UI设计、平面设计知识会让你写出来的网页更好看一些(起码得配上自己帅气的脸吧)。

后端比如Java(目前我只会这个),目前开发网站最需要的就是spring-boot了,百度去搜,或者掘金站内都有很多东西我就不讲了,可以基于servlet也可以基于netty来开发,随便你。甚至你还可以用kotlin来开发Java后台项目。Kotlin你就理解为是Java语言的一种方言就好了,百分之百兼容Java,且某些方面更好用。在学这些框架的过程你也会更加深入地接触到I/O、网络、多线程的知识。学习一门语言到越后面就会发现知识都是相通的,前面学到的东西都能为你提供帮助。

桌面应用的话C#无疑是王者了。毕竟巨硬满天下。但是也有一些其他方法可以开发桌面应用比如基于JS的Electron、还有基于C++的Qt。很多,我比较推荐C#(如果你没学过C#可以去学一学,此时的你多学一门语言仅仅是一两周就搞定的问题,当然我指的是能用而不是深入。多学一门语言也能让你认识到不同的编程语言之间的差异与优缺点)。

继续深入?服务器 or 客户端

服务器自然就是指Java这类后端方向的领域了,而客户端则代表了网页前端、桌面/手机App这类方向。因为二者注重的方向出现了差别。所以深入工作的话,你就要在自己所擅长的领域多下功夫。

后端自然要去研究分布式、缓存、消息、SOA模型之类的东西,这些能让你的后端网站拥有更健壮的体格,让它们能够长久地运行下去;你要多了解一下服务器Linux系统,因为以后会经常打交道的。后端的东西很深入,也许发展到一定程度你要根据具体的需求去创建轮子或者改造现有的轮子。任重而道远呐~

前端则更加注重用户体验,界面交互逻辑、性能之类的,因为是用户直接看到的、直接触碰到的。毕竟客户端就那么大(你面临的可能是一台十年以上的IE浏览器 / 一台iPhone5 / 一台小米2S,你懂的,如果人人都是Surface Laptop或者iPhone11Pro或者华为保时捷那就没啥好担心的了,不可能嘛),你要在有限的资源中不断挖掘性能,具体我就不懂了咱暂时也不会~~

写在最后

也许你需要学习一下英语,当然你会的话就当我没说。编程毕竟源自国外,学的东西都是从国外传来的,官方很多的资源都是英文版,所以英语格外重要。

也许不是很全面!但大概是一个比较正确的方向吧!希望对大家有帮助吧~而且我自己是一个C/C++的软件开发工程师,如果你选择的是C/C++的方向的话,自学C/C++编程难度很大,不妨和一些志同道合的小伙伴一起学习成长,也有一些源码和资料分享!

笔者的C语言C++编程学习交流圈子,【点击进入】微信公众号:C语言编程学习基地

最后就以一份关于C/C++编程的学习路线来结束吧!

初学编程丨从零开始学习编程的基本路线,BAT程序员亲手总结!的更多相关文章

  1. Python编程快速上手 让繁琐工作自动化 - 专业程序员的养成完整版PDF免费下载_百度云盘

    Python编程快速上手  让繁琐工作自动化 - 专业程序员的养成完整版PDF免费下载_百度云盘 提取码:7qm4 有关本书 累计销售超过10万册 零基础编程者的不二之选 基于Python3编写 通用 ...

  2. 520特辑丨码神VS爱神:盘点程序员的四大男友力,你偏爱哪一种?

    摘要:写卡路里计数器带女友减肥,抢票不忘分析系统bug,打造独家游戏只为成为你的另一半,程序员男友"浪漫"起来,谁能招架得住? 本文分享自华为云社区<520特辑丨码神VS爱神 ...

  3. [Python 学习]2.5版yield之学习心得 - limodou的学习记录 - limodou是一个程序员,他关心的焦点是Python, DocBook, Open Source …

    [Python 学习]2.5版yield之学习心得 - limodou的学习记录 - limodou是一个程序员,他关心的焦点是Python, DocBook, Open Source - [Pyth ...

  4. 从零开始学习渗透Node.js应用程序

    本文来源于i春秋学院,未经允许严禁转载 0x01 介绍 简单的说 Node.js 就是运行在服务端的 JavaScript.Node.js 是一个基于Chrome JavaScript 运行时建立的一 ...

  5. Java入门基础学习,成为一个Java程序员的必备知识

    引言 众所周知,Java是一种面向对象的编程语言.您可以在Windows操作系统上编写Java源代码,而在Linux操作系统上运行编译后的字节码,而无需修改源代码. 数据类型 Java 有 2 种数据 ...

  6. JavaScript之父Brendan Eich,Clojure 创建者Rich Hickey,Python创建者Van Rossum等编程大牛对程序员的职业建议

    软件开发是现时很火的职业.据美国劳动局发布的一项统计数据显示,从2014年至2024年,美国就业市场对开发人员的需求量将增长17%,而这个增长率比起所有职业的平均需求量高出了7%.很多人年轻人会选择编 ...

  7. Java程序员学C#基本语法两个小时搞定(对比学习)

    对于学习一门新的语言,关键是学习新语言和以前掌握的语言的区别,但是也不要让以前语言的东西,固定了自己的思维模式,多看一下新的语言的编程思想. 1.引包 using System;java用import ...

  8. [转] Java程序员学C#基本语法两个小时搞定(对比学习)

    Java程序员学C#基本语法两个小时搞定(对比学习)   对于学习一门新的语言,关键是学习新语言和以前掌握的语言的区别,但是也不要让以前语言的东西,固定了自己的思维模式,多看一下新的语言的编程思想. ...

  9. Windows游戏编程之从零开始d

    Windows游戏编程之从零开始d I'm back~~恩,几个月不见,大家还好吗? 这段时间真的好多童鞋在博客里留言说或者发邮件说浅墨你回来继续更新博客吧. woxiangnifrr童鞋说每天都在来 ...

随机推荐

  1. 【PyMuPDF和pdf2image】Python将PDF转成图片

    前言: 在最近的测试中遇到一个与PDF相关的测试需求,其中有一个过程是将PDF转换成图片,然后对图片进行测试. 粗略的试了好几种方式,其中语言尝试了Python和Java,总体而言所找到的Python ...

  2. 关于ganymed-ssh2版本262和build210的SCPClient类的区别

    ganymed-ssh2是通过java使用ssh连接服务器的工具库,先上两个版本的pom文件配置: <!--ssh连接linux--> <!-- https://mvnreposit ...

  3. CentOS7下安装Docker《超详细新手教程》

    1.使用 root 权限登录 Centos.确保 yum 包更新到最新. sudo yum update 2.卸载旧版本(如果安装过旧版本的话) sudo yum remove docker dock ...

  4. 数据库周刊31丨openGauss 正式开源;7月数据库排行榜发布;浙江移动国产数据库AntDB迁移;oracle ADG跨版本搭建;PG解决社保问题;mysqlbinlog解析……

    摘要:墨天轮数据库周刊第31期发布啦,每周1次推送本周数据库相关热门资讯.精选文章.干货文档. 热门资讯 1.openGauss 正式开源,华为公开发布源代码[摘要]6月1日,华为正式宣布开源数据库能 ...

  5. LintCode笔记 - 82.落单的数

    这一题相对简单,但是代码质量可能不是很好,我分享一下我的做题笔记以及做题过程给各位欣赏,有什么不足望各位大佬指出来 原题目,各位小伙伴也可以试着做一下 . 落单的数 中文English 给出 * n ...

  6. 解决vue项目中使用ivew定制主题报 .bezierEasingMixin();错误

    背景:在使用view-design(iview)定制主体时(覆盖变量方式)出现less错误 完整错误如下 解决方法: 在vue.config.js中添加 less-loader:5.0.x modul ...

  7. flask 源码专题(五):SqlAlchemy 中操作数据库时session和scoped_session的区别

    1原生session: from sqlalchemy.orm import sessionmaker from sqlalchemy import create_engine from sqlalc ...

  8. Django框架04 /模板相关、别名/反向解析/路由分发

    Django框架04 /模板相关.别名/反向解析/路由分发 目录 Django框架04 /模板相关.别名/反向解析/路由分发 1. 语法 2. 变量/万能的点 3 . 过滤器 4. 标签Tags 5. ...

  9. golang第一天--安装

    先上吉祥物 安装 下载链接:https://studygolang.com/dl 下载好之后开始安装 next.next.next,选择好目录.next.等待.finish. 成了!! 配置环境变量: ...

  10. DEX文件解析--6、dex文件字段和方法定义解析

    一.前言    前几篇文章链接:       DEX文件解析---1.dex文件头解析       DEX文件解析---2.Dex文件checksum(校验和)解析       DEX文件解析--3. ...