你想告诉准程序员些什么?

 

关于大学学习,我想告诉你:

1. 不要担心自己没有计算机基础,不用担心自己跟不上。

我刚上大学的时候也很羡慕那些高中就学习了编程的同学,看着他们潇洒流畅地敲击键盘,而自己因为一个小小的循环语句就折腾了半个晚上。但等我毕业了再回头看,其实当时大家都还是在一个水平线上,都很基础,都啥不会,都是从头在学。

2.大学知识不是无用,只是它的重要性要在你工作很多年才后体现出来。

我大学时候因为觉得用不上,不影响解决问题就没有去认真学的算法,以及觉得很难搞懂就没有去搞懂的数据结构,在我工作很多年后仍然还得从头学起,因为很基础,因为常用到。

3.数学很重要,也许这是你最后一次有大把的时间来好好学习数学。

等你参加工作了想回过头来恶补,很难。你的工作不允许,你的家庭不允许,归根结底你的时间不允许。工作是你靠知识赚钱的时候了,没有太多时间留给你学习知识。

4.对程序员来说,学好英语真的很重要。

能否使用英语查阅资料,是区分技术人员水平的重要指示之一。寄希望于“有人迟早会翻译成中文”的人是愚蠢的、是会被淘汰的。而且永远拿着二手资料,你如何把控风向,紧跟潮流?

5. 能大规模商用的技术,都不需要智商,否则这种技术就不可能规模化。

所以准程序员们一定要时刻警醒自己,「会一两门编程语言只是职业的开始」,持续学习,深入学习才是你的出路。

6. 学会使用百度和Google

上面提到的那些你看不懂的东西,在编程领域太常见了。不只是现有的,还包括每年新出现的。很多你的同事、你的老师可能都不了解。但是Google和百度了解,前提是你学好英语,所以不要忘了上面的第四点。

7. 理论基础很重要,入职之后的差距就是这些看上去无用的基础知识拉开的。

数据结构,操作系统原理,PC原理,数据库原理等……这些基础知识决定你在技术上能走多快和走多远。如果你不知道应该学习哪些基础知识,也不知道该如何提升自己的话,下面这篇文章推荐给你,里面有很详细的方法论

程序员是不是吃青春饭我不太确定,因人而异。但有一点我能确定,程序员是个靠技术吃饭的职业。

所以不要年纪轻轻就听信什么「工作日上班,双休日好好休息就够了」这样的话。乘着年轻磨砺技术才是王道,不然在程序员这个后浪一波比一波汹涌的职业里混,你想吃青春饭都吃不了几年。

不过,想提升是一回事,如何有效提升就是另一回事了。我工作近十年,也带过不少实习生、应届生,很多年轻人真的很努力在学,加班加点工作卖力,但也就是差点火候,还是方法不对。

下面我从输入和输出两个方面来讲讲程序员如何利用周末来提升自己。

首先你得明白,一个人的能力就像一个池塘,不断的输入又不断地输出,水池的容量以及水的质量决定了输出的高效与否,输入大于输出,你的池塘就会不断扩大,换句话说你会的技能就越来越多,只输入不输出,你的池塘就是一滩浑浊不堪的死水,一实操就bug满屏。

所以想要提升自己,就得同时做好输入和输出这两块。而输入又在输出之前,要想提升自己,首先就得做好输入,学习更多的深度知识。

根据我与很多同行交流后得出来的结论,程序员要想学习效率高,学习效果好,只需要做好下面两点最基础的事情:

·学习基础知识

·巩固基础知识

其中学习基础知识,又有两点要注意的:找对方向、用对方法。说的更直白一点就是学什么以及怎么学。

学什么?

首先要将基础打牢固,最基本的算法和数据结构一定要滚瓜烂熟,拿起来就能用。

比如下面这些个算法和数据结构类型就一定要熟练掌握。

10个算法:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法。

10个数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie 树;

不要小瞧了这小小二十组词,展开了去学,怎么都得花你个一年半载,例如单单排序算法就又可以分为以下十种:

你想告诉准程序员些什么?

然后,当将这些基础知识吃透了之后,注意是吃透,至少得做到要用到的时候就能直接用不用回去再翻书,你就可以去学习一些更深入的内容:

比如:

·编程框架是如何运转起来并输出“Hello World”的?

·如何让自己更正规,更有章法地使用Mysql呢?

·Key、List、Hash、Set、ScoreSet各自的使用场景有何不同?

·主流的编程框架都和设计模式相关,那他们有没有共通性?

当你把这些问题想清楚了的时候,你的程序员进阶之路就走了一半了。

 

怎么学?

每个人的学习方法都不一样,有的人喜欢边做项目边学习,有的人则喜欢学一段时间做一个项目,有的人喜欢看书学,有的人喜欢看视频学,这些都不是问题,重要的是找到适合你自己的。

