The secrets that programmers with an annual salary of one million "salted fish turned over" did not disclose


First of all, there is no best programming language in the world, only the most suitable programming language for individuals. The programming language is just a tool, just a means, never the focus.

The point is: what is your purpose? What problem are you trying to solve?

Suppose you want to write a web message board today (only the back-end is discussed here, not the front-end), then you should not write it in C, because php is more suitable than C, and many phpers say "php" the best language in the world"

You may ask: that nodejs, rails, asp.net... are not suitable?

If you just want to write a web message board, in fact, the above are all suitable, just pick a language you like the most

But if the problem you're trying to solve is different, you should rethink it. For example, if I want to write a web message board in a very short time, you should use rails, because rails development is really super fast, just type a few commands, and your web page will magically appear!

"I want trendy web message boards!" Then you can consider Go, Swift, Nodejs, etc.

For another example, add that you want to study the lower-level operation of the computer today, then you should learn C, or learn assembly language because compared with other high-level languages, these two will definitely give you a better understanding of what the bottom-level is doing. What, in fact, the above is just to remind you: don't learn languages ​​for the sake of learning languages.

A programming language is just a good solution, the point is the end purpose! The point is what kind of goals you want to achieve through the program. Of course, if you really just like writing programs, just ignore it.

Why be a programmer?

My reason is simple: write code for the rise of China! I feel that doing program development gives me a great sense of achievement. In just a few days, I can write a web programmer. I can help myself write a blog system at any time, help my friends develop a voting website system, etc., or go to the Programmer Inn www.proginn.com Take personal work to earn some extra money and so on. Although the early writing may not be very good, that kind of starting from scratch is really a very fulfilling thing.

 

I will never forget the moment when I used VB to pull a few buttons, and I could run the text when I clicked on it. I was so moved. It is a necessary career stimulant for every programmer in his life. Here are some suggestions for students who are simply interested or want to change careers as programmers, hoping to help everyone.

1. Academic English

这个其实上学的时候大家都有在学,只不过个人差异,每个人的水平也都参差不齐。

Q:我该学什么程序语言

A:英文

为什么?因为英文真的很重要!听说读写,至少读要读的懂,你才看的懂那些外国的API文件,发生问题的时候,才能去stackoverflow上面发问,说到这里就必须要和大家说一些基本的提问技巧,很多问题为什么很少人愿意回答?例如:我写了一个网络通信的程序,想要让A手机跟B手机可以传信息,可是按了却没反应,怎么办?我的代码不够优雅怎么办?



 

一个好的问题,应该言简意赅,直击重点,个人觉得应该要包含四点:

1.目的(你的程序要达成什么目的?)

2.手段(你怎么达成你的目的?)

3.错误(在什么场景下发生的什么错误?)

4.代码(有排版过的代码,拜托)

所以将问题改成:

我想要让A手机跟B手机传递信息,我用的是java的socket,可是按下发送时,出现:java.net.SocketException: Connection refused: connect,想请问一下有可能是错在哪里?

部分代码:https://gist.github.com/xxxxxx

上面的问题还可以再修正、补充更多细节,但至少比刚开始那个好回答的多,会让人比较想回答,代码一定要找适合的地方保存。再回到英文的这个话题上来,英文不好的话,其实国内的资源也很多,但很多新的技术或者人气旺的地方还是用英文,所以英文好的话不会吃亏,可以运用到更多的资源。

2,google很重要

相信我,google真的要比其他搜索都好用,我经常认为会google就先赢了一半,现在网上资源那么多,有时候出现你不懂的ERROR,完全没有头绪怎么办?最简单粗暴的方法就是直接google,一堆解决方法就出现了,这个时候不是简单的复制粘贴,而要去试着理解为什么这么做,一个不会理解代码的人,只会是一个复制粘贴的机器人,这样对自己的成长没有好处,至少要弄清楚两点:为什么会有这样的问题、这个解法是如何解决的?关键词的使用非常的重要,比如一些常用的指令一定要学会,例如:inurl:、intitle、filetype等等。

3.学scratch

我听过这个很多次,但实际接触才知道真的很好用,这个就是让你用很简单、很可视化的方式来写程序,你只要拖拉几个拼图、组合在一起,就可以写出一只可以动的程序,甚至是一个小游戏!

如何开始学scratch?

如果是我的话,就会google搜寻:scratch教学,或是scratch入门

为什么要学scratch呢?

前面有说到,每种程序语言都有不同的适合的场景,还有一点是,每种程序语言,都有很大部分是相同的,例如说:变数、函式、循环、条件判断、数组…

当你学C有这些、Javascript有这些、Swift有这些,不管学哪种程序,都会碰到这些最基本的东西,无论是再复杂的程序,都是这些基本的东西组装而成。

从scratch来学这些基础有两个好处

