2-选择学习的目标和方向

本篇博客对应视频讲解

回顾

  上一篇博客主要讲了学习编程需要的条件以及从何入手,着重给大家说了从指法练习对学习编程的重要意义。而本篇博客,主要给大家分享一下我眼中的编程,编程到底能做什么,现在程序语言的总体情况和流派,最后还会给出具体的建议。

编程能做什么

  说起编程,也许很多人会感到陌生和困惑,但说到手机、电脑、互联网、IT等词,大家就会很熟悉。   编程,其实就是使用键盘写代码,然后用工具编译、打包,最终形成一个可在某种环境下运行的程序。而我们天天使用的手机、电脑等设备就是运行这些程序的载体。当然还有很多没有用户交互的程序在我们看不到的地方发挥着重要作用。   再简单点说,我们制造了一些硬件设备,但仅有硬件,什么都不会做。软件就是用来完成某些任务的,而这些软件就是通过编程(写代码)实现的。或者说编码人员通过程序语言,表述自己想要做的事情,然后工具将语言编译为计算机可处理识别的编码(二进制等),从而在某些情况下按照编码人员的编写好的逻辑去运行。

  我们今天是建立在互联网,建立在软硬界的世界上的。当然这些也不过是世界的一小部分而已。但我们仍然看到软件及网络巨大的威力,打破时间和空间的障碍。

  对我个人而言,编程是一个创造性的事情,你写的代码在某些层面上讲就是在创造,就像是画家挥笔、音乐家谱曲一样,艺术而有创造性。它提供一个更加广阔的空间,你就可以在计算机中创造出来,表达自己的想法。

  当然,这不过是一种美好的愿望。实际上,软件开发一共不过几十年,仍然有非常多不完善的地方。和建筑行业相比,就差得很远。建筑行业施建行方拿设计方案和到图纸,最终做出来的东西基本是一致的。而软件行业规范化、流程化、分工协作等,行业并没有一致的标准,水平也是参差不齐。导致开发体验是非常不一致的。

编程的方向和技术流派

  说了很多编程能做什么,但都是对比和概括,我相信大家还想更具体的了解编程能做什么。下面我们就简单说一下。

方向

  • 硬件编程 智能家电、机器人、物联网、共享单车、军工设备等等。

  • 平台软件 这里说的平台软件,是指运行在各种平台或操作系统中的软件 ,这些软件通常需要基于平台特性和功能去开发。是我们大部分人最经常看到和用到的。无论是电脑上用的office、QQ,还是手机上用的支付宝,微信等,都是平台软件。

  • 游戏 游戏本身也是软件,只是更复杂,涉及更多方面。同软件一样,会有各类平台主机上的游戏,同时还分为各种不同类型的游戏。这个很容易理解,魔兽、星际、CS、英雄联盟、绝地求生以及各种手机游戏。

  • 网页编程 主要说的是和浏览器相关的程序,不论前端使用什么技术,后端使用什么技术,最终通过浏览器呈现的还是 html+css,也就是布局和样式,我们所能看到的东西。百度搜索、淘宝京东购物、视频网站等都是我们最常见的网页了。

  • 脚本工具 这类工具,甚至不需要编译,在当前的环境下就可以执行,以完成相关的工作。通常是管理工具,脚本文件。很多时候是执行特定任务或个人任务的一段代码。

  • 类库 在我们实现功能开发产品的时候,我们不会什么方法都需要再重新实现一遍,也不需要什么功能都自己再写一遍。这就依赖于官方或其他人已经写好的代码。这类代码帮助我们实现很多基础的工作。比如实现排序算法,查询数据库,网络请求或序列化处理等等。各类开放平台提供的SDK及API等也都是帮助编码人员进行更方便快捷的开发的,只是调用的形式有一定区别。

  • 其他 以上也不过是简单梳理,是和我们生活贴近的。现代编程已经发生了变化,多终端、云端化、智能化是方向。我开始学编程的时候,程序=数据结构+算法。而现在我们更关注产品、业务、需求、用户体验等。以后我们会更经常听到云服务、持续集成、人工智能等等。所以,编程的本身也是在不断的变化发展。方向也会越来越多。

技术流派

编程语言的各类繁多,每年还会有新的语言出现。语言,表达的艺术。在一门语言的长期发展中,也找到了更适合自己发挥的领域。我这里不会抛出一堆语言让大家感到疑惑,我只是挑拣几种常用的,影响范围广泛的说一说。我们简单从不同方面进行划分说明。

编程方式来分

** 函数式编程和面向对象式编程** 单纯讨论哪种方式更好是没有什么意义。因为他们适应不同的情景,也使得不同人群有不同的倾向。但不可否认的是,面向对象编程影响是巨大的,越来越多的语言也开始支持面向对象编程。实际上,我们可以看到语言的趋势,能支持面向对象的会努力去支持。而语言的语法上,越来越多语言也开始向函数式编程靠近,这样最终的结果是,二者的互相结合。**C#**算是基中典型的代码,虽然是面向对象的语言,但提供各种语法糖,让你像使用函数式编程一样使用它。

强类型语言和弱类型语言 通常来讲,面向对象语言是具有强类型的,但这并不绝对。而且像我所说,现在融合之后,函数编程的语言也可以具有类型系统。但基本不存在已经有强类型系统的去除其类型系统,只是在写法上会简化,利用编译器去做类型推断而已。 总的来说,我个人也是非常支持类型系统的,也希望越来越多的语言都提供类型,这在开发、测试、维护上都是非常必要和有用的。

