文科生成为技术经理,一共分几步——《我的Java打怪日记》

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 一共分为一下几个步骤,谈谈自己想法和感悟文科生的困境和突破文科生学习编程的优势?文科生如何能够学好编程?文科生如何在技术面试中脱颖而出?文科生在技术部门何去何从?

文科生的困境和突破

我的外公是名高中校长,小时候他经常给我们表兄妹讲《东游记》,《隋唐英雄传》和《三国演义》的故事,耳濡目染地就喜欢看课外书。那时候的课外书,经常被父母视为“不学无术”和“耽误学业”,幸运的是我的妈妈很支持我,还希望我能成为一名作家。我的爸爸忙着做生意,也无暇顾及。

image.png

得益于此,从小学开始,我的作文都常被老师在班里传阅,还获得过我们市级的征文大赛一等奖。在高一的时候,组织几十个学长学姐创立了《天边外》的文学社。结果因为高二学习紧张,不要半年就夭折了

虽然很喜欢文学,很喜欢看书带来的充实和安逸,但也会“发个愁”--想长大了做什么呢?作家?外交官?文学翻译?老师?好像都可以,但好像专业性都不强。我们小县城当时的高中,普遍重理轻文。单说我们那一届,理科生1200多人,文科生只有不到500。理科学不好的才会转到文科生,文科在学不好就走体育生或者艺术生。

哈哈,现实如此,文科就是学校的二等公民。但是我自己,就是挡不住地喜欢,睡觉前必须看点书才会踏实。

f017425237d0fca778eae7ad7c14c066.jpeg

大学填报志愿,也是全凭“一腔热情”。那时候凤凰卫视,和中央电视台的新闻深度报道非常多,而且也真真切切地解决了很多问题,帮助了那些“束手无策”的人。冲着对记者编辑的向往,也想做个“铁肩担道义,辣笔著文章”,我在5个高考志愿的第一专业都选了新闻。

0abf9b8b068561609e5816f5c3a00d13.jpeg

大一的时候,就迫不及待去了电视台实习,每天帮老师扛着几十斤重的摄像机,而且重庆到处都是山路,自己还是屁颠屁颠的,觉得拿起摄像机和话筒就是很“庄严”的,回来饭都不吃赶紧写稿子,生怕想好的写作思路跑丢了。

大学毕业,因为新媒体的兴起,电视台和纸媒在慢慢走下坡路,自己选择去了凤凰网。那时候,除了采访任务,我们每周还要自己做个专题。而专题,是用当成最火的H5技术,编辑记者采访获得的文字,图片和音视频整合而成,部门去只有一个会H5的技术人云,我们将近20个编辑,都要有求于他。

哈哈,开始有了想法,也犹豫,这应该很难吧。后来知道我们部门一个技术人员的工资,抵得上三个记者或编辑,更是对编程的含金量又向往又胆怯的。

当时就很刻意靠近那个技术小哥哥,每次午饭就会和他一起,不经意地问问他学习H5都需要知道些什么,怎么样才能入门。

后来,父母提起要在我们省城买房,我不经意地看了下房价信息,才知道“现实是如此的骨感”。我3个多个月的工资,才够买房子的一平,而且还是在三环和四环交界处。那时候,对于采访也时常会感到一些无奈和无力感,不到一年就没了斗志和信心。

索性牙一咬,去试试技术吧,“穷则独善其身”。

文科生学习编程的优势?

文科生的优势在于写作能力与人际沟通能力,如果再懂一些编程,在今天的职场上是普遍受欢迎的。

1. 写作的套路和编程很像

一个文科生在写作时,常常需要做下面几个步骤

739cffec3ac98ba24c4a735cdf21e74c.jpeg

1、审题。

审题就是分析文章的题目,弄清题目的意思。审题包括三方面内容(1)找出重点词,有些题目,有一个关键词,也叫“题眼”,题眼就是写作的重点。如《一件难忘的事》中的“难忘”之类。(2)搞清写作的范围和要求,即时间、地点、人称、数量、内容等限制范围。(3)弄明白是写人的,是记事的,还是状物、写景的。

2、确定中心。

记叙文总要表达一个思想,说明一个道理或表现某一方面的思想感情,这就是文章的中心。文章的中心要正确,对社会上正确的现象加以歌颂,错误的现象给予批评。中心正确,健康是文章的根本,对此必须首先要注意。中心还要求集中,一篇文章一般只能有一个中心,各方面内容都要紧紧围绕中心写。

3、选择材料。

作文的内容就是材料。写作文要紧扣中心选择材料,与中心关系不大的或无关的,要少选或不选。所选的材料还要真实、具体,真实就是不凭空编造,不夸大也不缩小。同时,还要注意材料的新颖、典型,不落俗套,要能够清楚地反映人或事的特点。

4、安排结构。

