编程

每个优秀程序员必须具备的技能

一曲冷凌霜 提交于 2020-04-27 19:45:44
版权声明: 本文为北京尚学堂原创文章,未经允许不得转载。 也许你可以成为一名优秀的管理人员或指导人员,作为程序员如果你不能编写代码和开发软件,但不会是软件开发人员。 如果你正在阅读这篇文章,那么我假设你有兴趣成为一个软件开发人员——或者是更优秀的软件开发人员——下面就让我们来聊一聊你需要知道哪些技术技能。 用技能赚钱 现在,有这样一种主流观念,压垮了很多新手软件开发者,那就是你需要学习很多东西才能成为软件开发人员,并且很多人不知道从哪里开始起步。 这里我会尝试着具体说明那些在你追求成为软件开发人员的路上将让你受益的必要技术技能。 一篇文章当然不能详尽说明作为软件开发者,你可能需要掌握的所有技术技能,但是我会列出最关键的一些技术技能。更多精彩内容关注微信公众号:北京尚学堂。 编程语言 我认为从这一条开始说起是最合适的。 不懂编程语言,怎么能成为一个真正的程序员? 不过,关于选择哪种编程语言去学习可能并没有我们想得那么重要这一点,请允许我一笔带过。 相反,让我们谈一谈为什么我们要从一种编程语言开始,而不是试图去学习所有的东西。 许多新手程序员会试图一次性或在第一份工作之前学习几种编程语言,以便于有备无患。 虽然我认为你最终应该学会一种以上编程语言,但我不建议提前这样做,因为这只会导致混乱,并且会分散你需要学习的其他技能的精力。 相反,我建议你应该深入研究,重点学习单一编程语言的来龙去脉

每个优秀程序员必须具备的技术技能

好久不见. 提交于 2020-04-27 19:44:12
版权声明: 本文为北京尚学堂原创文章,未经允许不得转载。 也许你可以成为一名优秀的管理人员或指导人员,作为程序员如果你不能编写代码和开发软件,但不会是软件开发人员。 如果你正在阅读这篇文章,那么我假设你有兴趣成为一个软件开发人员——或者是更优秀的软件开发人员——下面就让我们来聊一聊你需要知道哪些技术技能。 用技能赚钱 现在,有这样一种主流观念,压垮了很多新手软件开发者,那就是你需要学习很多东西才能成为软件开发人员,并且很多人不知道从哪里开始起步。 这里我会尝试着具体说明那些在你追求成为软件开发人员的路上将让你受益的必要技术技能。 一篇文章当然不能详尽说明作为软件开发者,你可能需要掌握的所有技术技能,但是我会列出最关键的一些技术技能。更多精彩内容关注微信公众号:北京尚学堂。 编程语言 我认为从这一条开始说起是最合适的。 不懂编程语言,怎么能成为一个真正的程序员? 不过,关于选择哪种编程语言去学习可能并没有我们想得那么重要这一点,请允许我一笔带过。 相反,让我们谈一谈为什么我们要从一种编程语言开始,而不是试图去学习所有的东西。 许多新手程序员会试图一次性或在第一份工作之前学习几种编程语言,以便于有备无患。 虽然我认为你最终应该学会一种以上编程语言,但我不建议提前这样做,因为这只会导致混乱,并且会分散你需要学习的其他技能的精力。 相反,我建议你应该深入研究,重点学习单一编程语言的来龙去脉

Java程序员变优秀的10个要点

