新手应该要学什麽程序语言?

Photo by Victoriano Izquierdo on Unsplash

文章同步发布於:https://kaochenlong.com/2021/09/17/your-first-programming-language/

贴心提醒:
我是一间政府合法立案的电脑补习班的负责人,所以本系列文章很有可能是置入文,请各位阅读时要带着「这家伙是不是要骗我去报名课程」的批判眼光,不要全部相信我的话!

该学什麽程序语言,这是个接近讨论信仰等级的战争问题,拿去问 10 个软件工程师,可能会得到 13 种答案。为了避免张飞打岳飞,我先对「新手」做个简单的定义:

新手 = 没有在学校学过怎麽写程序,而且也完全没有自己动手写过任何一行程序的人

回到原本的问题,我的答案很简单:

都可以!选你看的懂、看的顺眼的就好。

这有讲跟没讲没一样,但我没开玩笑,真的都可以。喔,有个东西不行啦,就是 HTML,原因很简单,因为它不是程序语言!

我相信大家很多时候在买东西的时候,都会先网路上 google 评价、比 CP 值,我也是。没有人想要学一个一开始就输在起跑点或是没有前(钱)途的程序语言,所以在 PTT 或其它程序讨论区就常看到像是新手入门应该学什麽程序语言比较好之类的问题。

这时候通常会得到许多热心网友的中肯推荐:

「Python 啦,现在它超红的,而且用途又很广,可以写网站也可以做 AI」
「新手一定要从 C 语言开始打底啊」
「当然是 JavaScript,它前、後端都可以写,学一套就可以前後端通吃,超划算的」
「组合语言啦,这样才会完全了解程序在干嘛...」
「要找工作的话,当然是学 Java 啊,市场上职缺很多」
「你应该先学好英文」

然後就会在推文看到各种花式吵架,从战语言到战薪资到战学校、科系、学历到战南北,都有。

网友们这些中肯的建议,每一个单独来看都可能是正确的,但这些建议,不一定符合发问的人的实际状况(Context),可能沦为口水战然後不了了之,最後新手还是不知道到底该选哪一款。

所以,对新手来说,这些「比较」真的是需要的吗?

附注:附上一篇我很喜欢的文章「软件工程师的鄙视链」 ,期待出 2021 年的更新版本。

你应该先建立程序思维?

「程序语言只是工具,重点是要建立程序思维!」

这样的说法大家可能曾听一些技术圈的前辈(或培训班)讲过,这两句话分开讲都对,放在一起讲也对,我也认同,但如果这段话的受众是没写过程序的新手的话,那就跟干话没两样。

习惯程序思维之後,在遇到问题的时候会习惯把工作拆解成一个一个小单元,或是设计可以重复使用的模组,但这些都是会写程序之後的事。对一个连程序语言长什麽样、怎麽写都不知道新手或是一个 SyntaxError 就要解半天的学习者,要建立什麽思维?

就像对我这种不会煮饭的人来说,「加少许的盐」这样的说法意义不大。我的手这麽小,你的少许跟我的少许是一样的吗?对我这种做菜小白来说,最好是那种盐巴罐本身就有附一只小汤匙,然後跟我说要加几匙的盐就好。(嘴巴讲的好像很秋,但其实我还是只会煮泡面再加个鸡蛋...)

你学写程序的目的是什麽?

有些人学习程序是因为这是学校作业规定,不交作业会被当掉,如果是这种自然就没什麽选择,当然就是使用课堂上老师教授的那款程序语言。

有的是因为爸妈听说隔壁村子的那个谁谁谁,他们小孩最近都有在学程序,我们家的小孩也不能输在起跑点上,所以赶快也来去报个电脑才艺班。

或是看报纸说写程序是将来每个人都会的技能,不想被这个世界抛在後面 FOMO(Fear Of Missing Out)焦虑感...

「教练,我想写程序...」

是说,如果是自己兴趣或是想靠写程序当职业,但之前又没有相关经验的话,我建议你先找你认识而且有一定交情的现役工程师朋友,问问看觉得你该学什麽比较好。因为你的好朋友通常比较知道你的状况,虽然给你的建议不会像网友大大们那麽中肯,但应该不会为了想赚你学费而骗你(?)