所谓安排文章的结构,指的是文章的材料的组织安排。如先写什么,再写什么,最后写什么,以及怎样开头,结尾,过渡等。文章的材料,常用以下这些方法安排:(1)按事情发展的顺序;(2)按时间顺序;(3)按空间的顺序;(4)按事物的几个方面。

5、列提纲。

提纲,是结文章的总体设计,具体包括:(1)文章的题目;(2)中心思想;(3)写作的顺序;(4)详写,略写的提示。提纲不能太详细,也不能太简单。

同理,编程,也就是把复杂的问题分解成一系列容易解决的小问题,然后把一个个小问题段单独审视思考。然后,聚集几个重要节点,形成解决思路;最后设计步骤,执行一步一步问题解决。

周末大扫除,为什么你会感觉无从下手?因为你并不知道你要解决的问题是什么。所以首先要明确问题——是垃圾太多需要扔掉,还是物品摆放不合理?垃圾太多应该怎么办,物品摆放不合理又该怎么办。你手头有哪些工具可以用?你期待最后整理成什么样子? 明确问题之后,用计算机可以理解的语言把问题表述出来——编程思维就是培养你的这种能力。

其次,做事逻辑。初学者最容易犯的重大错误就是事先考虑不周、计划不全,只想到明显的结果而没有穷尽所有的可能性,结果留下隐患,即所谓bug。还有,这样可以培养规范化编码的习惯。比方说定义方法、变量,哪些字母大写、哪些小写,前后拼写一致,标点准确,格式对齐、缩进,还有句句留注释,等等。例如DO,BO,DTO,抽象类,接口,枚举的命名。

2. 沟通能力必不可可少

编程不是一个人的战斗。我们需要从产品或者项目经理中获得需求,了解项目的关键点和注意事项,在开发中,我们可能还要和其他同事协作构建同一个功能,开发结束还要协助测试。任何一个步骤都离不开沟通。

文科生如何能够学好编程?

培训机构针对学员自身的需求,开设有Java零基础班

学Java并不难,难的是我们不去学习,不去用心。

0. 工欲善其事必先利其器

很多人学习编程,首先就被一大推的安装环境和IDE工具吓住了。现在有很多在线代码编辑器,可以帮助我们消除这个烦恼。不过深度学习编程,自己搭建一套开发环境是绕不过去的。

runoob:https://c.runoob.com/compile/10

20210429103758205.png

jdoodle:https://www.jdoodle.com/online-java-compiler

这个支持 Java 10,并且能够保存代码,还支持导入外部库。但有时候国内登不上。

20210429103828522.png

codingground:https://www.tutorialspoint.com/compile_java8_online.php

这个网站比较美观,也支持 java 10, 默认是运行 HelloWorld.class, 所以运行时需要对 javac 与 java 命令 专门设置一下,可以保存代码到 GitHub, dropbox 等,但不支持导入外部库。

browxy:http://www.beta.browxy.com/

它不仅运行速度快,而且还能保存代码,要是再美观些就完美了。

新版本已经支持 java 10 了,可以用 lambda 表达式, 而且美观多了,也能导入外部库,但有大小限制。

还有手机版本。

katacoda: https://www.katacoda.com/learn

在线学习Docker,K8s,Jenkins,机器学习等


20210429103948568.png

1. 要有信心

即使科班出身的程序员,在大学学习的编程知识也是个皮毛。不足为惧。

编程无非时用英语表达的数学逻辑,何况很多逻辑都很线程的框架。只要不是深究算法,70%的开发岗位,熟练使用框架,了解原理,能够在出现BUG时知道从哪里定位解决就可以了。

2. 投入时间

“一万小时定律”说,每天花4小时专做一件事,每周5天,坚持10年,有了这一万小时,基本上你就可以成为某个领域的熟手。

要掌握某种知识,必要的甚至大量的时间投入是必不可少的。

3.亲自动手

动手写,犯错、改正,再犯错、再改正,这是学编程最重要的过程。

文科生别着急啃那些厚厚的教程,先看教学视频。第一次没看懂很正常,别着急。 “重复”、“过遍数”是开始学编程的不二法门。

学规范,纠细节,养成好习惯,终身受用。学外语,尽量不要看词典,而是从上下文猜词义,学到的才是活语言。学编程,恰恰相反,要随时查手册,才能“被训练”出规范。

即使视频中老师讲解的代码很详细,也要动手做一下。程序的世界,有时候,错一点就千差万别。 改参数,看效果,多用网络搜索,寻找更简单的代码实现。

4.用调试深度学习

一种是你的代码写的不对,要学会查错,这就需要有较为系统的编程知识,而且要逐渐培养自己debug的习惯。每节课后都有一个专门的答疑时段,每次学生们都是排着队来找老师debug。而他们所犯的错误,不是数据类型用错了,就是少了个括号、标点写成全角的了,等等。第一种debug,通过一段时间的系统学习和练习,基本上学生可以理解常见的错误提示信息,并按图索骥的找到出错点。总体来说,这种debug相对容易解决。

