懒羊羊闲话2
前言:
笔者谈不上是某个领域的高手,也不是大厂的某个神秘高手,一直游离于小型公司,写下这篇文章献给那些无法接触到好的学习环境,苦恼自己原地踏步的coder。
1、如何快速熟悉某个行业
作为一个编码多年的程序员,我们要认识到仅仅会编码是不够的。老板愿意付给我们薪水,并不是表扬我们的编码水平,老板也大多数不太懂技术的细节。老板关心的只是我们的投入产出比,就是说付给程序员那么多工资,我们能给公司带来多大效益。这就决定了编码是为了实现业务,为了卖钱的,并不是单纯的炫技!
所以,作为一个老鸟,熟悉一个行业是非常重要的!这样才能把我们的技术最大化产出。新进一个行业如何快速熟悉呢?
100个行业关键词,找出这行业里的100个关键词,反复把它弄懂,这样我们就有可以有了和其它同事沟通的基础。
买2~3行业的经典书籍,反复精读!如果仅仅是靠请教同事,今天学一点,明天学一点,就不能有效形成自己的知识体系。
和该行业的专家聊天,因为前面我们已经有了准备,再多和行业的专家聊天,有助于把书本上知识变成我们的认知。知识转化为我们所用才有价值,如果仅仅知道得很多,却运用不起来,很快会被大脑给遗忘!
2、如何成为某个领域的专家
脑科学告诉我们,成为一个领域的专家没有捷径的。因为脑神经建立链路,并且能达到快速自如的效果没有10万个小时是不行的。看过很多名人传记,他们说别人认为他们是天才,而他们觉得自己仅仅是更努力而已。
《认知觉醒》里的复利曲线也是这个道理,前面可能我们努力了8万个小时,往往觉得自己很多东西都似懂非懂,可能我们再努力突破某个临界值之后,后面的进步就大为迅速,有点像是打通任督二脉那样。
所以大家知道了大脑的原理之后,就应该守住本分,而不应该半途而废。打退堂鼓造成的后果就是本来脑神经已经建立很多链接,因为得不到进一步地固化,后续就慢慢消失了!
3、如何写出稳定可控的代码
Don't repeat! 不要重复自己,绝大部分新手写代码都喜欢遇到问题解决问题,许多新手写代码,喜欢到处复制黏贴,像贴狗皮膏药那样,只求能把功能完成就可以了,从来不会停顿下来思考一样代码有什么可以共用的地方。我见过一个项目里,光是xml解析库就有4~5种,而且每个库都是有各自缺陷的。
不懂得把该行业所涉及的技术切割成不能再切割的技术点,然后为这些技术点打磨工具箱。导致的问题呢就是每次做一个新项目,又反复地去查找解决技术方案,这样我们曾经的积累就约等于0!这样行为一个最大的问题点就是每个新项目都疲于奔命,为了赶进度又疯狂加班,形成一种恶性循环。
天下文章一大抄,严格按照经典书籍的原则写代码,一开始不懂不要紧,先照抄,抄久了总有会明白的一天。
测试先行,前面说到我们准备自己的技术点工具箱,那么应该自己测试好自己的工具箱,而不是随便搞搞就丢到工具箱里,那样相当于我们给自己制造一大堆生锈的工具。写大型代码的时候也是一样,应该写一个小系统,等测试稳定之后再往大系统里加,而不是边加边测,出了问题再大改!
防御式编程:
1)禁用跨模块的全局变量,慎用单例模式
2)学会分割小函数,经调用,代码的bug和函数的行数成一定的比例关系,函数过长越容易出现问题
3)仔细检测每个函数传入的参数,断言和异常处理要做好!我也是花了很长时间才明白断言和异常处理的区别。
断言是帮助程序员在调试阶段避免粗心导致的程序出错,
举个例子我们断言传参的指针不为空指针,只要我们精神状态好的时候,不会说故意传个空指针让程序崩溃,但是人总是会有状态坏的时候,加功能的时候不小心就传入了空指针。这样断言就能够在调试阶段提前预警!
断言和异常处理是形影相随的兄弟,并不是说我们做了断言,就不需要再去做异常处理了。因为断言只能在调试阶段帮我们避免错误,运行阶段还是要靠异常处理的,比方说参数不对了,我们就应该函数直接返回,而不是继续往下运行业务。
4)日志,适当的日志配合异常处理,是我们解决问题的最有力工具。若是软件已经运行在电脑上了,我们大多数能依靠的就是日志了。因为不管测试多么努力,程序员多么努力,BUG是不可能消除干净的,这个时候日志就是最后一道防火墙了!
其实还是有很多很多写出高质量代码的规则,我就不再一一列举,我只是把我认为比较重要的几项挑出来给大家讲讲,若是你们能看懂1~2点,你们也就渐渐能掌握写出稳定的代码了!
4、如何学习编程
很多新手在学习一门新的语言的时候,往往听到别人说某些本书籍经典,就赶紧网购好几本回来。然后在几个阳光灿烂的周末翻一翻,闻一闻,不出几天就觉得书本晦涩难懂,远不如打几把游戏来得舒服,后面就渐渐地把它们束之高阁!
我们决定学习某本书之前,应该先翻翻,自己是否有触动,是否太难,还是太容易。若是理解太困难,证明这本书在目前这个阶段不适合自己学习。如果太容易,再看它就纯粹是浪费自己的时间!
我们应该凭感觉学习,就是一本书不要求把所有的知识点掌握,只要它能给我们带来触动,然后我们能够运用到实际工作中,这本书就值得了。但是大部分新手还是保持以前应试教育的习惯,力求把书中所有的知识看一遍,也不看看这些知识点和自己的工作生活是否有关联!
不能关联的知识点即使你学了,也很快会忘记的,更谈不上运用它了。
所以我们不关联不学习,不触动不学习,只要学习到的1~2点知识能够实践。远比知道20个知识点更重要。就像是珍珠螺那样,一层一层加厚我们的认知圈!假如时日,一定能形成复利曲线!
相关文章:
懒羊羊闲话2
前言: 笔者谈不上是某个领域的高手,也不是大厂的某个神秘高手,一直游离于小型公司,写下这篇文章献给那些无法接触到好的学习环境,苦恼自己原地踏步的coder。 1、如何快速熟悉某个行业 作为一个编码多年的程序员&#…...

