学编译原理找得到工作吗
① 学完整套 Python 找不到工作怎么办
秋招的时候 Python 的岗位确实不多,尤其是像 BAT 这样的一线公司,基本上 Python 岗位都是运维开发和测试开发。二三线互联网还是有不少 Python 岗位的,例如饿了么、爱奇艺、头条等,而且因为投的人不多,所以竞争力比较小。
但是只会 Python 肯定是不行的,面试的过程中基本上没有问过 Python 语言的相关东西,如果是面的后端开发,可能会问一下用的后端框架的源码,然后就是各种 CS 的基础知识:算法与数据结构、操作系统、计算机网络、数据库,这些问得比较多,然后就是简历中的项目了。
除了 Python 外,最好还要懂一门静态语言(java/C++),一门函数式语言(Haskell/Lisp/Scala),大厂的面试其实对语言的要求不是很高,比如面过某 C++ 岗位,全程算法都是用 Python 写的,还和面试官讨论了一下 range() 为什么设计成左闭右开的形式。
想要用 Python 找到一份好工作(后端方向)
可以给一点小小的建议:
科班出身的话,各种基本知识应该是没问题的,不是科班的话可能这一块需要补一补(* 为备选);
算法&数据结构:《算法》、*《算法导论》(搭配 MIT 6.006 食用更加)
操作系统&计算机组成原理:《深入理解计算机系统》
计算机网络:《自顶向下方法》、*《TCP/IP 协议(卷一)》、《UNIX 网络编程(卷一)》(强烈推荐,基本上和网络相关的比较难的一些问题这本书都有讲,可以挑一部分看)
编译原理:这个我没具体看书,直接写了几个解释器然后了解了个大概,书的话好像有《30天自制编译器》比较浅显易懂
数据库:《MySQL 必知必会》、《高性能 MySQL》(从此各种数据库优化面试题手到擒来)
Linux:《鸟哥的私房菜》、*《Linux 命令行与 Shell 脚本编程大全》
和面试官扯淡:《程序员修炼之道——从小工到专家》
Python 语法虽然很简单,但是要看的东西其实很多
基本的语法看官方的 Tutorials 就可以了,Python 2 和 Python 3 都要会,之间的一些主要的区别要知道
学会了语法可以看《Python Cookbook》、《Fluent Python》,这两本书相当于进阶的书,学完功力 double,当然可能看一遍是不能完全吸收的,以后可以用到的时候再回去刷一下
看完上面两本书并刷过一些代码之后应该对 Python 的一些常用标准库比较熟悉了,然后可以开始系统看一下标准库(慢慢刷吧,这是个大工程)
熟悉某一个后端框架,我选的是 Flask,因为比较简单,代码也不多,花一点时间把源代码看懂,知道一个 Flask app 从头到尾的运行过程,有时间可以自己写一个 web framework,实现基本的路由和 context 功能,当然还有 bottle 更简单,原理大同小异,读一下 PEP 3333 -- Python Web Server Gateway Interface v1.0.1
一般科班出身的在学 Python 前肯定会 Java/C++,这一部分也有很多的推荐,就不说了
其实面试过程中会问很多项目和设计类的问题,这种东西只能慢慢学习了,平时可以刷一刷 PyCon、各种博客、演讲之类的来提高姿势。
可以看到,要真的把上面所有的东西都学完不是一两个月能搞定的,这还不包括准备项目的时间。如果真的能学得不错了(70%)的样子,应该拿个一线二线大厂的 offer 还是没问题的。
② 学习编译原理对从事应用软件开发有何启发
学习编译原理和操作系统对编程能力对编程能力的作用在于:
1、学好了编译原理,才可能编写出高效,稳健,占用内存少的程序。
2、学习操作系统对windows相关的编程很有帮助。如果是对操作系统关系不大的C/C++/c#,java之类的编程,关系不大。
编译原理是计算机专业的一门重要专业课,旨在介绍编译程序构造的一般原理和基本方法。内容包括语言和文法、词法分析、语法分析、语法制导翻译、中间代码生成、存储管理、代码优化和目标代码生成。 编译原理是计算机专业设置的一门重要的专业课程。虽然只有少数人从事编译方面的工作,但是这门课在理论、技术、方法上都对学生提供了系统而有效的训练,有利于提高软件人员的素质和能力。
操作系统(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。
③ 编译原理有必要学吗
编译原理作为计算机科学的重要课程,涵盖了程序设计语言、编译器、解释器和虚拟机等知识领域。尽管它在某些特定的应用场景中并不是必须掌握的技能,但对于希望深入理解计算机科学、软件开发及计算机体系结构的个人而言,学习编译原理至关重要。
深入了解计算机体系结构是学习编译原理带来的好处之一。通过学习,可以更好地掌握内存管理、指令集、寄存器、中断等底层结构的知识,这对于开发高效、稳定的软件至关重要。
提高软件开发能力也是学习编译原理的重要益处。学习编译原理有助于理解编程语言的设计与实现,掌握编译器和解释器的构造原理,从而提升软件开发的专业技能。
掌握优化技术同样是学习编译原理的关键。编译器的一项重要任务是对源代码进行优化,以提升程序的运行效率。学习编译原理可以帮助掌握各种优化技术,如代码重排、循环展开、常量折叠等,从而开发出更加高效的软件。
拓宽职业发展道路是学习编译原理的另一个显着优势。掌握编译原理的知识可以让你在编译器开发、虚拟机设计、嵌入式系统开发等领域找到工作机会。此外,编译原理的知识还可以应用于人工智能、机器学习等其他领域,为职业发展提供更多可能性。
综上所述,尽管编译原理在某些应用领域并不是必需的,但它对于深入了解计算机科学、提高软件开发能力、拓宽职业发展道路的人来说,无疑具有重要的价值。