第二种就比较麻烦。如果你是自己看书(或者视频)学习用编程解决数据分析的特定问题,那么,十有八九你的代码跑出来的结果跟书(或者视频)里的不太一样,而报错则更是家常便饭。特别是当要调用别人写的包时,由于包在不断更新,很多书中的代码已经被其他代码替代,或者有了更符合特定程序(如R或者Python)的调用方法。要debug这类代码,方法只有两个。第一,上网搜索别人的问答,通常可用stack overflow(多数问答都只能在英语世界中找到,所以,锻炼英文的搜商也是很关键的~)。第二,如果搜索不到,则要认真阅读特定包的帮助文档。通常,帮助文档不会记录每次更新代码时,做的改动,但是,如果明白你用的代码中每个参数的对应含义,那么,通常可以从帮助文档中找到蛛丝马迹解决问题。

5. 根据就业岗位需要强化学习

我当时开始投递技术简历时,也很心虚,但我先看看自己所在城市他们都需要Java的哪些技能,然后我针对学习,针对一个问题展开全面了解。

Java学习路线

阿里云--Java学习路线

https://edu.aliyun.com/roadmap/java

黑马--Java学习路线

https://zhuanlan.zhihu.com/p/115890802

B站--Java学习路线

https://www.bilibili.com/read/cv5216534/

https://mm.edrawsoft.cn/template/37212

文科生如何在技术面试中脱颖而出?

1.自信大方

只要邀请你面试,证明你不需要特别在意自己是个文科生的身份。

当人事说你的技术很优秀,但因为你不是科班出身,故意降低你的薪酬,你可以“将”他一下--其他公司的offer我也收到了,比贵公司高2k, 不过更看好公司的发展,才来试一试,如果工资还这么低,那我再考虑下吧。

2. 充分准备

