Python什么都能做,就是哪两种血型不能生孩子子(最后一句话什么意思,指哪方面)

有关“非计算机专业如何转行做程序员”的一点思考 - 文章 - 伯乐在线
& 有关“非计算机专业如何转行做程序员”的一点思考
今天老夫半夜爬起来等着看世界杯预选赛法国vs西班牙的比赛,在新浪微博里看到 发的如下:
XXXX:员员好,我是12届的大学生,读了一所还可以的大学,但所学专业我很不喜欢,我因为性格较内向同时又感叹编程的神奇,所以很想进入这一行,但 我去面试几家后发现就算是实习岗位也需要一些基础,虽说大学学过C语言但感觉也基本不会用,那些面试单位是建议我去学习这方面知识再去找他,但我又对这些 培训机构不太放心,怕花费了一大笔学费结果却不好,现在我有些迷茫不知道该去找找其它工作(人才市场很多都是些销售和工厂的一些岗位)还是去学习,希望广 大的员员们给我些指导,非常感谢。
看完还是有一些感触的。作为一个科班计算机系毕业,第一份工作就是软件开发,然后又在咨询和销售领域工作了很多年,再回归到开发领域的老码农,老夫对于该同学的纠结心情是非常理解的。但是,要把一份工作持续地做下去,光有热情是不够的,如果你总是不能把事情做得比你身边的人更好,你的热情就会慢慢地消退,会开始怀疑自己的决定是否正确,自己的坚持是否有意义。所以,我的建议是给自己一段时间打好基础,也借此过程验证自己的决定是否明智,就算最后的答案是否定的,学会一些编程的技术也会对培养自己分析问题的思路有所帮助。
好了,说到正题,非计算机专业的同学如何为成为一个程序员打基础呢?我建议走如下的步骤:
1. 学会一门编程语言。随便什么语言都可以,其实python很适合初学者,有本书叫《与孩子一起学编程》用的就是它。不过考虑到步骤2,还是选个流行的教学语言吧,比如C++或者Java。
2. 学好离散数学,重点是高等代数、数理逻辑、集合论、图论,最好再学会概率论。计算机科学的本质是离散数学,不掌握这些知识你如何能真正理解矢量、逻辑运算、最短路径、涂色算法这些概念呢?
3. 非常非常非常非常非常非常认真地学习《数据结构》这门课。你作为程序员功力几何,很大程度上取决于你在这方面的造诣。
4. 自己做一个小项目,尽可能把你学会的东西都用上。这不仅能向招聘者展示你的功力,也是一个把所学知识融会贯通的过程,只有做了一个项目,你学的知识才真正变成为了你掌握的技术。
有人看到这里可能要说了,码农对编程语言熟悉就行了,学那么多不相干的又何必呢?
老夫打个不太恰当的比方,离散数学和数据结构就像一个武林高手的内功,编程语言则是招式。内功不行,就算会很多招式,可以吓唬吓唬武功一般的人,但是碰到打硬仗这些花拳绣腿就不管用,会死得很惨。可惜现在很多人不重视内功,不少计算机专业毕业生连堆栈和队列是怎么回事都不知道,更别提二叉树、链表、图结构了。不管碰到什么需求,上来就定义几个大数组,你能指望他编出多高效的代码?比如现在互联网热门的大数据,算法效率是核心问题,如果谁整出个O(n^2)的算法,信不信老板分分钟砍死他?
再说远一点,学会一门编程语言容易,精通很难,难就难在理解它的精髓。有很多开发者热衷于最新潮的技术,今天玩玩NoSQL,明天搞搞Html 5,说起来头头是道,但是都深入不下去,从来没有真正没有理解这些技术的精髓,也就做不出一个能发挥出它们真正优势的产品来。这往往就是因为内功不行而心态又很浮躁。(补充一篇文章:《》)但是程序员是靠代码说话的,只是善于对某个技术侃侃而谈没有任何价值。Linux和Git之父Linus Torvalds说过:“Talk is cheap. Show me the code.”(空谈无价值。拿你的代码来看看。)所以老夫要说,作为一个程序员,不先练好内功就写不出优雅的代码,这样是走不远的。
怎么学呢?这些不需要花很多钱去培训机构,而且从我面试过的很多培训学校学员的表现来看,绝大部分人学完了连MVC的概念都没搞明白,花半年时间就学会了if…else,何必去糟蹋这钱呢?现在一些大学有旁听的学分课程,花几百块钱就可以听一门课,还可以交作业做实验(比如:http://zhidao.baidu.com/question/.html)。建议你尽可能去选最好的学校,不仅仅是老师水平高,关键是同学的高水平会促使你对自己有更高要求,这和培训学校的氛围是完全不同的。
如果你在以上4步都做得很好,那么你应该可以在码农这个行业获得一些机会,剩下的就看你在工作中的表现和积累了。码农的修行是一个长期过程,计算机领域每年都有新技术出现。做了码农,就得活到老学到老,注定一辈子苦兮兮的。如果你喜欢这种感觉,那么你的选择可能就是正确的。
打赏支持我写出更多好文章,谢谢!
打赏支持我写出更多好文章,谢谢!
任选一种支付方式
关于作者:关注我的动向:
& 2018 morvanzhou.github.io All Rights ReservedPython不能用于大型项目?人们对Python的十大误解
新媒体管家
谬误 #1: Python 是一门新语言
伴随着所有的初创公司正在使用它以及孩子们最近也在学习它的事实,这个谬误为何仍然存在是可以理解的。实际上 Python 已经 超过23岁了, 它最初发布于1991年, 早于 HTTP 1.0协议 5年且早于 Java 4年. 目前比较有著名的很早就使用 Python 的例子是在1996年: Google 的第一个成功的网络爬虫.
如果你对于长长的 Python 历史比较好奇,Python 的作者 Guido van Rossum 已经为你准备好整个故事了.
谬误 #2: Python 没有被编译
不像 C++ 一样需要一个独立的编译器工具链,Python 实际上被编译成了字节码,和 Java 或者许多其他的编译型语言十分相似。更进一步的编译过程,如果有的话, 取决于运行时环境, 不管是 CPython,PyPy,Jython/JVM,IronPython/CLR,或是其它的进程式虚拟机(process virtual machine)。参考 谬误 #6 来了解更多。
一条在 PayPal 以及其它地方的通用原则就是,(应用的)安全性不能依赖于代码的已编译状态。更为重要的是加强运行时环境的安全,因为实质上每种语言都有一个解码器,或者能被拦截并导出受保护的状态。参考下一条谬误来了解更多的 Python 安全性问题。
谬误 #3: Python 不安全
轻量级 Python 的亲和力可能使他看起来不怎么可怕,但是这里直觉很大程度上是受到了误导的. 安全的一个核心原则就是尽可能让呈现的目标更小. 大系统是违背安全原则的,因为他们趋向于 使行为过渡集中化, 并且也 让开发者难于理解. Python 通过倡导简洁化来边缘化这些恶心的问题. 更有甚者, CPython 通过让自己成为一个简单、稳定并且易于审核的虚拟机来使这些问题得到解决. 事实上,近期 Coverity Software 的一个分析结果显示 CPython 得到了他们的最高质量评级.
Python 还拥有一系列可扩展的开源、产业标准化的安全库序列. 在PayPal, 我们把安全和授信看做是重中之重, 我们发现 hashlib, PyCrypto, 以及 OpenSSL, 通过 PyOpenSSL 和我们自己的定制构建的结合,涵盖了 PayPal 多样化的安全和性能需求.
这些诸多的原因,使得 Python 成为PayPal(和eBay)的应用程序安全团队在某些业务中最快的选择. 这里有把Python用在PayPal的安全第一环境中的几个以安全为基础应用程序:
创建安全代理,以促进密钥的轮换以并巩固加密实现
同业界领先的 HSM 技术集成
为缺乏兼容性的技术栈构建受TLS保护的封装代理
为我们内部的互相认证计划生成键和证书
开发主动的漏洞扫描器
另外,还有无数存在安全隐患的用Python构建,面向操作的系统, 诸如防火墙和连接管理. 未来,我们一定回去深入的整合PayPal Python的安全事项.
谬误 #4: Python 是一门脚本语言
Python 确实可以用来编写脚本,并且因其简单的语法、跨平台并且无所不在于 Linux, Macs, 和其它Unix 机器而成为这个领域的领跑者之一.
事实上, Python 可能是常规用途编程语言中最灵活的技术. 以下是一些实例:
电信基础设施 (Twilio)
支付系统 (PayPal, Balanced Payments)
神经科学和心理学 (许多, 许多, 例子)
数值分析和工程 (numpy, numba, 以及 更多其它)
动画(LucasArts, Disney, Dreamworks)
游戏后台 (Eve Online, Second Life, Battlefield, 以及 其它很多)
Email 基础设施 (Mailman, Mailgun)
媒体存储和处理 (YouTube, Instagram, Dropbox)
操作和系统管理 (Rackspace, OpenStack)
自然语言处理(NLTK)
机器学习和计算机版本 (scikit-learn, Orange, SimpleCV)
安全性和渗透性测试 (很多很多 以及 eBay/PayPal
大数据 (Disco, Hadoop support)
如理 (Calendar Server, 它 驱动了 Apple iCal)
搜索系统 (ITA, Ultraseek, 还有 Google)
Internet 基础设施 (DNS) (BIND 10)
更别提网站和web服务了,那些都不在少数. 事实上,PayPal工程师看起来像是有兴趣致力于基于Python的web特性,比如 YouTube 和 Yelp. 如果对Python成功案例的更大清单感兴趣,那就看看官方的清单吧.
谬误 #5: Python 是弱类型的
Python 类型系统的特点是拥有强大、灵活的类型操作. 维基百科上对此作出的阐述.
而存在一个不争而有趣的事实是, Python 是比Java更加强类型的. Java 对于原生类型和对象区分了类型系统,它让null存在于一个灰色地带. 另一方面,现代的 Python 拥有一个统一的强类型系统, 其中什么都没有(None) 的类型是明确指定的. 更进一步的,JVM自身也是动态类型的,因为可以把它的 根源 追溯到由Sun所收购的Smalltalk VM的一个实现.
Python的类型系统 很棒,但要提供给企业级使用,目前仍然还有许多更重大的事项需要关注.
谬误 #6: Python 速度慢
首先是有一个重要区别: Python 是一门编程语言,而不是运行时环境. Python 拥有几个实现:
CPython是参考实现, 且也是广泛发布和使用的实现.
Jython是Python用于JVM的是一个成熟的实现.
IronPython是 Microsoft 针对其自家的通用语言运行时——又名 .NET,实现的Python .
PyPy是一个正在日趋成熟的Python实现,拥有JIT编译,增量垃圾收集诸多先进的特性.
每一个运行时都有其自己的性能特点, 而且他们本身也不慢. 这里更重要的地方在于不能错误地把一个性能指标分派到一门编程语言智商. 应该总是把该评估用在一个应用程序运行时上面,最好是针对一个特定的使用场景.
清楚了那些事项之后,下面就是一些有Python提供的小项,体现其重要的性能优势:
把 NumPy 用作 Intel 的 MKL SIMD接口
PyPy的 JIT 编译能 达到比C还快的性能
Disqus 能在同样的100个盒子上容纳两亿五千万到5亿用户
诚然,这些都不是最新的列子,只是我个人的最爱罢了. 这将很容易扯到高性能Python以及独立提供的运行时这些广阔的领域. 我们不应只是专注于解决单个特殊的案例, 而是应该把注意力放在对开发人员在 最终产品性能 方面的生产力的普遍影响上面, 特别是在一种企业级环境之下.
C++ vs Python,. 两种语言在同一个输出下的对比.
给定足够的时间,一个循规蹈矩的开发者只会按照下面这种经过论证的方式来编写精确高效的软件:
设计实现一个可以正确完成任务的软件,包括开发单独的测试
测试性能,明确瓶颈
优化,根据测试和Amdahl法则,并且利用Python与C的渊源
虽然这听起来很简单,但是即使是老道的工程师,这依旧是一个非常耗时的过程。Python设计之初就考虑到了这一套开发流程。根据我们的经验,通常C++和Java项目完成一次迭代流程的时间,够Python项目完成三次迭代流程。今天,PayPal和eBay中不乏有Python项目使用更少的代码战胜了同类C++和Java项目,这多亏了快速的开发使得仔细的裁剪和优化变得可能。
Myth #7: Python无法做到大规模
大规模有许多定义,但无论怎样,YouTube是个大规模网站。每月UV超过十亿,每分钟上传的视频时长超过100小时,占用互联网带宽的20%,所有这一切都以Python作为核心技术。Dropbox,Disqus, Eventbrite, Reddit, Twilio, Instagram, Yelp, EVE Online, Second Life,,以及,是的,以及eBay和PayPal中都有Python大规模的例子,这些证明大规模不仅仅是可能:它是一种模式。
成功的关是键简单性且一致性。CPython,Python的主要虚拟机,其最大限度地放大了这些特性,从而演变出了一个精确可测的运行时。人们很难发现 Python程序员关心垃圾的收集暂停或应用地启动时间。拥有强大的平台和网络支持,Python其本身自然而然的智能水平可扩展,BitTorrent就是其充分的体现。
此外,规模化主要涵盖测量和迭代。Python是以分析和优化为要义建立的。看Myth #6了解更多Python如何垂直拓展的细节。
Myth #8: Python缺少好的并发支持
除了偶尔叫嚣性能和规模化的问题,有人想提的技术些,”Python缺乏并发,”或者,”GIL怎么样?”如果几十个反例仍不足以支持Python水平及垂直拓展规模的能力,那么再更深地解释CPython实现细节也不会有帮助,所以我会简短些。
Python拥有强大的并发原语,包括generators, greenlets, Deferreds, 和futures.。Python有优秀的并发框架,包括eventlet, gevent,和Twisted。Python在定制运行时尚投入了惊人的工作量,包括Stackless和 PyPy。所有烦人这些和更多表明,根本不存工程师们在Python并发编程方面的缺憾。同时,所有这些都正在被正式的在企业生产环境中支持或使用。例如,请参考Myth #7。
全局解释器锁,或称GIL,是Python在大多数应用场景下的性能优化,也是几乎所有CPython实现代码的开发上的基础优化。GIL使得Python可以很便利地使用操作系统的线程或轻线程(通常指greenlets),且不影响使用多进程。更多相关信息,请看该主题的Q&A列表,以及Python文档中的介绍。
在PayPal中,一个典型服务的部署需要多台机器,多个进程,多个线程,以及一个数字非常庞大的greenlets,相当于一个非常强大可扩展的并行环境(见下图)。在大多数的企业环境中,团队更倾向于往更高层次过度,谨慎并注重灾难恢复。然而,在某些情况下,每台机器每天Python服务仍然处理数以百万计的请求,而且轻松处理。
一个基于单一worker的协同异步架构草图。最外层的盒子是进程,下一个层次为线程,这里这些线程都是轻线程。操作系统处理线程间的抢占,而I/O异步协同合作。
谬误 #9: Python 程序员很稀缺
事实上,现在使用 Python 的 web 开发者的确没有使用 PHP 或者 Java 的 web 开发者多。这可能主要是由于企业需求和教育之间的相互作用导致的,不过 教育领域(教学所使用的编程语言)的趋势使得情况可能产生变化 。
也就是说,使用 Python 的开发者并不稀缺。现在全世界有数百万使用 Python 的开发者。已有几十个Python 技术大会、 StackOverflow 上成千上万的 Python 内容问答、雇佣大量使用 Python 的开发者的大企业比如 YouTube 、 美国银行( Bank of American )和 LucasArts/Dreamworks 等等,这些都显而易见地证实了这一点。在 eBay 和 PayPal 我们一直保持拥有几百位使用 Python 的正式开发者,这是怎么做到的呢?
那么,当一个项目被创建时为什么它会被首推?对于孩子来,大学生和教授们来说,Python作为第一门程序设计语言是非常易于学习的。在eBay,仅仅需要一个星期,一个新的Python程序员就能展示一个真正的成果,并且他们开始散发光芒常常只要2-3个月,通过Internet的宝藏(互动式教程,书,文档和开源代码库)一切皆有可能。
另外一个重要的考虑因素是,项目使用Python会更简单,它不会像其他项目那样需要那么多的开发者。在谬误6和谬误9中提到的那样,在Python项目中,学习像Instagram那样的高效团队是一个常见的比喻,并且这确实是我们在eBay和PayPal的经验。
Myth #10: Python不适应于大项目
Myth #7 讨论了大规模运行Python的项目,但开发Python大规模项目是什么情况呢?正如在Myth #9中提到的,大多数Python不被人看好。 然而Instagram在其被亿元美金收购当天达到千万的点击量,而整个公司只有十几个人。Dropbox在2011年只有70个工程师,其他团队更少。所以,Python适合大规模团队吗?
美国银行实际上有超过5000的Python开发者,一个单独的项目超过一千万行Python代码。JP摩根也经历了类似的转变。YouTube也有数千的开发者和数百万行的代码。大规模产品和团队每天都在使用Python,因为它具有良好的模块化和封装特性,在特定方面许多的大规模开发建议是一致的。工具,强大的惯例以及代码审查促使了项目规模化管理的现实。
幸运的是,Python发展于上面所提到的好的奠基。我们在检查执行使用pyflakes以及其他工具进行Python代码的静态分析,正如坚持PEP8——Python语言的基础风格指南。
最后,应该指出的是,除了调度加速Myth #6以及#7中所提到的,使用Python的项目通常需要更少的开发者。我们常见的成功案例中,使用Java或C++的项目通常有3-5开发者耗时2-6个月,最终由单一的开发者在2-6周(或小时,因为这些原因)完成项目。
有点像奇迹,但却是现代发展的事实,但其往往出自一个竞争激烈的行业。
一种干净的状态
这些谬误可能只是消遣。讨论这些谬误仍然很活跃的和受启发的,包括内部和外部, 因为隐含在每一个谬误里的都是一个Python的优势的认识。 而且, 记住这些看似乏味的表现和麻烦的问题是稳步成长的表露, 并稳定地增长兴趣促进教育和持续地工作。 在这里,希望能扑灭一场充满火焰的战争,并且使得能真正去谈论工作与Python的实现。
来源:代码湾
http://codebay.cn/post/5181.html
程序员大咖整理发布,转载请联系作者获得授权
责任编辑:
声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
今日搜狐热点python lambda (k,v):(v,k)是什么意思_百度知道
python lambda (k,v):(v,k)是什么意思
在python排序的时候有这么一句话,这个用什么用呢?
我有更好的答案
lambda是个匿名函数,这个函数的参数就是(k,v),实际就是个元组,并且只有2个元素,返回值就是(v,k),即交换元组中两个元素的位置比如f=lambda&(k,v):(v,k)&&&&f((1,2))(2,&1)
采纳率:42%
来自团队:
其实这就相当于一个def fun(k,v)
return v,k
为您推荐:
其他类似问题
您可能关注的内容
lambda的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。Python语言越来越火,零基础也能学会(附学习路线) | 技术学派目前的IT行业发展日趋迅猛,IT产业的产值成倍增长,在最具潜力的薪酬职业排行中,前二十名里面IT行业总是占有很大比重。而这其中又属人工智能非常之热门。如果你想要在人工智能这个方向发展,那么建议就先从Python编程语言的学习开始!首先让我们先来了解一下编程的基础概念我们先普及一下编程语言的基础知识。编程语言就是来开发程序的,说白了就是让计算机干活,比如我们要编写一篇文章,下载一首MP3等,而计算机干活的CPU只认识机器的指令,所以,尽管不同的编程语言差异极大,最后都得“翻译”成CPU可以执行的机器指令。理论上任何语言干任何事情几乎都可以, 但是主要干什么那就不一样了。Python语言Python由于具有丰富和强大的库,它又叫做作胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。常见的一种应用情形是,使用Python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,性能要求特别高,就可以用C/C++重写,而后封装为Python可以调用的扩展类库。Python被广泛地用于系统运维、图形处理、数学处理、文本处理、数据库编程、网络编程、Web编程、多媒体应用、pymo引擎、爬虫编写、人工智能等,加上人工智能(AI)的持续火热,Python作为通用开发语言,地位也是水涨船高。Python又易于阅读和编写,所以经常被称为实用主义,就算是非程序员或开发人员也很容易上手。其实学习编程有很多种方法,那今天技术学派就整理了一些学习思路和方法。希望能够为大家开阔一些学习Python的思维方式。阶段一:师傅领进门零基础学习Python,看视频跟着老师的操作是个不错的选择,边看视频边敲代码,熟练语法,快速入门,跟着老师的思路,实现功能,每一步骤都不会落下。而且通过视频的方式,很多的知识点理解起来也会比较容易。在学习的过程中,做好笔记,保存好写过的代码,方便日后复习,每天给自己定个小任务,比如说,今天必须完成哪一些章节,保证一定的代码量。坚持和实践才是硬道理。阶段二:看书辅助学习在学习的过程中,可以看一些相关的书籍,也不必整本书都看,可以把书放到手边,等到需要的时候可以当作工具书来用。因为有基础书籍,所以可以很快就完成初步语法的学习和使用。太复杂的特性还是在使用中逐步掌握就可以的。阶段三:确定学习方向把合适的语言用到合适的地方。Python职业学习方向很多,职业方向大体上分为以下六个:Web全栈工程师、爬虫开发工程师、人工智能工程师、Python开发工程师、游戏开发工程师、搜索引擎工程师。阶段四:用Python多做练习比如Python搜索文件,Python批量处理等,使用最多的还是re模块和socket相关模块。写了大量的例子,让自己对Python更加喜爱,也更加熟悉。此时翻阅最多的是《Python Doc》的指南。不管是语言参考、库参考、Demo参考,都有大量可使用的内容,内容质量很高堪比JDK。PS:这个其实就是Python的项目实践阶段,自学的话,还是困难,如果有老师带领,那么就会事半功倍。项目经验才是你提升技术能力的最快捷径。阶段五:生产上马只会埋头敲代码的Python开发肯定不是各大公司抢着要的,谨记:多找项目多找项目多找项目!多练手多练手多练手!只有自己多动手写具体项目,才能更多的犯错,解决问题,现在练习踩的坑越多,以后和HR谈薪资的时候才会更有底气。Github内的项目丰富,想找什么样的项目可以先去Github上面搜索,例如:你想写一个知乎爬虫,在搜索框搜索“知乎”,然后在语言那一栏里选择Python就可以找到你想要的项目了。学习 + 实践 + 总结 = 掌握语言的法宝“编程是门手艺活”。什么意思?得练啊。适合Python初学者练习的项目首先有两点建议:最好不要写太应用的程序练手,要思考什么更像是知识,老只会写写爬虫是无用的,但是完全不写也不行。对于练手的程序,要注意简化和抽象,但是如果简化不得当的话,很容易看几篇教程就被懒得下手了。接下来就给大家介绍几种适合新手的练手项目。1.算法系列-排序与查找Python写swap很方便,就一句话(a, b = b, a),于是写基于比较的排序能短小精悍。刚上手一门新语言练算法最合适不过了,还能顺便刷题,利于找工作。简单的练习,让你受益无穷。2.分布式系统/计网系列这系列的项目,第一步可以从写一个简单的HTTP客户端开始,原因很简单,因为HTTP大概是最简单的应用层协议了。然后可以考虑实现一个基本的ssh,你大概每天都会用ssh,难道不想做一个自己的简易版本吗?

我要回帖

更多关于 做体检完能生孩子吗 的文章

 

随机推荐