人走茶凉 提交于 2020-04-22 05:38:52
版权声明: 本文为北京尚学堂原创文章,未经允许不得转载。​ 1.拥有扎实的基础和深刻理解OO原则 对于Java程序员,深刻理解面向对象编程这一概念是必须的。没有OOPS的坚实基础,就领会不了像Java这些面向对象编程语言的美。光学习OO原则的定义用处不大,关键是要学会如何应用这些原则用一种OO的方式去设计解决方案。因此,我们应该对对象建模、继承、多态、设计模式有一个很好的认识。 2.掌握核心API 如果你不知道语言结构和核心API,那么即使你在理论知识上再怎么彪悍也是独木难成林。在Java中,我们最好能对核心API,如java.lang.*、I/O、异常、集合、泛型、线程、JDBC等有很强的实战经验。要是涉及到Web应用的开发,无论你使用的是对Servlet有多大关系的框架,JSP都是必须的。 3.Keepcoding 陆游曾说过,“纸上得来终觉浅,绝知此事要躬行”。从理论上想出一个解决方案很简单,但是真到了实施的时候,才会意识到问题有多难。此时,你才会明白编码过程中存在的语言限制,从而设计出最好的实践方案。因此,Keepcoding。 4.订阅社区论坛 我们并非踽踽独行者。很多人都和我们一样在研究着相同的技术。只是对某个框架概念做验证是不难的,但是当你将这些概念应用到实际的项目中时,那么各种各样的问题,各种在官方文档上找不到解决方法的难题就会接踵而来

北京尚学堂|给自由职业者的10条建议

戏子无情 提交于 2020-04-21 05:36:10
版权声明: 本文为北京尚学堂原创文章,未经允许不得转载。 工作,无论你是全职的自由职业者还是只是将其作为一个兼职,你需要妥善的协调业务和生活之间的关系。成功的自由职业者已经制定了一套个人的规则和程序,帮助他们有效地工作。 在这里,我们有10个建议,可以帮助你每天工作的更有条理,训练自己更好的工作。使你的日常工作流程更加井井有条。 1.每日计划 一个高效的工作起源于一个好的计划,你准备这一天干什么呢? 列出你一天的工作然后将其划分成若干个小任务,逐一完成。在心里提前构思好你的工作将如何展开。计划一周内哪几天出去跑业务,哪几天在家处理工作,什么时候见客户。安排好所有事情,这样你可以节省很多时间和资源成本。 记得安排一点娱乐时间,这是必须的,你在设置每日计划或者每周计划的时候必须考虑到这个,没有人会一直工作不休息。合理计划,否则你只会变得疲惫和低靡。 计划完成以后,想象一下(作为一个设计师,最擅长的就是这个了吧):”一天开始了,我首先需要。。。。“把流程在脑袋里过一遍,将其明确的表述出来将帮助你更清楚自己的工作,并更明确的完成一天的工作。 2.在工作区工作 并不是所有自由职业者都能奢侈的拥有一个家庭办公室,但是你必须有一个工作区,如果没有,那就自己创建一个。 在工作区域内工作,这听起来很简单,当你在确定的工作区域工作,你可以随手够到你需要的工具,工作的氛围可以帮你很快的进入理想的工作状态

北京尚学堂:20条编程经验分享

耗尽温柔 提交于 2020-04-20 08:39:41
版权声明 :本文为北京尚学堂原创文章,未经允许不得转载。 20条编程经验分享 不想在电子厂做一辈子的普工或者是餐馆做一辈子的服务员 从小就喜欢计算机(仅仅停留在游戏 )想通过自学一门计算机编程语言进入互联网行业 想改变自己苦逼的命运。 我自己也是自学编程多年,说说我多年来的经历和一些建议。这些年,我积累了一些艰难又容易的经验。作为一名程序员,你或许还没这些经验,但我会把它们献给那些想从中学到更多的朋友。 20条编程经验分享 1. 估算解决问题所需要的时间。 不要怕,承认吧!我曾见过一些程序员为了解决一个特殊问题而坐在显示器前面8小时。为自己定一个时间限制吧,1小时、30分钟或甚至15分钟。如果在这期间你不能解决问题,那就去寻求帮助,或到网上找答案,而不是尝试去做“超级堆码员”。 2. 编程语言是一种语言,只是一种语言。 随着时光推移,只要你理解了一种语言的原理,你会发现各种语言之间的相似之处 。你所选择的语言,你应该觉得“舒服”,并且能够写出有效(而且简洁)的代码。最重要的,让语言去适应项目,反之亦然。 3. 不要过于注重程序的“设计模式”。 有时候,写一个简单的算法,要比引入某种模式更容易。在多数情况下,程序代码应是简单易懂,甚至清洁工也能看懂。 4. 经常备份代码。 在我年轻时,我就有过因硬盘故障而丢了大量代码的经历,这经历很恐怖的。只要你一次没有备份,就应当像有着严格的期限