多路转接(上)——select
目录 一、select接口 1.认识select系统调用 2.对各个参数的认识 二、编写select服务器 1.两个工具类 2.网络套接字封装 3.服务器类编写 4.源文件编写 5.运行 一、select接口 1.认识select系统调用 int select(int nfds, fd_set readfds, fd_set writefds, fd_set ex…...

基于SSM的图书管理借阅系统设计与实现
末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…...
Python的内存优化
在Python中,内存管理和优化是一个复杂的话题,因为它涉及到Python解释器的内部机制,特别是Python的垃圾收集和内存分配策略。Python通过自动垃圾收集机制管理内存,主要包括引用计数和标记-清除算法。 Python内存管理机制ÿ…...
蓝桥杯-回文日期[Java]
目录: 学习目标: 学习内容: 学习时间: 题目: 题目描述: 输入描述: 输出描述: 输入输出样例: 示例 1: 运行限制: 题解: 思路: 学习目标: 刷蓝桥杯题库日记 学习内容: 编号498题目回文日期难度…...
acwing算法基础之搜索与图论--树与图的遍历
目录 1 基础知识2 模板3 工程化 1 基础知识 树和图的存储:邻接矩阵、邻接表。 树和图的遍历:dfs、bfs。 2 模板 树是一种特殊的图(即,无环连通图),与图的存储方式相同。 对于无向图中的边ab,…...
前端uniapp请求真是案例(带源码)
目录 案例一案例二最后 案例一 <template><view class"box"><!-- <view class"title-back" click"backPrivious"><</view> --><!-- <view class"title-back" click"backPrivious"…...

MySQL -- mysql connect
MySQL – mysql connect 文章目录 MySQL -- mysql connect一、Connector/C 使用1.环境安装2.尝试链接mysql client 二、MySQL接口1.初始化2.链接数据库3.下发mysql命令4.获取执行结果5.关闭mysql链接6.在C语言中连接MySQL 三、MySQL图形化界面推荐 使用C接口库来进行连接 一、…...
如何用AI帮你下载安卓源码
以Android 11源码下载流程图如下所示: 1. 安装Git和Repo工具 2. 创建一个工作目录 3. 初始化仓库并下载源码 4. 切换到指定的分支 5. 编译源码 具体步骤如下: 安装Git和Repo工具:在Linux或Mac上,可以通过终端运行以下命令安装Gi…...

第三章:人工智能深度学习教程-基础神经网络(第三节-Tensorflow 中的多层感知器学习)
在本文中,我们将了解多层感知器的概念及其使用 TensorFlow 库在 Python 中的实现。 多层感知器 多层感知也称为MLP。它是完全连接的密集层,可将任何输入维度转换为所需的维度。多层感知是具有多个层的神经网络。为了创建神经网络,我们将神…...

Python的版本如何查询?
要查询Python的版本,可以使用以下方法之一: 1.在命令行中使用python --version命令。这会显示安装在计算机上的Python解释器的版本号。 # Author : 小红牛 # 微信公众号:wdPython2.在Python脚本中使用import sys语句,然后打印sy…...

Git的高效使用 git的基础 高级用法
Git的高效使用 git的基础 高级用法 前言 什么是Git 在日常的软件开发过程中,软件版本的管理都离不开使用Git,Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。 也是Linus Torvalds为了帮助管理Linu…...
关于主表和子表数据的保存
业务需求: 投注站信息保存在表A里,投注站下的设备信息保存在表B里, 一个投注站会有多个设备,要在一个表单里进行投注站和设备信息的填写,保存,回填,修改。 思路: 1)将…...