如果幸运真的有这样的工程师好朋友,可以再接着问看看他愿不愿意教你简单的程序入门,也就是朋友在学什麽,你就先跟他学一样的。你现在是个什麽都不会菜逼巴,就不要考虑那个程序语言以後会不会年薪百万了。你先学会一款程序语言的基本语法,知道什麽是变数、知道 if..else.. 在做什麽、知道函数、回圈怎麽写,先跨过最难过的「新手关」。

对新手来说,环境安装是最讨厌的了,但这些环境安装问题,通常对只要没有太混的现役工程师来说应该算是幼幼班的问题,看你的朋友愿不愿花点时间教你跨过这个关卡。就像要推动箱子,至少推力要大於「静磨擦力」,推动之後的「动摩擦力」就会小一些了(我竟然还记得高中物理课本里的东西)

但如果你跟我一样没朋友怎麽办?也许实体或线上的社群是个不错的地方,但这个容我在後面的文章再聊。

母语选择

哪一种程序语言不是那麽重要,重要的是找到让你学会第一个程序语言的方法,而你第一款接触的程序语言,可能会影响後续看待其它程序语言的角度。

如果你什麽牌子的程序语言都没听过,也没有什麽朋友可以问,那在 TIOBE 上前 50 名都是还不错的选择。PHP、Java、Python 或是 JavaScript 都不错,用的人比较多,卡关的时候网路上也容易找到答案。

但如果各位是连该用什麽工具写程序都不知道的超级新手,那我会建议你试试 JavaScript,原因是因为它不太需要安装什麽软件,只要打开电脑的浏览器连上某些线上网站,例如 CodePen 或是 JS Bin,直接在上面就可以练习写程序。

怎麽写?实体书店的书都是网路课程都是不错的选择,但该怎麽选我会在下一篇文章介绍。同时,在这个系列文章里我也会试着录制几集简单的 JavaScript 入门,不需要额外安装什麽开发工具就能体会一下写程序是什麽感觉。

到这里也许各位会好奇「你不是写 Ruby 的吗?怎麽不推荐 Ruby 呢?」。有啊,我推荐啊,如果你能解决环境安装问题的话我就推荐你用 Ruby :)

相关连结

怎麽样知道自己算是学会?

不会,你不会知道,更正确的来说,是「人类不会知道自己不知道的事情」,所以你不太可能知道自己算不算学会。

因为你是当事人,所以不容易透过「内省(Introspection)」方式得知道自己的变化,但透过「反射(Reflection)」可能会简单一些。用白话文说,你如何觉得自己有长高?你会因为感觉自己的骨细胞不断增生所以感觉有长高,还是你的朋友看你的角度从原本的俯视变成仰视而觉得自己有长高?

同样的,怎麽知道自己算是学会?你也许不会知道,但是你的朋友、公司长官应该会感受的到。

某些解题网站可能也会感受到你的进步,原本题目完全看不懂的题目,现在你开始知道怎麽解了;原本 Codewars 网站只能解 level 8,现在可以解 level 6 了。

学习的过程不是 0 跟 1,而是 0 到 1。

相关连结

但是...

「但我英文不好...」
「但我已经年纪有点大了」
「但是...(人生最厉害的就是这个BUT)」

不急不急,这些问题也不是这几天就能解决的,我们就让我们在後续的文章再来慢慢聊 :)

...to be continued

文章同步发布於:https://kaochenlong.com/2021/09/17/your-first-programming-language/


<<:  Day3_网页建置流程

>>:  [Day17] 安装 MySQL Server 与 MySQL Workbench

Day 07:开发 Angular 一定要会的 TypeScript

Angular 官方建议使用两种语言来开发,一是 Dart(也是一种由 Google 开发的语言),...

用React刻自己的投资Dashboard Day3 - React专案初始架构

tags: 2021铁人赛 React 使用 Creat react app 对於React的初学者...

JS this:call, apply, bind 与 严谨模式 DAY65

call, apply call , apply 立刻执行 bind 不会立刻执行 var nick...

视觉化当日趋势图(3)-取得python api方法

今天我们要来撰写取得python api资料的方法, 首先先打开ShioajiServiceImpl...

k8s prometheus 监控多个MySql -盖完後的新增

【YC的寻路青春】 上一篇已经有点太多了 容许我分两篇 不然有点爆炸 如果盖完之後 要增新的话 1....