首先,世界上没有最好的程序语言,只有最适合个人程序语言。程序语言本来就只是工具、只是手段,从来都不是重点,
重点是:你的目的是什么?你要解决的问题是什么?
假设你今天想要写一个网页留言板(这边只讨论后端,不包含前端),那你就不应该用C来写,因为比起C,php会更适合,很多phper要说了“php是世界上最好的语言”
你可能会问:那nodejs,rails,asp.net…就不适合吗?
如果你只是单纯想写个网页留言板,其实上面这些都很适合,挑一个你最喜欢的语言就好
但如果你要解决的问题不一样,就应该重新思考。例如说,我想要很短的时间的写个网页留言板,你就应该用rails,因为rails开发真的超级快,随便打几个command,你的网页就神奇的出现了!
“我想要很潮的网页留言板!”那你可以考虑Go,Swift,Nodejs等等
再举个例子,加入你今天想要研究电脑较底层的运作,那么你应该要学C,或是学汇编语言因为比起其他高阶语言,这两种绝对会让你更了解底层到底在做什么,其实以上这些只是想提醒你:不要为了学语言而学语言。
程序语言只是一个好的解决方案,重点在于最终的目的!重点在于你想要通过程序,达成什么样的目标,当然如果你真的只是纯粹喜欢写程序,就当我没说。
为什么要当程序员?
我的理由很简单:为中华之崛起而写代码!我觉得做程序开发让我很有成就感,只要几天就可以写出一个网页程序员,可以随时帮自己写博客系统、帮朋友开发投票网站系统之类或者去程序员客栈www.proginn.com接私活赚些外快等等。尽管早期写出来的东西可能不怎么样,但那种从无到有真的是一件非常有成就感的事情。
我永远忘不了我用VB拉几个按钮出来,点下去就可以跑出文字的那瞬间,我有多感动,那是我第一次写代码,虽然当时还比较菜,但是“兴趣的培养”是每个程序员一生必备的职业兴奋剂,下面给单纯有兴趣或者想转行程序员的同学一些建议,希望能够帮到大家。
1.学英文
这个其实上学的时候大家都有在学,只不过个人差异,每个人的水平也都参差不齐。
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.乐于分享
这一点我一直非常认同,分享从来不是单向的,当你分享知识给别人的时候,也会得到许多回馈,尤其在教别人的时候,你会更清楚自己哪里不太懂,个人认为分享是一件非常重要的事情,取之于社会,用之于社会,如果大家都乐意分享,这样此时一个正向循环,希望大家共勉。
相关推荐
年薪百万的程序员,都是这么开悟的,编程之道》出自美国一位资深的程序设计师GeoffreyJames之手。相传作者早起打太极拳的时候,突然开悟,悟到了编程之道。本文章我自己整理的番外篇,哈哈哈,有点儿无节操。 ...
同一个宿舍毕业的人有不同的发展轨道,有人年薪百万,有人仍在基层搬砖。下面是几位工作五年程序员的现状。 李亚军 专注在一家公司里走技术管理路线,现不写代码专注撕逼,月薪 2 万。 李亚军毕业后入职某二线...
相比于程序员,IT培训师的工作压力较小,职业稳定性更高,且没有明显的年龄限制,是一个较为理想的职业发展方向。当然,转型过程中也需要考虑自身的优势和不足,例如接受必要的培训,提升教学技能等。 #### 转型...
在我之前的公司,有一个非常优秀的程序员同事。他踏实肯干,一干就是10年,且功勋卓著,受到了很多的表扬和认可。 然而10年之后,虽然,跟他同期入职的人相比,他是比他们挣得多;可是,他的工资却比一个刚入职的...
根据提供的数据,宁夏地区程序员的薪酬区间大致在68,600元至159,702元之间,中位数(P50)在90,210元至105,948元之间,表明大部分程序员的年薪集中在这个范围。而P75和P90的数值则进一步展示了高薪程序员的薪酬分布...
【百战程序员1573题及答案】这个资源涵盖了Java编程的基础到进阶的知识,旨在帮助程序员提升技能,达到不同级别的年薪标准。通过学习这些题目和答案,开发者可以逐步提高自己的编程能力和对Java的理解。 Java面试题...
【十年程序员老鸟简历模板】是一份专为有十年工作经验的资深程序员设计的简历模板,旨在帮助这类专业人士清晰地展示其技术专长、工作经历和项目成果,以提高获得高薪职位或大厂青睐的机会。这份模板包含了多个关键...
1. 个人信息:该简历中,个人信息部分包括了姓名、性别、出生日期、居住地址、工作年限、电子邮件、手机号码、目前年薪、户口、身高、婚姻状况、政治面貌等信息,这些信息都对应着该程序员的基本情况。 2. 教育背景...
【年薪百万的机器学习专家,为什么不产生价值?】 在当今数据驱动的时代,机器学习专家成为炙手可热的角色,他们的高薪往往让人期待其能为企业带来显著的价值提升。然而,实际情况并不总是如此乐观。文章通过一个...
【软件开发程序员劳动合同最新】 这份文档是一份针对软件开发程序员的劳动合同模板,旨在明确雇用关系,保护雇主和员工的权益。合同详细规定了多个关键条款: 1. **劳动合同期限**:合同中提供了三种可能的期限...
例如,128,323元可能代表了所有程序员年薪的中位数,而139,179元可能代表了75th百分位的年薪,意味着约有75%的程序员年薪低于这个数额。 总结而言,这份报告提供了2022年漳州地区程序员薪酬的全面视图,有助于求职...
P75(第七十五百分位数)为143010元,意味着75%的程序员年薪在100000至143010元之间,而P90(第九十分位数)则达到了184381元,显示高薪程序员的收入显著高于平均水平。 报告进一步按公司类型划分了程序员的薪酬。...
《2022年海南省地区程序员职位薪酬调查报告》提供了关于该地区程序员薪酬的重要洞察,为求职者和雇主提供了有价值的参考数据。以下是对报告主要内容的详细解析: 在2022年的调查中,程序员的薪酬呈现出明显的分布...
根据报告,2022年宜昌地区的程序员中位数年薪约为143,098元,这是大多数程序员的平均薪资水平。而最高10%的程序员年薪可达到233,769元,这表明在该领域内存在显著的薪资差距,可能与技能、经验、工作性质等因素有关...
报告还指出,高薪程序员群体的年薪可达157,366元,主要集中在P90值上,这部分程序员可能拥有更丰富的经验、更高的技能或者在关键岗位工作。相反,年薪在81,153元及以下的程序员可能处于职业初期或者技能水平较低,这...
而P75则表明75%的程序员薪资低于这个值,对于那些有一定经验和专业技能的程序员,这是他们期望达到的薪资水平。 此外,报告还揭示了咸宁地区IT行业的薪酬增长趋势。从116,488元到138,751元,再到171,340元,可以...
例如,P25表示25%的程序员年薪低于91,747元,而P90则意味着90%的程序员年薪不超过140,171元。这些数据有助于理解薪资分布的区间,对于求职者而言,可以据此设定合理的薪资期望值;对于企业来说,可以作为设定薪酬...
例如,P90数据显示,年薪最高10%的网页程序员可以达到147,239元及以上,这表明对于表现优秀或有特定技能的程序员,贵阳市场提供了相当可观的收入潜力。 结合以上数据,我们可以得出结论:贵阳地区的网页程序员薪资...
根据提供的文件信息,我们可以提炼以下关于2021年天津地区程序员岗位薪酬水平的报告内容,并且获取相关的IT行业薪酬知识。 首先,报告标题“2021年天津地区程序员岗位薪酬水平报告-最新数据”和描述“2021年天津...