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

非科班如何学编程

题图最近几年,程序员这个职业逐渐升温,学编程的人也越来越多,国外有个非盈利的开源社区,叫做FreeCodeCamp,目的是教人零基础学编程,现在已经汇聚了26万之多的人数。我在深圳

《非科班如何学编程》 题图

最近几年,程序员这个职业逐渐升温,学编程的人也越来越多,国外有个非盈利的开源社区,叫做FreeCodeCamp,目的是教人零基础学编程,现在已经汇聚了26万之多的人数。

我在深圳南山科技园上班,南山这边的写字楼也是越修越多,从科技园北区一路向南走,你会发现又多了好几个片区,在建的和新建的都有,例如深圳湾片区,软件基地片区等,我总在想,修这么多写字楼,有那么多科技公司吗?有那么多程序员吗?也许现在没有,等到修好就有了,这代表了这个行业的发展速度。

随着人工智能,虚拟现实等技术的爆发,计算机领域迎来了新一轮的技术革命,因为世界在发展,计算机处理的事情也会越来越复杂,计算机语言的发展趋势必定会越来越简单,不然开发的人力成本会越来越高,于是学习计算机的门槛会越来越低,结果是,我们的下一代人人都会使用计算机编程,编程变成了生存的基本技能,所以:未来的文盲不是不识字的人,而是不会编程的人。

微信公众号的slogan是:在小的个体,也有自己的品牌。于是一大批人开始写作,从而塑造自己的品牌,在公众号里写作,好的作家可以通过“赞赏”功能获得读者的鼓励,同时,他还可以把平时的作品汇集成一本书,从而将自己的一份时间出售多份。除了写书以外,任何创作实际上都可以达到这样的效果,其中开发一款受欢迎软件,并把它出售多次,是少有的可以让你产生巨额回报的方式。

作为一名程序员,我对这个职业的自豪感在近几年里不断提升,记得刚毕业那会,我经常会被金融行业的同学“鄙视”,因为待遇差距大,为了取得心里平衡,我只能用行业差距来安慰自己。而几年后,互联网行业已然冲到了行业榜的前列。曾经经常听到一句话:程序员吃的是青春饭,如果30岁前不转行或做管理,那么一定是死路一条,现在几乎没听过这样的言论了。相反听得最多的就是:嫁人就嫁IT男。

《非科班如何学编程》

说了这么多,你一定对编程产生了好奇,也许你会问:非科班出生,如何才能学会编程?学编程难吗?这个问题的答案和你的目标有关,假如你想成为一名程序员,我会告诉你很难,例如在FreeCodeCamp上学完所有课程,需要2000个小时,学完后你就有能力找到一份相关工作,而坚持2000小时对于一个人来说并不容易——假设你每天花2小时,需要3年。

其实编程和成为一名程序员是两码事,就像用英语对话和成为一名英语翻译者是两回事一样,衡量程序员的标准往往更多,要求更严格,花的时间自然也更多,很多人在这条路上走得很辛苦,原因在于知识点多,无法看到全局,很容易就陷入其中而无法自拔,或者即便看到了全局,也要一项项的学完,即使学完了,还是不知道如何完整的完成一个作品。拿前端工程师举个例子,一个合格的前端工程师,要具备OS,HTML,CSS,Javascript,JQuery,Ajax,数据库,良好的编码风格,HTTP,Websocket,网络安全,git等众多技能,从一个初学者的角度来看,光看完这些专有名词就已经吓尿了,所以,花2000小时来成为一个程序员,是必要的。

程序员的门槛高,一般人不一定要以此为目标,就像我写作,也并不代表我要改行成为一个作家,而想学会编程,却是一件很容易的事情,我理解的编程是具备编程能力及拥有计算机思维,换句话说,就是利用计算机提升你的工作效率,减少重复劳动,从而把更多的时间用在创造上面。当然,如果你具备了编程能力,同时有意成为程序员,从这个起点上过度会简单得多。

我认为具备编程能力很简单,是因为我们几乎每天都在使用计算机,使用计算机和会编程之间其实只隔了一张纸,那张纸,就是图形界面,你觉得难,是因为我们被图形界面驯化了,在罗振宇和罗永浩的《长谈》节目中,他们谈到对驯化的理解

有一种人30多就开始当领导,带team,这种人就是被公司驯化的人,就是虽然看着我们在合作,但是自己的能力就逐渐没有了。时间一长,你会丧失基本的生存能力。好比你有了秘书久了,什么订酒店之类的事情自己反而不会处理。穷查理宝典的查理芒格,他一个多么富有的人,出门还做经济舱。李笑来就说自己最怕被金钱驯化,无论富有还是贫穷,我们都值得警惕这一点。职场的人到今天为止最怕的就是驯化。

图形界面让我们使用计算机的方式更为傻瓜化,人们会认为日常使用的计算机软件(例如Word)和编程是两码事,而在我看来,他们的本质是一致的,都是利用计算机帮你做事,抽象点来说,就是你给予它一定的输入,它会反馈给你相应的输出。具体一点,面对图形界面的驯化,我们应该怎么做呢?