1.不被语法限制

2.可视化

scratch里面你几乎不用打字,甚至可以看做是拼图游戏,你就把你想要的东西拼一拼,程序就写完了,所以你学的是真正的概念,而不是语法。

举例来说,如果你学C,你就要学:



 

如果你学python,就会是:



 

其实我不会python,如果写错的话,各位Python大神原谅,但这两者本质上是一样的东西,都是循环,只是语法不同而已!

从scratch开始,可以让你跳脱这些语法,只学那些精髓,你学完之后,看到C的这段就会知道:哦,原来这就是循环呀

第二点,可视化也是很重要的一项,尽管我代码写了很多年,我永远忘不掉,我在循环这个坑卡了多久,尤其时双重循环,根本就是恶梦!

我知道这边是1到10的意思,但是第二层为什么会这样?

为什么这样就可以印出九九表?

那时候我面对的是冷冰冰的代码,大概就是:



 

尽管我可以很轻松从排版跟大括号一眼看出「block」的概念,但十年前的我完全不行,至少觉得这就是天书,可是scratch就不一样了!它直接用可视化的拼图的概念,让你在循环里面可以塞另外一块拼图,就可以明白为什么双重循环会是这样了!

4.有些指令一定要会(command line操作)

这是什么?对,你没有看错,这就是电影里面看起来很帅的,底是全黑的画面,屏幕上面满满的文字,一张图都没有,在windows就是cmd,命令提示字元。

在mac就是terminal,终端机,假如你已经对上面介绍的scratch满熟悉了,那你应该了解程序几个基本概念,其中一个重要的概念是:写程序其实就是在对电脑下指令,其实呢,你平常在做的事情,也是在对电脑下指令,但操作系统帮你包装好了,所以你只要动动手指就可以,例如说你在网页上按了重新整理。

「我要重新整理」换成程序大概就是:page.refresh();或是:「点了前往google.com的连接」window.open('google.com');(这边代码都随便写的,但意思有到就好),我们所谓的command line,就如同字面上这样是个「用文字对电脑下指令」的地方,像是ls,就是list的意思,会把你「现在在的地方」的档案都显示出来。

「现在在的地方是哪里?」打pwd,Print Working Directory就会显示出你现在在「电脑的哪个文件夹底下」

帮大家准备好几个连接了:

(关键字:终端机教学)

OS X Lion 10.7系统基础教学系列-终端机基础操作教学

介绍命令行(command-line)界面

Mac OS X Terminal 101:终端使用初级教程

Mac OS X Terminal终端机常用语法教学

为什么要学这个呢?因为工作上很大机会用的到,而且日常生活也很好用,有些功能你用java写的要死要活,最后才发现原来电脑就有内置指令,我也是最近一年才开始熟悉这些指令的操作,才发现原来内置指令这么好用,给程序开发初学者一些建议,你需要知道这些,并且了解:cd,ls,pwd,touch,mkdir,rm,cat,grep这些指令,还有> >> < |这些符号在干嘛,这样就很足够了,想更精进的可以去学怎么写shell script。

5.学怎么用browser dev tool

chrome,firefox,safari,edge都有一样的东西,叫做开发者工具,为什么要学会这个呢?因为你可以了解很多东西!日常生活中,你其实一直在接触网络的概念,只是你没发觉而已你平常看到的网页,其实也只是一堆文字而已,那为什么文字会变成画面?因为浏览器帮你解析,按照一定的规则画出来,你可以右键->检查,就可以看到你鼠标指的地方本来的文字是什么

dev tool可以讲到一堆跟web有关的概念get/post,ajax,status,css,js,html等等,现成的好工具,不用吗?

6.选你想走的领域精进

假设你上面都有确实做到,你现在应该对程序、对网络都不会太陌生了,这时候再来学专门的东西,我认为是事半功倍。

为什么?因为原本那些程序基础你都可以跳过,你要学的只是语法,学程序最重要的应该是「心法、内功」,而不是表面的限制,这样就算换了一个你从没看过的程序语言,你也会猜的到它在干嘛。如果你看了这篇文章也想成为一名程序员,这里要提醒大家的是心态一定要正确,所谓咸鱼翻身,学会程序开发年薪几百万之类的新闻,千万不要相信,很多这种个例是因为之前已经有某项技能专场,再把专场和程序开发结合起来最终沉淀出来的结果,而大部分没有任何能力基础和背景的人比起这些特殊案例,这些新闻你可以选择忽略,做人最重要的还是脚踏实地。

7.开通个人博客写经验

可以开个blog写写自己的学习历程、碰到的困难以及解法等等为什么要写这个?

第一是加深印象,你解决一个问题下次再碰到时,你还记得怎么解吗?很多时候踩过的坑会反复踩,代码有时候过两三个月会忘掉,但这时候就因为我有写blog记录起来,可以查的到以前自己怎么解的。

