2016年8月29日 当初想的太简单~~~ 哎
写在前面
从3月份开始各大互联网类、游戏类、软件类等公司开始招暑期实习,9月份正式招聘,面临众多的工作选择和技术方向,我们不免有些眼花缭乱啊,在我们选择和准备应聘之前,应该理性分析下,有哪些技术方向,工作岗位,这些岗位的要求如何。
(ps:当然这些,只是作为应届生求职者的一些浅薄看法,毕竟现在没有行业的经验,也没有练得倚天屠龙之技,找工作只靠本身的编程技能。仅供分享,欢迎留言交流)
关于程序员
相信大部分计算机相关专业的学生(无论是研究生还是本科),毕业后第一份工作都是传说中的程序员,或者叫软件工程师之类,因此在这里,重点说下程序员相关职位吧,毕竟目前来看,我也是重点准备该方向的就业的。程序员只是个很笼统的概念,由于专业化分工和编程技术商业化竞争的激烈,程序员被分成“各大门派“,这些门派既可以从编程语言上面划分,也可以从从事的业务领域方向划分,或者技术领域划分。
从编程语言看程序员——你是哪一派
只要你是程序员,你打算以后从事编程工作,你就必须至少精通一种编程语言,这门语言就是你的工具,业务上一些需求、你的想法和你的技术水平都是由这门工具实现的。主流的编程语言分为以下几个门派,之所以说以下的语言是主流,主要是因为它们不仅仅是一门语言,它们是一个平台,拥有强大的编程库,成熟的业务解决方案,稳定的版本支持,当然它们的程序员门徒也是众多的。
因此符合的有Java,NET(C#),C/C++, PHP四种,四种语言各有侧重,Java和PHP主要专攻Web领域开发(B/S架构的),C/C++主要是客户端软件和服务器类软件开发,NET(C#)面向客户端和WEB开发皆可,唯一的不足是不能跨平台和开源免费。以下表1,主要是对这些语言本身需要掌握的技术要求和就业方向,简短的归纳下。排名不分先后:
表1 编程语言技术要求简单分析
从中可以看出,语言本身语法或许各有千秋,互有长短,但是由于语言设计理念和面向的问题不一样,导致实际生产中,语言解决的问题有很大的不同,基本上一门语言都只负责某一方向的开发,没有出现一门语言一统天下的情况,因此很多时候,为了解决复杂问题,掌握和学习多种语言,是必须的,这样才能更好利用它们各自擅长的解决方案,优雅地低成本地完成我们的工作。
其实自己平时由于好奇,上述语言都至少看过一些书,写过一些Hello World之类的代码,(当然水平也很菜),不过这里的观点不涉及好与坏,只是种想法和分析,仅供参考,个人感觉学习Java、PHP、NET这三类语言时,主要是学习它们总结的API库的使用和所谓的设计实现,用这三类语言实现B/S系统时,主要关注于需求之类,用户界面之类,可能以后要关注如何解决大并发访问量之类的通用难题(当然前提是你能够有这么大的用户量,一般只有热门的互联网服务才有),而学习C/C++,除了学习语言本身之外,还要去看操作系统之类的东西,这样才能做出应用。从时间上来看,C/C++的确上手比较慢,而且平时学校里用到的机会不多。
此外,如果你是做面向用户的产品,那么你花在用户界面,需求,美工之类的时间会很多,做客户端之类软件(包括Web界面和PC界面)就属于面向用户的,偏前端的,接触的东西非常的广,但很容易不够深入,且技术更新快;如果你是做面向程序员的(例如设计一套API,设计云存储之类),面向业务后台请求的(请求调度,负载均衡,Web服务器),那么你会专攻Linux操作系统,网络编程,协议,算法之类的技术,这些技术是计算机专业的基础,比较容易深入,但是远离了用户直接产品需求。
从工作岗位看程序员——你想做什么
或许你发现上面单纯从语言上分,好像没有你想要的工作,或者你没有被很好的归类,那么下面我就挑选国内一些典型公司的招聘要求作为分析,相信会有你想做的工作或者你擅长的。不过我相信,上面四种语言你肯定熟练了其中的一种,如果你是标准程序员的话。
以下只是根据语言对程序员职位进行了划分,当然你进入企业以后,分到不同部门负责不同产品,又会对该语言平台的技术方向有偏重,同时也会接触更多业务,所谓业务,就是用户产品需求相关或者产业方向相关的,由于职业众多,这里面忽略了测试,运维,产品等非纯开发岗位。
岗位No.1
工作岗位关键词:Java软件工程师,Java研发工程师
特点:大量招聘,各种公司(银行,互联网公司)通吃,算得上万金油
技术要求:Java,JSP,Servlet,SSH,Tomcat之类服务器,Mysql之类数据库,多线程和并发编程
国内某个公司招聘要求:
1. 精通Internet基本协议(如TCP/IP、HTTP、SMTP、FTP等)内容及相关应用;
2. 较强的编程能力,能够完成较复杂的交互流程设计和实现;
3. 精通某种网页设计语言,使用JSP或者Servlet者优先考虑;
4. 熟悉MVC,J2EE等应用模型中至少一种;
5. 熟悉Javascript、HTML 编码;
6. 熟悉Tomcat,Resin,JBoss等应用服务器中至少一种的配置与使用;
7. 熟悉UNIX/Linux 的基本命令操作,有AJAX,Flash,Spring,Struts等开发经验者优先考虑;
8. 熟练掌握RDBMS原理及SQL语言,熟悉基于数据库应用的结构设计,性能优化;
9. 计算机软件或相关专业;
10.工作认真,细心,有条理;积极性高,求知欲强;具有较强的沟通能力及团队合作精神。
岗位No.2
工作岗位关键词:Net开发工程师,C#开发工程师
特点:互联网公司招的少(BAT之类的),中小型软件企业、微软等大软件公司、国企和事业单位有相关的职位
技术要求:C#,Asp.net,WinForm,WCF,SQL Server,Web Service,Ajax
国内某个公司招聘要求:
1. 熟悉winFrom开发,精通socket,TCP/IP协议的开发,熟悉WebService技术
2. 熟悉.Net Web程序开发基础,熟悉windows环境下客户端程序的开发特点;
3. 精通.NET,C#,ASP,SQL,VB,XML等开发语言,熟悉B/S结构程序的开发流程;
4. 熟悉HTML,DHTML、JavaScript、Xml、JQuery,有两个以上ASP.net项目开发经验;
5. 熟悉基于.Net的C/S结构程序开发者优先;
6. 有大型网站开发经验者优先,有C++经验优先;
7. 熟悉移动程序终端应用程序开发者优先;
8. 有二维码相关开发经验优先;
9. 请提供相关开发产品演示。
岗位No.3
工作岗位关键词:C/C++开发工程师,后台开发工程师,Windows客户端开发,Linux服务器开发工程师
技术要求:C/C++,STL,Windows编程,Linux编程,开发工具使用,MFC,QT,数据结构与算法,Socket网络编程
特点:高大上的感觉,职位相对较少,要求较高,本身学习周期长,关键是学校里接触的少(大家主要是接触基础Web编程较多)
国内某个公司招聘要求:
1.有相关C、C++程序语言项目开发经验;
2.熟悉网络编程;具备基本的gdb调试能力,了解内存泄漏,越界读写等常见问 题;
3.良好的服务器端编程能力和编程习惯,能完成相关设计、实现文档编写;
4.掌握多线程并发编程技术;熟练掌握各种数据结构和算法;
5.熟悉windows/linux编程环境;
6.有MySQL开发经验者优先考虑。
岗位No.4
工作岗位关键词:PHP开发工程师,高级开发工程师
特点:主要是Web开发,用于类似主页,微博,社交网站之类互联网产品开发
要求见以下招聘要求:
1. 精通PHP面向对象的设计方法,理解MVC模式及SOA思想并能运用在开发中;
2. 精通PHP语言,并至少使用PHP开发过一个以上大中型项目,能够独立编写中等规模PHP应用程序;
3. 熟悉Javascript,熟练掌握XHTML、CSS、DIV,JQUERY等页面技术,熟练掌握Mysql数据库应用开发;
4. 能熟练使用Linux,拥有查询优化和存储优化经验以及PHP缓存技术者优先;
5. 责任心强,具有良好的沟通、协作能力和团队合作意识,能够承担重要任务承受较强工作压力。
岗位No.5
工作岗位关键词:移动终端开发工程师,Android开发工程师(Java),IOS开发工程师(Object C),WP开发工程师(C#)
特点:苹果开创了这一类职业的繁荣,非常火热,各大公司也都有需求
技术要求:熟悉三大移动操作系统编程框架,编写APP
国内某公司的招聘要求:(考虑国情,主要是Android的)
1. 两年及以上手机应用实际开发经验,至少参加过一个完整的商业级手机应用或游戏开发项目,一年以上Android平台开发经验优先考虑;
2. 熟悉Android OS系统体系结构、framework、以及底层库;
3. 熟悉Android下联系人、电话、信息、数据库等常见应用实现机制;
4. 熟悉Android下网络通信机制,对Socket通信、TCP/IP和http/https有较深刻的理解和经验;
5. 熟悉Android平台UI设计,熟悉常用布局;
6. 理解面向对象设计的基本原则,熟悉常用的设计模式;
岗位No.6
工作岗位关键词:算法工程师 数据挖掘工程师 Hadoop工程师
技术要求:编程语言(Python之类即可),机器学习,数据挖掘,信息检索,大数据处理
特点:该方向相对程序员已经很深,部分已经进入研究级别,不过绝大部分应该是应用算法和工具,学习周期较长
国内某个公司的要求(这是偏程序员方向的,研究性质的岗位往往要求是博士,要有论文发表要求):
1. 精通类Linux平台下的C/C++语言开发,熟练使用gcc、gdb、Makefile等开发工具。了解STL更佳;
2. 至少掌握Perl / Python / Linux Shell中的一种;
3. 深刻理解各种常用数据结构和算法,能根据具体情况灵活应用;
4. 具备机器学习 / 自然语言处理 / 数据挖掘其中一种的研究和项目经验者优先,具有经济学背景优先;
5. 有较强的分析和解决问题能力,有持续自我学习的能力和意愿, 善于沟通和逻辑表达,良好的团队合作意识。
从知识架构看程序员——你需要准备什么
一份好的工作——薪水不错,公司不错,前景不错,必然要面临竞争的压力,那么如何准备,这里主要根据上面的岗位要求,构造属于自己的知识架构图。
首先计算专业基础:数据结构、常用算法、操作系统、数据库原理、计算机网络、计算机组成(硬件基础与单片机)、数学(概率论)
然后是语言方向:C/C++,PHP,NET,Java,选择其中的一种,精通,请注意熟悉的是整个语言平台,而不仅仅是语言本身的语法
最后是领域方向:Web开发,客户端开发,服务器开发,移动终端开发,研究领域方向(搜索,数据挖掘之类,这个没有画出来)。
以下图1,简单表示了需要准备哪些知识。
图1 知识结构
结束语
以上主要是自己找实习工作时,对自己的一些分析,现在写出来做个总结,当然也是参考了很多经验帖。找工作其实也不一定局限于编程,计算机专业从业选择是很多的,但是你如果想要找到一份合适的工作,应该提早准备,准备无外乎根据自己的情况(根据自己的情况,是指现在你已经会了哪门语言或是现在项目中需要用哪门语言,不建议从头学习一门,没必要),选择一门语言方向,然后在这个方向进行深入,为以后工作和发展做好准备。
自然,之前,没有强调基础的重要性,其实科班的优势就在于那些专业基础,所以,我们每个人都必须掌握那些,你找工作时牛不牛,offer拿的多不多就在于基础牢不牢靠,当然工作以后你牛不牛,就看你产品和业务发展啦,自然是后话。
转载请附上本页链接: 来自CSDN博客——MePlusPlus(Me++)的专栏 (http://blog.csdn.net/meplusplus)
欢迎留言交流。