除了日常使用的软件外,抛弃图形界面,思考下一步操作,用命令行该怎么完成。

《非科班如何学编程》

这里命令行相对于图形界面来说,是一个人机字符交互界面,在不同的操作系统上,命令行程序也有区别,在macOS上,我们一般使用zsh,Linux上使用Bash,而Windows上则使用PowerShell或sygwin,在你的计算机上安装对应的命令行工具,就可以开始了。

操作系统中的一切都被抽象为文件,文件是用一种树形结构来组织的,而我们日常的操作基本上也可以看做是对文件的操作,所以,抛开图形界面,你可能首先要弄清楚:

  1. 如何定位到一个目标文件
  2. 如何执行一个可执行文件,同时让另一个文件作为这个程序的输入,例如用MS Word打开一个word文件
  3. 如何更新一个可执行文件
  4. 如何从互联网上下载一个文件
  5. 安装一个程序,计算机里多了哪些文件
  6. 如何删除一个文件
  7. 如何搜索计算机里有没有一个文件
  8. 如何找出文件夹下含有“TODO”字样的文件
  9. ……

不用图形界面后,你可能会遇到很多这样的操作,千万不要想一次性学玩,最好的办法是,遇到一个学一个,记在本子上,下次用的时候,直接用,忘记了再查一下你的本子。

那么问题来了,你可能会问:这不是更麻烦了吗,我在图形界面操作一个文件可能需要1秒中,现在用命令行,至少要10分钟……不要小看这些命令操作,它们除了可以单独使用,还可以组合起来使用,即把前面一个命令的输出,作为下一个命令的输入,下面这个例子可以很好的进行说明:

某一个文件夹中有各种各样的文件,除了文件,还有子文件夹,现在你想把文件夹下所有.torrent种子文件打包到一个压缩包中

如果你用图形操作,你的步骤是:

  1. 挨个打开每个文件夹,把.torrent文件复制到另一个空文件夹中
  2. 将新文件夹压缩

而命令行只需要一行命令:

find . -name *.torrent | xargs tar czvf torrent.tar.gz

仅仅一个命令的组合,就可以产生惊人的变化,前提是你要知道基本的命令怎么写。那么你又可能会问了:我想学的是编程,这些命令和程序有什么关系?回答这个问题之前,我们要先认识一下什么是程序。刚才说了程序都有一个共同的特征:给它一些输入,它便会对这些输入进行处理,最后产生一些输出。下面是重点,基本上所有的程序语言都提供三种语句:

  1. 顺序
  2. 分支
  3. 循环

利用这三个语句可以完成一切流程,也就是说,所有的程序都是由这三种语句组成的,它们形成了程序的逻辑,可以把顺序、分支、循环理解为一种控制命令。了解了基本命令和控制命令后,把它们按照逻辑组织起来,就是你的程序了,你看简单吧。可能你还会问,我这学的是什么编程语言?在计算机中,这是最基本的编程,我们叫它Shell编程。

我再举一个例子来说明一下,我们每天写文章,可能要把下载的图片先处理一下再上传,比如一张图片很大,我们就要对它进行等比例缩小,这样在手机里显示时才不至于加载过慢,从而影响阅读体验,而每写一篇文章我们都要做这样的操作,显然需要花不少时间,所以你可以写个程序来帮你做这个事儿,这里先假设你的图片是在1小时内下载完的,这个程序的步骤如下:

  1. 切换到图片的下载目录,例如~/Downloads
  2. 创建一个临时目录,例如uploads_temp
  3. 找出1小时内下载的图片
  4. 将这些图片等比例压缩成宽度为400像素的图片
  5. 转换后的图片文件放在uploads_temp
  6. 将处理后的图片上传到七牛云存储(可选)
  7. 回之前的目录

最终程序如下,我用数字标记了以上每一步,对应的代码是怎样的

#!/bin/sh
cd ~/Downloads # 1
mkdir uploads_temp #2
find . -mmin -60 | grep -iE "png|jpg" | xargs -I@ convert @ -resize 400 uploads_temp/@ # 3 4 5
sed -i 's#"src_dir".*#"src_dir":"uploads_temp",#' qupload.json # 6
qshell qupload ./qupload.json
cd - # 7

现在看不懂没关系,只要你开始,在今后一定会掌握这些命令。这里只是通过这个程序来给你一个深刻的印象,今后你每次下载完图片后,只需要执行这个程序,就可以一键完成上述所有工作,试想一下,如果你不用程序来完成,你需要花多长时间来做这件事,而真正解放了你的劳动力的,仅仅只有7行代码而已。

到这一步,你就是一个拥有编程能力的人了,后续,如果你想继续深入,也只需要你具备一个特质即可,那就是不断探索——例如,如果有一天你写的小程序足够多时,你可能需要做一个界面,或页面来管理你的程序,那时,你就真正从命令行跨越到了图形界面。

《非科班如何学编程》


推荐阅读
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
author-avatar
abc1733974979
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有