再见了,面向对象编程

穿精又带淫゛_ 提交于 2020-04-18 05:53:51
原文: https://medium.com/@cscalfani/goodbye-object-oriented-programming-a59cda4c0e53#.z48fmajih 这是一篇长文,共有三大块,我先翻译第一块,以后有时间更新后面的 我已经用面向对象编程了好几十年了,从最开始的C++然后到Smalltalk最后到.NET和JAVA。我一直期待能充分利用面向对象编程的三大核心:继承、封装、多态带来的好处。我渴望从代码复用这一效果中能窥探到前辈们的智慧。想象着把真实世界映射成代码里各种类,我简直不能太兴奋,还满怀期待的等着他们像真实世界一样正常运转起来。 这样想就大错特错了。 继承,第一个失败的核心 乍一看,继承显然应该是面向对象编程最大的好处。对于刚刚接触面向对象思想的人来说,这些简洁的层级形状示例看起来非常有道理。 而“代码复用”,多年来都是面向对象思想的代名词。我毫不犹豫的接受了这种思想,并且一头扎进刚刚发现的这片新大陆。 “香蕉猴子雨林” 问题 成为面向对象虔诚信徒的我,带着手头的问题,开始构建类层次并编码。一切都还好。 然而,我永远忘不了当我准备利用继承来使用已有类库的那一天,毕竟说好的复用效果就要出现了。我™为这天可等了不少时候了。 一个新项目交到我的手上,我又想起来在自己上个项目中颇为喜爱的一个类。 没问题,复用拯救世界

程序员总结:新手如何学习一门新的语言

隐身守侯 提交于 2020-04-16 08:19:15
【推荐阅读】微服务还能火多久?>>> 引言: 回忆和总结了自己多年来的程序员成长经历,对当前程序员关心的热点、重点、难点问题给出了自己的看法和建议。通过对程序员的成长阶段进行划分,结合我在北京尚学堂的学习感悟,分享给大家,使得各个阶段的程序员都可以“按图索骥”,解决自己所遇到的问题。 新手如何学习一门新的语言 学习程序设计语言是程序员的看家功夫。许多程序员边编边学,没有止境,可以说是“活到老学到老”。在语言面前,程序员永远是学生。然而,程序设计语言是一项不断发展的技术,从机器语言到汇编语言,从低级语言到高级语言,从面向过程语言到面向对象语言,从C/S语言到B/S语言,从非跨平台语言到跨平台跨系统语言,从纯语言到开发平台工具,真的是目不暇接。这些革命性的技术浪潮推动着程序员不断学习新的语言以适应其发展,否则程序员将被淘汰。 学习新的语言有两类人员,一类是从来没有程序设计语言基础的、没有编过程序的人;另一类是已经掌握了一门或一门以上语言,正想要学习更高版本语言或新的语言的人。对于第一类的人我且称为新手。 新手要学习一门程序语言,若是将新手比作一张白纸,可以画出最新最美的图画,同样也可以画得乱七八糟没有美感。新手的第一门语言对其今后的影响是巨大的,如果学得好,则自信心大增,对今后的发展非常有利;如果学得不好,学不下去,则对其职业生涯打击很大。新手面对众多的语言往往无从下手: 第一

译:编程面试的10大算法概念汇总