如何在后台执行 SwiftData 操作
文章目录 前言Core Data 私有队列上下文SwiftData 并发支持使用 ModelActor合并上下文更改的问题通过标识符访问模型总结 前言 SwiftData 是一个用于处理数据操作的框架,特别是在 Swift 语言中进行并发操作。本文介绍了如何在后台执行 SwiftData 操作以及与 Core D…...

TCP和UPD协议
一)应用层协议简介:根据需求明确要传输的信息,明确要传输的数据格式; 应用层协议:这个协议,实际上是和程序员打交道最多的协议了 1)其它四层都是操作系统,驱动,硬件实现好了的,咱们是不需要管 2)应用层:当我…...

MySQL:锁机制
目录 概述三种层级的锁锁相关的 SQLMyISAM引擎下的锁InnoDB引擎下的锁InnoDB下的表锁和行锁InnoDB下的共享锁和排他锁InnoDB下的意向锁InnoDB下的记录锁,间隙锁,临键锁记录锁(Record Locks)间隙锁(Gap Locks࿰…...

软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】
软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】 课本里章节里所有蓝色字体的思维导图...

【Git】安装和常用命令的使用与讲解及项目搭建和团队开发的出现的问题并且给予解决
目录 Git的简介 介绍 Git的特点及概念 Git与SVN的区别 图解 编辑 命令使用 安装 使用前准备 搭建项目环境 编辑 团队开发 Git的简介 介绍 Git 是一种分布式版本控制系统,是由 Linux 之父 Linus Torvalds 于2005年创建的。Git 的设计目标是为了更好地管…...

Python进行数据可视化,探索和发现数据中的模式和趋势。
文章目录 前言第一步:导入必要的库第二步:加载数据第三步:创建基本图表第四步:添加更多细节第五步:使用Seaborn库创建更复杂的图表关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Pyth…...

2023年中国自然语言处理行业研究报告
第一章 行业概况 1.1 定义 自然语言处理(Natural Language Processing,简称NLP)是一门交叉学科,它结合了计算机科学、人工智能和语言学的知识,旨在使计算机能够理解、解释和生成人类语言。NLP的核心是构建能够理解和…...

手机端抓包大麦网抢票协议:实现自动抢票与支付
🚀 手机端抓包大麦网抢票协议:实现自动抢票与支付 🚀 🔥 你是否还在为抢不到热门演出票而烦恼?本文将教你如何通过抓包技术获取大麦网抢票协议,并编写脚本实现自动化抢票与支付!🔥 …...

FreeCAD:开源世界的三维建模利器
FreeCAD 开发模式 FreeCAD的开发采用多语言协作模式,其核心框架与高性能模块主要使用C构建,而用户界面与扩展功能则通过Python脚本实现灵活定制。具体来说: C核心层:作为基础架构,C负责实现与Open CASCADE Technology…...
“组件、路由懒加载”,在 Vue3 和 React 中分别如何实现? (copy)
Vue3 和 React 组件懒加载实现方式 React 中组件懒加载的实现方式 React 提供了 React.lazy 和 Suspense 两个 API 来实现组件的懒加载。React.lazy 用于动态导入组件,而 Suspense 则用于指定加载过程中的占位内容。例如,可以通过以下代码实现懒加载&a…...
C#中Struct与IntPtr转换:实用扩展方法
C#中Struct与IntPtr转换:实用扩展方法 在 C# 编程的世界里,我们常常会遇到需要与非托管代码交互,或者进行一些底层内存操作的场景。这时,IntPtr类型就显得尤为重要,它可以表示一个指针或句柄,用来指向非托…...

基于STM32的DHT11温湿度远程监测LCD1602显示Proteus仿真+程序+设计报告+讲解视频
DHT11温湿度远程监测proteus仿真 1. 主要功能2.仿真3. 程序4. 设计报告5. 资料清单&下载链接 基于STM32的DHT11温湿度远程监测LCD1602显示Proteus仿真设计(仿真程序设计报告讲解视频) 仿真图proteus 8.9 程序编译器:keil 5 编程语言:C…...

Appium+python自动化(十二)- Android UIAutomator
Android团队在4.1版本(API 16)中推出了一款全新的UI自动化测试工具UiAutomator,用来帮助开发人员更有效率的完成App的Debug工作,同时对于测试人员也是一大福音,为什么这么说呢? UiAutomator提供了以下两种…...

ideal2022.3.1版本编译项目报java: OutOfMemoryError: insufficient memory
最近换了新电脑,用新电脑拉项目配置后,启动时报错,错误描述 idea 启动Springboot项目在编译阶段报错:java: OutOfMemoryError: insufficient memory 2. 处理方案 修改VM参数,分配更多内存 ❌ 刚刚开始以为时JVM内存设置…...
C++学习思路
C++知识体系详细大纲 一、基础语法 (一)数据类型 基本数据类型 整数类型(int, short, long, long long)浮点类型(float, double, long double)字符类型(char, wchar_t, char16_t, char32_t)布尔类型(bool)复合数据类型 数组结构体(struct)联合体(union)枚举类型…...

OpenCV CUDA模块图像处理------创建一个模板匹配(Template Matching)对象函数createTemplateMatching()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 创建一个用于在 GPU 上执行模板匹配的 TemplateMatching 对象。 该函数返回一个指向 TemplateMatching 的智能指针(Ptr)…...

手写Promise.all
前言 之前在看远方os大佬直播的时候看到有让手写的Promise.all的问题,然后心血来潮自己准备手写一个 开始 首先,我们需要明确原本js提供的Promise.all的特性 Promise.all返回的是一个Promise如果传入的数据中有一个reject即整个all返回的就是reject&…...