按平台技术阵营来分

  • 微软 .Net 微软是从语言到开发工具再到系统都提供的公司,提供了一致性体验,所以这个平台的开发者通常使用微软提供的一整套方案就能实现自己想要内容。只是在移动时代,微软完全落后了,流失了一些开发者。

  • JVM JAVA JAVA火爆全球,是当前生态最强,使用和影响最广泛的语言。还有很多语言基于JVM,以提升开发体验。原因是因为jAVA在语言上改进的太慢,影响开发体验。

  • 苹果 苹果是更加封闭的一个生态,使用oc去编写苹果平台下的软件。但swift是个例外,swift是完全开源的,能做的事也不仅仅开发苹果自家平台的应用。

  • 其他 当然还有很其他的语言,他们并不与这些大公司平台有关。如php、ruby、python等也都很有名气。

站在不同的角度,就会有不同的分法,我们在些也没有讨论谁更好。这在接下来,选择方向的建议中,我会简单说明。

如何选择

上面我们介绍了很多编程语言相关的内容,但我想,对于很多初学者,还是不知道该如何决策。那我来帮大家梳理一下。

如果你有个明确的目标或兴趣 比如我想进行和硬件相关的编程,那么就从C语言开始。 如果想进行游戏开发,那么就从C++开始。 只是想快速制作简单的网站,可以直接上手php、python等语言。 想要掌握各种平台软件的开发,那么你就需要选择JAVA 或C#这类语言。 想开发移动应用,苹果你只能选择oc或swift,android首选java。 如果想进行数据处理、科学计算等,可靠选择python、R语言等。

如果你确定了方向,那么选语言就相对比较容易。

虽然说很多语言都能做很多事情 ,但也有各自擅长的地方,能做和容易做,做的好还是有很大区别的。所以,当你有了方向,你可以去搜索该方向的主流语言去入门即可。

如果你并没有什么兴趣,就是想找个工作。 如果为了找工作,那么还要结合自身的能力的时间。如果时间允许,那么学习java可以说是最佳选择了。因为java的生态最完善,解决方案最多,你以后可以发挥的空间很大,可提升的空间也很大。

如果没有那么多的时间,你就要根据自身的需求,学一些"容易解决问题"的语言,如php、python、javascript等。这些语言就业情况也很不错。

我的建议

上面我已经比较清楚的介绍了如何选择一门语言,这主要取决于你兴趣和目标。但我仍然有一些建议要提供给大家。

  • 至少要学习一门面向对象的语言。 只要你不是三分热度,浅尝辄止,那么一定要学一门语言,学的不是语法,而是思维,如何看待和分析事物的思维。这里建议学习C#或JAVA来学习面向对象编程的思维。

  • 结合自身需求来学习 学以致用,这是最重要的。单纯讲,精通一门语言和涉猎多种语言哪个好是没有意义的,这完全取决于你想要达到的目的。所以,不要瞎听一些建议,而是听从自己内心的想法。如果 你想创业,创造东西,你就去学习创造这类东西所需要的东西,你完全没必要搞得多么深入,因为那本就不是你的目标。 要知道学习编程的目的本身是为自身服务,如果你花费很多时间在别人讲的提升逼格的地方上,但自己却找不到使用它的地方,那又有何用呢?

  • 不要局限自己 不要把自己局限成程序员,你学习编程不是为了比谁知道的多,谁技术更牛B的,你是为了生存、创造、造福社会的。要多关注世界是如何运行的,人类是如何相处的。技术不过是个技能而已,在于你如何使用它,而不是被它左右。

我的选择

就我个人来讲,我当前选择的是C#,.net core平台。 单从语言层面来讲,C#足够优秀。而.net core平台更多的是带来的机遇。跨平台开发运行已成为现实,更具成长潜力。

我如此选择是因为我更看重开发体验。从市场上来讲,C#以及.net 平台并没有什么优势,尤其是在国内。但是Win10,VS开发工具,VSTS的自动构建持续集成、Azure云服务等加在一起,形成了完善的开发、发布、生产的流程,帮助我节省时间,提高开发体验。而这样的体验我在使用其他技术栈无法体验,或体验并不好的。 我在一年前有录制过相关视频简单介绍过azure,有兴趣的可以看一下。

另一方面,C#足够的全能,网站开发、平台软件开发、移动开发、游戏开发等等都可以胜任,而且都能做到很好的程度。对于像我这样一切以实现需求的人来讲再合适不过了。

总结

说了这么多,套用一句话,没有最好的,只有只合适的。一切要从自身需求出发。相信大家看了这篇博客,应该会对编程了进一步的了解和认知,至于到底选什么,如果你还不清楚的话,那不妨从C#入手。等你之后想明白了,可再做决定。

预告

当我们做好准备,选择了方向后,我们就快要开始学习编程,编写代码了。而我们编写代码,同样离不开计算机的支持,离不开操作系统和编码工具的支持。所以在正式上手编码之前,我们有必要了解一下我们使用的操作系统和开发工具,熟练使用工具,让工作事半功倍,磨刀不误砍柴功,我的目的就是节省大家的时间。所以敬请关注下期内容:Win10常用操作及开发工具的说明。

posted @ 2018-10-11 18:21 MSDev_NilTor 阅读(...) 评论(...) 编辑 收藏