别来无恙 提交于 2020-04-15 17:27:39
【推荐阅读】微服务还能火多久?>>> 以下是在编程面试中排名前10的算法相关的概念,我会通过一些简单的例子来阐述这些概念。由于完全掌握这些概念需要更多的努力,因此这份列表只是作为一个介绍。本文将从Java的角度看问题,包含下面的这些概念: 1. 字符串 2. 链表 3. 树 4. 图 5. 排序 6. 递归 vs. 迭代 7. 动态规划 8. 位操作 9. 概率问题 10. 排列组合 1. 字符串 如果IDE没有代码自动补全功能,所以你应该记住下面的这些方法。 toCharArray() // 获得字符串对应的char数组 Arrays.sort() // 数组排序 Arrays.toString(char[] a) // 数组转成字符串 charAt(int x) // 获得某个索引处的字符 length() // 字符串长度 length // 数组大小 2. 链表 在Java中,链表的实现非常简单,每个节点Node都有一个值val和指向下个节点的链接next。 class Node { int val; Node next; Node(int x) { val = x; next = null; } } 链表两个著名的应用是栈Stack和队列Queue。 栈: class Stack{ Node top; public Node peek(){ if(top != null)

2017秋季网易校园招聘编程题和个人解答(python)

坚强是说给别人听的谎言 提交于 2020-04-07 04:52:54
做菜 题干 大牛喜欢做菜,每种菜需要不同的材料,求需要准备多少种材料。 每一行是一个菜谱,<50字节,输入行数不确定,不超过50行。 难点:如何获取输入结束的标志 输入示例 apple banana potato apple egg 输出示例 4 import sys food = {} for i in sys.stdin.readlines(): for f in i.split(' '): food[f] = 1 print len(food) 迷宫 大牛要按特定的移动方式在迷宫中跳跃移动,在最糟糕的情况下,将迷宫出口设置在某个位置时,大牛走出迷宫所需的最少步数值最大,求这个最大值。如果将除垢设置在某处大牛永远也走不出去的话,输出-1. 输入n和m,0<n,m<=50 接下来输入n行,每行有m个字符,'.'表示可走的地方,非'.'表示不可走的地方 接下来输入大牛的起始位置,x,y, 0<=x<n, 0<y<=m,左上角为0, 0 接下来输入合法移动方式数量k 接下来的k行输入合法移动方式, dx, dy, -50<=dx, dy <=50 题干 输入示例 3 3 ... ... ... 1 0 4 0 1 1 0 -1 0 0 -1 输出示例 2 转载请注明原始链接 mn = raw_input().split(' ') n = int(mn[0]) m = int(mn[1

eBay CEO作序推荐《web商务安全设计与开发宝典》:对称加密系统

随声附和 提交于 2020-03-24 19:52:11
3 月,跳不动了?>>> eBay CEO作序推荐《web商务安全设计与开发宝典》:对称加密系统 使 用密码的目的是防止信息在传输和存储过程中被除目标接受者以外的任何人读取和理解。理想情况下,未经授权的个人永远都不能对一个加密信息进行解密。实际 上,读取加密通信只是一个时间函数,但未经授权的个人破解一个加密信息需要付出相当大的努力,花费大量的时间,所以不太切合实际。等到他破解了该消息的时 候,这个消息所包含的信息可能已没什么价值了。 使用密码可以实现机密性、完整性、身份验证和不可抵赖性。在不可抵赖中,发送者不能否认发送或者签发过带有数字签名的文件。不可抵赖能够证明某人发送或者签署过数字文件。 加密技术主要有两种,对称密钥(密钥或者私用密钥)加密和非对称密钥(公钥)加密。在对称密钥加密中,接收者和发送者共享一个共同密钥。在非对称密钥加密 中,发送者和接收者各持一个私用密钥和一个公开密钥,私用密钥他们各自私自保存,公开密钥公开放置,供想与他们通信的人使用。公开密钥和私用密钥有数学关 系,理想情况下,拥有公开密钥的人不能导出私用密钥。由于非对称密钥加密中涉及大量的计算,所以对称密钥加密系统往往比非对称密钥加密系统运行得快。 流 密码和分组密码是构成对称加密系统的两个主要类型的算法。流密码使用一个单一密钥K来加密一个明文消息M,后者是一串按顺序被处理的串行数据串。这个消息