第二是增加功力,我要怎么知道我真的了解一个东西?

我觉得写下来,会清楚的认识到自己的能力水平,例如说我今天要写:git入门教学,写一写发现自己不知道rebase在干嘛,我就必须去查,查完之后写在文章里面,你写的出来,你就一定懂这项技术而且博客是公开的,若有路人看到你写错,说不定还会来纠正你,你就又学到一课了!

第三是累积个人声望,好的程序员个人博客对于求职绝对有加分效果,假设你今天是面试官

A的履历写:精通Javascript

B的履历写:精通Javascript,可参照我写过的:深入Javascript原理系列文章

结果你跑去B的博客看,真的写了一系列深入的文章在研究,不用面试,你就知道B是个有真材实料的人(前提是面试官会去看你blog里面的文章)

8.学数据结构跟算法

就是俗称的Data Structures and Algorithm,DSA,假如你真的对这行很有兴趣,想要一直待在这边而且薪水越来越高的话,你就势必要开始补足一些额外的技能「自学的人通常不会有的本科系知识」,因为自学者通常都直接从html,css,javascript,php,rails等等的开始,甚至连数据结构跟算法都没听过!有接触而且实作过的更是少数。

那为什么要学这两样东西呢?

第一,增加自信

其实能力强,自信就会强,增加自信是因为,自学者通常也是非本科系的学生,可能会觉得自己跟本科系的实例有一段落差,这时候若是学了本科系在学的DSA,就可以弥补这一段落差。以我个人来举例,因为我很早就接触到DSA,到现在出社会找工作,就是因为我有这段经历,所以我有自信我绝对不会差本科系太多,甚至会比一些很混的毕业生强,事实上也是如此,去面试的时候有间公司考我排序的问题,就是一些很基本的,说你知道哪些排序法,跟时间复杂度之类的。

“自信在某些时候很重要,能够为你带来打不倒的勇气”

面试没通过,没自信的人会觉得:一定是我太烂

有自信的人会觉得:是公司没眼光(前提是你的自信不是来自于自我感觉良好)

第二,增进对电脑底层的理解度

刚开始你可能只是个拿5k的薪水,但工作久了,可能变成10k,20k,甚至50k,当你薪水变得越高,要解决的问题也相对的更重要,DSA是大公司的必备技能之一,为什么那些大公司面试要考这些?如果不会二叉树反转,就算是知名工程师也没用?

(之前Google的面试争议:虽然我们公司90%的工程师都用你开发的工具,但我们还是不聘用你)

就如同我开头所说的,重点在目的、在于要解决的问题

你在一家普通的台湾电商网站工作,需要会什么?

你可能要会写php,因为要改进购物车,要改进物品上架系统,所以你根本不必懂DSA,因为没什么太大的帮助。

Google要解决的问题是什么?

可能是「排序10亿个数字」、「阿发狗的下棋算法」等等,从要解决的问题看来,你就知道为什么Google面试时要考那些了。

如果你要在技术上日渐精进,你迟早要碰到那些较底层的东西,这跟问题规模有很大的关系,假设你公司今天是做旅游订票,同时100个人抢,一般工程师都可以自己应付,如果同时10000个人抢,这就不一样了,在服务器上你可以能要多开几台机器,要调整一些构架,而程序当然也要跟着调整。

或是你会发现许多大公司,常常都会自己有一些项目,为什么?因为市面上没有符合他们需求的东西,所以要自己写一个。

如果你没修过DSA,你怎么可能实作出virtual DOM diff的算法?

当然我也比较菜,没去面试过诸多大公司,如果有程序前辈看到这里麻烦留言:“你的推测错了!”

最后,引用一段很有哲理的话:如果以盖大楼来形容这个概念,把砌砖作为一种技能,把盖大楼作为一种知识,我想可以这么讲:如果你早就知道你喜欢砌砖,很会砌砖,就直接去砌砖吧。如果你的梦想是盖大楼,你要学的东西还很多,那读大学是你最好的途径。不是每个人都要盖大楼,靠砌砖就可以赚钱了,砌的好还可以赚很多钱,大家抢着要。如果你很会写购物车,那其实你也可以接到很多电商客户,钱包也是赚满满,但如果你是想进Google,Facebook那种大公司,或是想要思考规模更大的问题该如何解决,那就学DSA吧!

9.乐于分享

这一点我一直非常认同,分享从来不是单向的,当你分享知识给别人的时候,也会得到许多回馈,尤其在教别人的时候,你会更清楚自己哪里不太懂,个人认为分享是一件非常重要的事情,取之于社会,用之于社会,如果大家都乐意分享,这样此时一个正向循环,希望大家共勉。

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=326755411&siteId=291194637