但下面这几点,最好还是不要去做了,因为我带了这么多人,敢这样做的都是事倍功半,结果惨不忍睹。

1.一味的对着别人的代码去敲。

刚开始不会做只有跟着别人敲,这不是问题,问题是跟着别人敲了之后你要自己理解自己记忆把它变成自己的东西。照着别人代码敲一遍两遍哪怕三遍,除了让你看得仔细点,练了打字外并没有其它任何帮助。

因为模仿复现不是关键,思考才是关键。你要能做到思考学习别人思路后,脱离书本和博客,完全自己实现功能。只有这样,你的学习才是有效的。

2.想着一口气吃成个胖子

这一块的情况稍微少见,但也不是没有,有的人急于求成,学习只学个大概只求个会用,没有做到知其然还知其所以然。

一个典型的例子,我两年前带的应届生,北京一所高校来的。当时他做的那部分出了点问题,我就推荐了一本书给他,让他看完后把这个问题解决,因为不是很急,我说一个星期搞定就行了。结果两天后,他就跑过来跟我说书看完了,问题也解决了。我问他怎么做的,他说他看了个大概后直接照着书上做了。

技术这玩意儿,不是看了个大概能照着做就会了,一口气吃不成个胖子,必须得扎扎实实地把事情做好。所以不要试图一次性解决所有问题,这里给个建议:可以将每天的学习过程拆分成小块,分阶段学习,这样的效率会更高些。

说完了第一点如何学习基础知识,接下来说说第二点如何巩固基础知识。方法千千万,最有效的我认为还是刷题,有方法的刷题。

下面这个刷题方法很普通但也很实用,推荐给你:

第一遍:可以先思考,之后看参考答案刷,结合其他人的题解刷。思考、总结并掌握本题的类型,思考方式,最优题解。

第二遍:先思考,回忆最优解法,并与之前自己写过的解答作比对,总结问题和方法。

第三遍:提升刷题速度,拿出一个题,就能够知道其考察重点,解题方法,在短时间内写出解答。

在这里,给大家推荐两本书还有一些学习网站,能够让大家学得更轻松些。

书:

1、《代码大全》激发你的思维并帮助您构建高品质的代码。

2、《程序员修炼之道》全面阐释了软件开发的许多不同方面的最佳实践和重大陷阱。

网站:

1. GitHub — 开发者最最最重要的网站:https://github.com,能学习但不只是学习。

2. W3school — 最适合新手的网站:https://www.w3school.com.cn/:免费而且全面。

3.实验楼 — 一个在线编程学习网站: https://www.shiyanlou.com/courses/,很方便实用。
4. Code School — 一个英文学习网站:https://www.pluralsight.com/codeschool,支持分阶段挑战。

讲完学习基础知识巩固基础知识,咱们就再回到咱们刚开始说的那个池塘,现在水的输入讲完了,池塘里有点东西了,但只进不出还是一潭死水,接下来就系统性的讲讲如何输出。

三种方法:

1.做一些实操性强的个人项目,自己练练手

田纳西大学助理教授奥斯汀·亨利结合自身经验,给出了一份“程序员都应该尝试的挑战性项目”清单,包含下面六个项目,我之前做了一遍觉得还不错,推荐给大家:

·文本编辑器

·2D游戏-太空侵略者

·编译器-Tiny BASIC

·迷你操作系统

·电子表格

·电子游戏机模拟器

每一个项目都存在不同的挑战,比如文本编辑器就要求在不使用GUI框架中内置的文本框组件的情况下,搭建支持光标移动、选择、插入和删除操作的文本框并将文本文档存储在内存中。

如果你能解决掉这些项目中的这些问题,然后把项目独立完整的做出来并且运行成功,你的能力肯定能再上一个台阶。

2.写技术文章

大家想必都知道费曼技巧,这也是其中的一种应用了,把你自己弄懂的东西教给别人,让别人也能看懂,在这个过程中你肯定还是要把一个完整的项目给做出来的,一整套下来,你会将自己理解的东西掌握的更透彻更深入。

也算是一种不错的实操方式了,能让你的基础更加牢固。

3.接一些开发兼职

这是三种方法中实操性最强的一种了,没有之一。

而且不用说,这也是最快最有效的方法了,毕竟编程这件事,光有理论是不够的,动手实践才是关键也是最终目的。

但兼职也有很多坑很多小门道,你首先得注意项目是不是靠谱,像那种没有需求文档的就不要接了。
 

关于毕业工作我想告诉你:

1.提前关注云计算、docker、微服务、Devops以及Baas技术。

这些你现在可能看都看不懂的技术或者思想,可能会改变5-10年后的IT业界,比如云计算会干掉不少传统IDC运维,Baas会干掉不少后端开发。

