常常看到非信息背景的朋友问工程师:我最近想学写程序!该怎么入门?
通常他们会得到很多糟糕的答案:「先了解演算法」、「先弄懂资料结构」、「先认识物件导向」。
这些答案都够糟糕了,但最糟糕的答案莫过于「从C/C++开始入门」。
(我看过最扯的建议是「去找C++ Primer Plus来看」。这本砖头书绝对不适合一般人自学)
照着以上建议去做的朋友,大概会在两周之内就得到满满的挫折感,然后认为自己「果然不适合写程序」,也不好意思再去跟工程师讲自己的状况,最终再也不想踏入programming领域。
这些建议真是害人不浅。
信息相关科系,是因为要接续到之后的资料结构、作业系统,所以大一从C/C++开始入门会比较连贯、才能完整学一次计算机的基本知识。
而这些想学coding的朋友,大部分只是这两种情况:
A.最近觉得写网站好酷,想试试看自己能否写个blog、或是个人网页
B.对工作上某些人工流程不满意,想试试看自己能否学写程序、用电脑解决问题
他们的愿望仅此而已,并没有打算成为计算机专家、黑客,实在没有必要从C/C++入门。
就像点火一样,先从零星的火苗开始、小心保护不要让它熄灭,接着慢慢加东西进去、让火焰慢慢成为大火。学习,除了知识/技能之外,培养成就感与热情也是很重要的。而从C/C++入门,会让正要萌芽的小火苗直接消灭殆尽。
我对程序设计入门的建议很简单。
如果你是状况A,去学PHP&MySQL,先弄一个丑丑网页出来就可以了。
如果你是状况B,去学Python,先弄一个能执行、能显示几个文字的程序就可以了。
一般人想到程序通常只想到「图形化界面」,如果能写出一个有界面的小玩意会非常有成就感。
那样的话,学PHP来写个网站、直接就是界面,绝对有趣;学Python很快就能把玩内建的tkinter函式库、做出按钮做出选单,乐趣无穷。
话虽如此,你到市面上找PHP或是Python的书,大概还是会落得「满满的挫折感然后正式放弃」的下场。
别担心,这不是你的错,是那些书写得不够好。没有一本是真正的程序设计入门书。
那些书只想着给你知识/技能,没有想到要培养你的成就感、保护你的热情。
要找书的话,我只建议两本。
状况A,去找欧莱礼的「深入浅出PHP与MySQL」(Head First PHP & MySQL)。
状况B,去找欧莱礼的「深入浅出程序设计」(Head First Programming)。
国外的在线开放课程也可以考虑。
Coursera的
人人都懂的编程课(Python)
(https://www.coursera.org/course/pythonlearn)
学习编程:基础
(https://www.coursera.org/course/programming1)
麻省理工的
Introduction to Computer Science and Programming
A Gentle Introduction to Programming Using Python
全部都是用Python入门。
我对程序设计入门的建议就只有这样。你不需要知道什么演算法、资料结构、物件导向。
什么狗屁名词都不需要知道。那大多只是工程师下意识地想让你觉得他们很厉害而已。
你只要想办法写出一个会动的程序就可以了。所有伟大的东西都是这样开始的。
Q1:但是状况A还要面对HTML/CSS耶..好像很难?
每个技能深入下去没有不难的。但是HTML/CSS要入门实在不怎么难。
就从随便写几个表单或按钮、弄个丑丑的静态网页出来开始吧。
Q2:我是工程师,我能怎么帮助朋友?
帮他们搞定环境设定吧!帮他们把最基础却又最给新手挫折感的环境给设定好!让他们能用记事本跟几个小工具就开始写code!给他们成就感!
Q3:那写手机app呢?你怎么没提到?
我觉得手机app还满难入门的,实在给不出有建设性的建议。不知道。不过,上面的连结也许有一些手机相关课程,不妨试试?
文章来自轉個彎日誌