程序员入门指南
本文作者:futz12 ,szx0427
虽然本人由于多方面原因没有选择计科/软工(对AI和图形算法的热爱),但是根据多年研究经验(业余的),打算给各位推荐基本相关的书和软件(主要是学习思路)。
注意:学习编程不一定是搞那些绚丽的界面,开发有趣的游戏。很多有用且享誉世界的程序并没有那些高大上的界面,相反他们在默默无闻的地方发挥他们至关重要的作用。
作为初学者,所要面对的是枯燥无味的程序界面——控制台(一个黑色的框框),不要因为你的心里落差而放弃了编程
C/C++
C/C++开发算是我比较常用的开发方式,这一方面我比较有发言权(桌面开发方向)。C语言本质上就是在学计算机,了解了C语言的方方面面也就了解了计算机的一些基本运行原理。C/C++虽然难学,但是基本上学好了C/C++其他语言都可以速通。
语言入门
推荐书目
注意以下推荐的书均可找到相应的电子版(初学可以对着电子版来,以免学不进去造成浪费)
推荐书目 | 推荐原因 |
---|---|
啊哈C语言 | 是一本非常基础的C语言教程(面向青少年/儿童的),如果对计算机原理完全没有了解的同学可以看看。 |
Essential C++ | 薄,且能快速入门 |
中学生计算机程序设计 | 虽然写的不怎么样,但是可以让人快速的写出程序并且跑起来 |
推荐网站
推荐网站 | 网址 | 推荐原因 |
---|---|---|
CSDN | https://www.csdn.net/ | 虽然CSDN以他的广告多,文章抄袭多而臭名昭著。但是CSDN往往可以提供给初学者快速且准确的解答。 |
博客园 | https://www.cnblogs.com/ | 博客园则和CSDN相反,博客园文章相对质量比较高,可以基于开发者相对深入的帮助。同时博客园也可以作为自己的学习日记,把自己的学习感悟之类的写上去。(顺便给自己博客园主页打个广告:https://www.cnblogs.com/Icys)。 |
百度 | https://www.baidu.com | 同样的,百度在一些编程老手口中是臭名昭著的,一个是他的广告,另一个是作为一个中文搜索引擎没法获得英文的一手资料。但是,由于新手没法准确的表达自己的问题,百度可以提供更适合新手的答案。新手遇到的99%问题可以通过百度解决,善用百度。 |
必应 | https://cn.bing.com/ | 必应和百度相对。必应可以提供更多的国外一手资料,但是他的搜索结果对新人可能不是很友好。 |
洛谷 | https://www.luogu.com.cn/ | 在洛谷可以提高自己构造代码的能力,提高逻辑思维能力 |
推荐工具
推荐工具 | 推荐原因 |
---|---|
DevC++ 4.9.9.2 | DevC++因为和工作脱节为人诟病,但是作为初学者,想快速的把代码跑起来,DevC++是你的不二之选。 |
虚拟机(VirtualBox) | 虚拟机是一种在电脑里运行另一个电脑系统的软件(主要就是为了折腾,只有充分了解电脑和电脑系统才能更好的编程)。 |
Linux系统(需要对Windows有一定的基本功) | 使用Linux对于初学者最大的好处就是折腾新手,在折腾的过程中可以提高自己对电脑的使用能力,更能了解系统,软件之间的关系。Linux系统有很多种,这里推荐的是Ubuntu和Fedora(最好是在虚拟机里运行,对自己折腾能力极为自信的可以找台电脑试着安装一下)。如果您是Win10/11用户可以试一下微软的WSL1(注意是1而不是2)。在Linux下您可以学到终端的用法,这是您未来长期需要使用的工具。作为一个合格的程序员不是说你会多少编程语言,最重要的是你解决问题的能力,而在折腾中就是在锻炼你的耐挫,解决问题的能力。试着在Linux上生存一段时间吧! |
语言进阶
在完成语言入门的时候,想必大家已经拥有了一部分的编码能力。这时候需要将基础的编码能力开始向开发项目转变。
在进阶阶段,我们需要进一步了解C/C++的语言特性,包括函数反映到计算机底层是什么,C++ STL/Boost,IDE是如何完成编译任务的,如何使用命令行调试工具,C/C++相对其他语言的本质区别是什么,清楚C++的class,模板,多态继承,不得不承认这是一个极为困难的过程。
推荐书目
推荐书目 | 推荐原因 |
---|---|
C++ Primer | C++的百科全书,关于C++的一切都在上面(其实也不过是冰山一角)。 |
Effective C++ | 让你更好的了解C++应该怎么写。 |
算法导论 | 虽然和C++无关,但是在进阶阶段,你需要强硬的算法功底才能写出优秀高效的程序(你面试反正是要)。 |
Windows 程序设计(选) | 很老的一本书了,Windows是一个使用范围很大的系统,掌握Windows编程可以方便以后使用其他类库的能力。学习这本书可以让你快速(相对的)写起一个程序。但是不要使用配套版本的VS工具(尽量使用最新版,这样做可能会使得您寸步难行,但是请不要放弃)。 |
很少,对吗。/xyx
推荐网站
推荐网站 | 网址 | 推荐原因 |
---|---|---|
CSDN | 同上 | 你以为你入门了就可以看不起用CSDN吗? |
博客园 | 同上 | 博客园学算法很合适。 |
百度/必应 | 同上 | 该用还得用。 |
Stack Overflow | https://stackoverflow.co/ | 一个外国的网站,可以用英文找到您遇到的问题以及解决方法。 |
Leet Code | https://leetcode.cn/problemset/all/ | 程序员也需要刷题,在洛谷上做完基础的题目后就来这里,做多线程之类更符合项目的题目,提高自己建模的能力。 |
推荐工具
推荐工具 | 推荐原因 |
---|---|
GCC(Mingw)/MSVC | 这里指的是编译器(g++.exe,cl.exe)请使用命令行去编译你写的程序(多个cpp文件的程序,尽量不使用IDE),我见过很多大四学生也不知道怎么添加 include,为什么要添加lib,反正各种杂七杂八的问题,很多人拿着python的思维,以为一个import就能开始写代码了(C++ 马上也能这样了,尽请期待)。归根结底就是被IDE保护太好了。 |
CMake | 去编译几个软件来折磨一下自己,比如OpenCV,Boost,7-Zip等。 |
Visual Studio Code + CMake插件 | 写小程序我建议用这玩意,折磨一下自己 |
Visual Studio | 很好用,但是请少用 |
Clion(作为大学生您应该可以免费使用该工具) | 很好用,但是请少用 |
这时候你写的程序就应该开始使用到 C/C++ 库命令以外的东西了,比如 Windows.h 等,开始学习多线程等。
走向项目
推荐书目
这里开始其实基本不需要书了,绝大多数网上的英文资料您应该开始着手消化了。比如您的程序需要图像处理功能,用到了OpenCV,这时候您的最佳选择不是网上买一本OpenCV的书,而是去OpenCV的官方网站上看它提供的官方文档。
推荐网站
推荐网站 | 网址 | 推荐原因 |
---|---|---|
同进阶 | 同进阶 | 同进阶 |
各种Docs | 很多,看你用什么工具,OpenCV就看OpenCV的,Windows就看MS Docs | 当一个字典查,要有耐心 |
各种开发社区 | 同上 | 在交流中成长 |
GitHub | https://github.com | 当您开始写项目的时候可以去上面看看别人的是怎么写的代码的,作为一个程序员您应该去看看,在这个阶段相信您能找到优雅的上这个网站的方法。(给自己Github打个广告:https://gtihub.com/futz12) |
知乎 | https://www.zhihu.com | 前面不推荐的原因是因为上面大佬如云,大佬说的是正确的,但是未必是适合你的。但是现在您已经掌握了基本的代码能力,可以上知乎开拓一下视野了,比如C++新标准,OpenMP能实现什么骚操作。 |
推荐工具
推荐工具 | 推荐原因 |
---|---|
Visual Studio | 您已经是个成熟的大学生了,如果您在Windows上编程,VS是一个明智的选择 |
Clion(作为大学生您应该白嫖这个工具) | 这也是个明智的选择 |
Qt | 想写窗口程序了?想写手机程序了?想让自己程序被别人看到?可以试试看 |
Android Studio(需要会Java) | 写手机程序(安卓) |
其他编程语言
说实话,不是很了解,不在这误人子弟了
后记
笔者也不过是个高中毕业生而已,只不过是掌握了一些对于同龄人的信息差,不算是编程高手,更不是顶尖一线专家,只是想给走入这个我热爱的行业的同学一点帮助,写出来的内容未必正确,仅供参考。
-
值得注意的是,成为一个合格的程序员,并不是要掌握更多的编程技能,而是如何更好的解决问题。学会了编程只不过是一个结果,而您的目的是解决问题。
-
在学习过程中,除了您身边的同伴以外,为了谋求更长远的进步,您可能需要在网上寻求志同道合的伙伴。但是也不要过度沉迷于网络社交(本人就是)。
-
也不要养成所谓的鄙视链,不要进所谓的编程群(进那种解决实际项目需求的,给自己的QQ群打个广告:904511841)。
- 多去打打笔试,蓝桥杯,ACM都可以,可以增强自己的竞争力。