2.做一个程序员,而不是做一个码农。

IT是工科,不是理科,和IT行业相似度最高的行业是盖楼房。真的,相似度相当惊人。而码农的工作和搬砖没什么区别,就是东搬*西拼凑,哪里漏水修哪里,会铺个地砖和个水泥,就能把房子搭起来。和工程师的区别在于,搬砖工人是拿不出建筑图纸的,但工程师可以。码农是搞不定项目方案的,但程序员可以。

3. 年纪轻轻除非是迫不得已,千万不要进传统公司的伪互联网项目。

虽然事儿少,福利好,但是混日的子也多,你和老油条们摸鱼一两年,哪天项目突然被裁掉了,他们有行业积累可以跳槽,而你再出社会,完全没有竞争力。所以新手程序员入职,能去大厂就去大厂,不能去大厂也一定要找一家纯互联网公司入职,创业公司也好,中小型企业也好,反正要有现成的项目打磨你的技术。

4. 一个有水平的程序员,应该花80%的时间做代码设计、画时序图,画UML图、剩下20%的时间写code和debug;菜鸟程序员的这个比例恰好是反的。

用一句话来说,就是不论这个需求有多紧急,你都一定要“想好再动手”;而“想好”的标志就是设计文档写好了;文档一旦写好,写代码就是纯粹的无脑工作而且不容易出错。

5. 公司不是学校,而是你创造财富,实现价值的地方。

你可以在工作中学习,但你不能放下工作然后去学习,除非你的工作已经做完了。除此之外,还有一点要强调的是,不要只在工作中学习。工作能带给你的是经验、是实操,而基础知识以及前沿理论知识只有靠你自己下班后来学,这也是你与其他人拉开距离的时候。

 

工作与学习之外,我想告诉你:

1.虽然技术是程序员的根本,因为没有技术你就没有钱。但是也一定要记住,技术并不是你的全部。

因为你的身体你的健康比钱更重要,也因为你很难搞一辈子技术。所以,早点开始健身、早点为你的职业发展做规划。

 

2.通过技术兼职来接私活赚钱是可行的,但是一定要找靠谱的平台。

常见的方式有技术论坛、朋友推荐、外包平台。如果你不知道该如何选择,下面这篇文章就一定要看看,里面有我做兼职这么久总结的三接四不接以及一些方式分析平台推荐。

一、线下自有渠道

这一点包括两方面:一个是亲友介绍,一个是峰会自荐。

我之前接过不少前同事介绍的众包,还有参加各种互联网峰会与人聊天介绍自己偶然获得的项目,好处是很省时省力还不用担心被扣钱,因为没有太多的人跟你竞争,大家也都是行内人,水平怎么样很容易确定;坏处是有就有没有就没有非常不稳定,而且因为是朋友偶尔会砍砍价啥的。

这类渠道随机性太大,碰上好项目就很舒服,没碰上就没办法。建议大家当作自己找兼职的一个补充就好。

二、线上技术论坛

这一类指的是我们有意识地去程序员聚集的论坛上发帖,去推广自己,通过 PR 的方式来获客。这类线上论坛比较出名的有:CSDN、博客园、程序员客栈的技术圈、问答社区 SegmentFault,还有程序员“灌水”社区 V2EX。

CSDN大家应该都很熟悉了,我不多说。这里我主要讲一下程序员客栈的技术圈,这是一个程序员比较集中的灌水社区,可以提问、发帖、招聘等。经常能看到一些团队发布的兼职汇聚贴。


在这些论坛上,还有一种方法你可以找到兼职,就是你可以单独开一个帖子,介绍一下你的技术优势、时间优势、项目优势,说明你最近想接哪类项目,如果正好有需求方需要的话,对方就会联系你。

三、垂直众包平台

这类平台大约是从 15 年开始出现的,对于刚接触兼职的程序员来说比较友好。因为相关规定比较完善,能保障双方利益。虽然偶尔还会有争端,但是相信我,比你自己接好太多了,能避免很多刚做兼职时得踩得坑。

这方面有很多同类型的平台,一般都专注于 IT 众包领域。职位内容也比较全面,像常见的 UI 设计、产品设计、程序开发、产品运营等职位都可以找到需求方,其中又以程序开发和 UI 设计的需求最多,可以提丰富又稳定的兼职需求来供我们选择。

                                                                         

你想告诉准程序员些什么?

分享一篇帖子给大家,希望对大家有所帮助。推荐大家学习的网站:“善知软件实训基地”  线上学习视频

https://www.bilibili.com/video/BV1RJ41147qd?from=search&seid=6170019529066609126

https://www.bilibili.com/video/BV1vJ411C7wZ?from=search&seid=4420382012653239507