根据面试岗位的技术要求,结合他的业务,思考他会重点文什么?

    1. Redis面试会问什么?
    2. Redis的集群模式和持久化策略?
    3. Redis中的Key是如何被删除的
    4. Redis单线程模型效率为什么这么高,6.0为啥开始引入多线程
    5. 如何解决 Redis缓存雪崩和缓存穿透问题
    6. Redis热点key的读写问题

    文科生在技术部门何去何从

    很多人错把平台当作自己的价值,你在平台上,还有价值,但是放到社会上,却没有价值。我在凤凰网做编辑时,就常常有这样的误区,以为自己认识了谁谁,哪个市长,哪个企业高管,但是对于人家呢,很难会记住你是谁,只知道你是凤凰网的。

    所以,对于程序员,技术就是硬通货。

    技术发展

    技术流:高并发/高部署/大数据量/图形处理/算法研究等等,总之量级越大越好,场景越复杂越好,离前沿越近越好。跳到一个好点的一线平台,选择一个领域往深了钻,去市场上竞争技术专家的岗位。

    管理路径

    大部分程序员都是怎么工作的?产品经理(或领导)规划需求,交代任务,程序员撸码,实现需求。

    一个优秀的程序员,一定要有“面”的思维——全局视角。要总是盯着领导给你的“点”,点做的再好,改变不了你处于食物链底层的本质。要以全局的视角,技术的思路,考虑当前产品缺什么,需要什么,然后主动出击。

    管理流:团队leader——业务线负责人——总监,老生常谈的路线,就不班门弄斧了。如果能做到大厂某条业务线负责人/初创副总监啥的,表现就算是十分优秀。

    身体第一位

    从身体的角度来说,30岁之前你找病,30岁之后病找你。

    为什么很多中年人开始注意养生了,要早睡,要清淡,要喝枸杞?

    不是他们乐意,也不是喜欢养生的小伙子变老了,是身体真不行了啊。

    做点副业,多线收入

    文科生是重要的内容创作者,在这个内容为王的时候,有太多文科生可以做的事情了!

    例如:在线敲代码、CSDN付费专栏,直播没准也是,哈哈哈。

    学会去带新人,培养自己的团队

    这个其实很重要,你对新人怎么样,也代表着新人之一会对你怎么样。

    理论上来说,我们不求任何回报,但是如果你有一天自己去了一家陌生的公司,框架,流程,氛围都是陌生的,你难道还要从头开始招聘么。

    不是这样的。大部分都是找自己的老部下。

    不要因为现在的工作环境稳定,就忽视了以后会有这种可能性发生。

    无论到什么地方,只要资源到位,你可以快速凝聚出一个有战斗力的公司,这都是你的能力。

    这些是需要缓慢培养,至少三到五年的时间。

    不要怕他们犯错,不犯错误是不会成长的,你就是那个兜底的。

    相关实践学习
    基于Redis实现在线游戏积分排行榜
    本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
    云数据库 Redis 版使用教程
    云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
    目录
    相关文章
    |
    算法 Java 中间件
    震惊!文科生如何三个月转行成为Java工程师?
    点击上方“程序员江湖”,选择“置顶或者星标” 你关注的就是我关心的! 作者:以大橘为重链接:https://www.nowcoder.com/discuss/156087 楼主是19届应届生,去年在牛客学到了很多东西,在实习和秋招也收获了一些offer(Java后端开发工程师)。
    |
    12天前
    |
    Java 开发者
    Java多线程编程中的常见误区与最佳实践####
    本文深入剖析了Java多线程编程中开发者常遇到的几个典型误区,如对`start()`与`run()`方法的混淆使用、忽视线程安全问题、错误处理未同步的共享变量等,并针对这些问题提出了具体的解决方案和最佳实践。通过实例代码对比,直观展示了正确与错误的实现方式,旨在帮助读者构建更加健壮、高效的多线程应用程序。 ####
    |
    20天前
    |
    安全 Java 测试技术
    Java并行流陷阱:为什么指定线程池可能是个坏主意
    本文探讨了Java并行流的使用陷阱,尤其是指定线程池的问题。文章分析了并行流的设计思想,指出了指定线程池的弊端,并提供了使用CompletableFuture等替代方案。同时,介绍了Parallel Collector库在处理阻塞任务时的优势和特点。
    |
    3天前
    |
    缓存 Java 开发者
    Java多线程编程的陷阱与最佳实践####
    本文深入探讨了Java多线程编程中常见的陷阱,如竞态条件、死锁和内存一致性错误,并提供了实用的避免策略。通过分析典型错误案例,本文旨在帮助开发者更好地理解和掌握多线程环境下的编程技巧,从而提升并发程序的稳定性和性能。 ####
    |
    3天前
    |
    安全 Java 开发者
    Java中的多线程编程:从基础到实践
    本文深入探讨了Java多线程编程的核心概念和实践技巧,旨在帮助读者理解多线程的工作原理,掌握线程的创建、管理和同步机制。通过具体示例和最佳实践,本文展示了如何在Java应用中有效地利用多线程技术,提高程序性能和响应速度。
    24 1
    |
    11天前
    |
    安全 Java 开发者
    Java 多线程并发控制:深入理解与实战应用
    《Java多线程并发控制:深入理解与实战应用》一书详细解析了Java多线程编程的核心概念、并发控制技术及其实战技巧,适合Java开发者深入学习和实践参考。
    |
    11天前
    |
    Java 开发者
    Java多线程编程的艺术与实践####
    本文深入探讨了Java多线程编程的核心概念、应用场景及实践技巧。不同于传统的技术文档,本文以实战为导向,通过生动的实例和详尽的代码解析,引领读者领略多线程编程的魅力,掌握其在提升应用性能、优化资源利用方面的关键作用。无论你是Java初学者还是有一定经验的开发者,本文都将为你打开多线程编程的新视角。 ####
    |
    10天前
    |
    存储 安全 Java
    Java多线程编程中的并发容器:深入解析与实战应用####
    在本文中,我们将探讨Java多线程编程中的一个核心话题——并发容器。不同于传统单一线程环境下的数据结构,并发容器专为多线程场景设计,确保数据访问的线程安全性和高效性。我们将从基础概念出发,逐步深入到`java.util.concurrent`包下的核心并发容器实现,如`ConcurrentHashMap`、`CopyOnWriteArrayList`以及`BlockingQueue`等,通过实例代码演示其使用方法,并分析它们背后的设计原理与适用场景。无论你是Java并发编程的初学者还是希望深化理解的开发者,本文都将为你提供有价值的见解与实践指导。 --- ####
    |
    16天前
    |
    安全 Java 开发者
    深入解读JAVA多线程:wait()、notify()、notifyAll()的奥秘
    在Java多线程编程中,`wait()`、`notify()`和`notifyAll()`方法是实现线程间通信和同步的关键机制。这些方法定义在`java.lang.Object`类中,每个Java对象都可以作为线程间通信的媒介。本文将详细解析这三个方法的使用方法和最佳实践,帮助开发者更高效地进行多线程编程。 示例代码展示了如何在同步方法中使用这些方法,确保线程安全和高效的通信。
    43 9
    |
    13天前
    |
    安全 Java 开发者
    Java多线程编程中的常见问题与解决方案
    本文深入探讨了Java多线程编程中常见的问题,包括线程安全问题、死锁、竞态条件等,并提供了相应的解决策略。文章首先介绍了多线程的基础知识,随后详细分析了每个问题的产生原因和典型场景,最后提出了实用的解决方案,旨在帮助开发者提高多线程程序的稳定性和性能。