经常看我博客的朋友应该知道,我一开始自学时候是学了一点C语言,但是不得章法,后来找了一些培训班的视频看Python + Django,加上自己琢磨,终于搞明白了一些Web开发的内容,感觉已经算入门了。
后来在2018年底碰到朋友推荐左耳听风的这一套讲座,看完之后发现只能算启蒙,离入门还差一些距离。
于是又花了半年多的时间,根据讲座其中的要求学习Java语言和Spring框架以及Web的前后端分离技术,还附带比左耳大佬要求的更彻底,用Vue做了前后端分离。
直到这个夏天来临,才敢说自己总算入门了,初步有了超能力。
俗话说,师傅领进门,修行在个人;我自己摸爬滚打让计算机之神稍稍眷顾我,让我懂了什么是编程。但是入门才是刚刚开始,看看左耳的原话:
你可能已经沉醉在沾沾自喜的骄傲的情绪中,那么你也可以就此止步,加入一些公司,在那里按部就班地完成一些功能性的开发,成为一个搬砖的码农。你也可以开始选择一个方向开始深入。
我给你的建议是选择一个方向开始深入。因为你并不知道你未来会有多大的可能性,也不知道你会成为什么样的人,所以为什么不再更努力一把呢?
后面,我们就开始非常专业的程序员之路了。这也是一般程序员和高级程序员的分水岭了,能不能过去就看你的了。
正好处在6月末,需要订立一下下半年的学习计划。
我把左耳大佬的后边的要求整理了一下,大概有如下几个方面:
通用型能力
一些需要的阅读:- 97 Things Every Programmer Should Know
- How To Ask Questions The Smart Way。中文版:提问的智慧
- 重构:改善既有代码的设计
- 修改代码的艺术(已绝版)
- 代码整洁之道
- 程序员的职业素养
- JUNIT文档
程序语言
Java, Python? 不好意思,远远不够。至少还需要学习C, C++ 和 Go。一些推荐的书如下:
- C语言程序设计现代方法
- C陷阱与缺陷
- C++ Primer中文版
- Effective C++:改善程序与设计的55个具体做法(第3版 中文版)
- More Effective C++:35个改善编程与设计的有效方法(中文版)
- 深度探索C++对象模型
理论学科
理论学科的核心就是算法: 然后是一些其他理论知识的书:系统知识
系统级知识都是底层的了: 如果上边比较难懂,可以看下边的书。当然上边能啃下来的话,就不用看下边的了,下边看完还是要看上边的。 把上边看完之后,就可以看: 之后是一些作业要求:- 用这些系统知识操作一下文件系统,实现一个可以拷贝目录树的小程序。
- 用fork / wait / waitpid写一个多进程的程序,用pthread写一个多线程带同步或互斥的程序。比如,多进程购票的程序。
- 用signal / kill / raise / alarm / pause / sigprocmask实现一个多进程间的信号量通信的程序。
- 学会使用gcc和gdb来编程和调试程序(参看我的《用gdb调试程序》一、二、三、四、五、六、七)。
- 学会使用makefile来编译程序(参看我的《跟我一起写makefile》一、二、三、四、五、六、七、八、九、十、十一、十二、十三、十四)。
- Socket的进程间通信。用C语言写一个1对1的聊天小程序,或是一个简单的HTTP服务器。
实践项目
最后是作业要求:实践项目
我们已经学习完了编程语言、理论学科和系统知识三部分内容,下面就来做几个实践项目,小试牛刀一下。实现语言可以用C、C++或Java。
实现一个telnet版本的聊天服务器,主要有以下需求。
每个客户端可以用使用telnet ip:port的方式连接到服务器上。
新连接需要用用户名和密码登录,如果没有,则需要注册一个。
然后可以选择一个聊天室加入聊天。
管理员有权创建或删除聊天室,普通人员只有加入、退出、查询聊天室的权力。
聊天室需要有人数限制,每个人发出来的话,其它所有的人都要能看得到。
实现一个简单的HTTP服务器,主要有以下需求。
解释浏览器传来的HTTP协议,只需要处理URL path。
然后把所代理的目录列出来。
在浏览器上可以浏览目录里的文件和下级目录。
如果点击文件,则把文件打开传给浏览器(浏览器能够自动显示图片、PDF,或HTML、CSS、JavaScript以及文本文件)。
如果点击子目录,则进入到子目录中,并把子目录中的文件列出来。
实现一个生产者/消费者消息队列服务,主要有以下需求。
消息队列采用一个Ring-buffer的数据结构。
可以有多个topic供生产者写入消息及消费者取出消息。
需要支持多个生产者并发写。
需要支持多个消费者消费消息(只要有一个消费者成功处理消息就可以删除消息)。
消息队列要做到不丢数据(要把消息持久化下来)。
能做到性能很高。
我看完之后感觉,只要你打算学计算机,这些书貌似是绕不过去的。想要成为程序员,而不是API调用师,没有什么捷径可以走了。
好了,话不多说,先把书单整理出来,对照一下手头的书看看还差哪些。根据进度开始把要看的书买齐,首先是一些关于修养的书,可以在放松脑子的时候看。
然后就从C语言再搞起了。一年半之前对于C虽然能看懂,但是显然对指针之类的东西不如现在理解深刻。上吧!