首页 程序人生 学习最重要是方法,管理最重要是高度

学习最重要是方法,管理最重要是高度

技术学习要兼顾深度和广度

夯实技术基础

这么多年来,我面试了很多人。我越发感到「技术基础」非常重要。

很多技术的本质是一样的。技术基础足够好的话,学东西可以非常快。往下到操作系统层面,甚至计算机硬件层面,你会发现,编程语言特性和虚拟机特性不再重要。而技术基础和具体的编程语言没有太大关系,你有良好的技术基础,面试什么样的技术人员都是无障碍的。

另一方面,计算机在软件方面发展特别快,越往高层走,变化就越快,越往基础走,变化就越慢。我们掌握了更多基础,就相对更不容易被时代淘汰掉。

计算机软件硬件发展这么多年,最根本的东西是没有太大变化的。这里说的技术基础包括计算机硬件、操作系统(资源抽象和资源管理调度)、网络层面的 TCP 、HTTP(如果对 TCP 理解深刻,不管是中间件还是底层操作,都会游刃有余)、语言的虚拟机(虚拟机怎样处理内存?虚拟机的代码执行流程是怎样的)、安全基础、设计模式、方法论、数据库和统计学等。

比如安全基础方面,安全是有大的基础原则的,只要理解了,在安全方面就不容易犯低级错误。比如 SQL 注入、跨站脚本攻击,说白了就是要彻底理解,“数据就是数据、代码就是代码,代码跟数据交换要进行过滤或者说是隔离”。

技术学习的广度

如果具备很好的技术广度,你就很容易做出最优的技术方案,而不是只能是选择自己最熟悉的东西。对技术管理者来说,具备比较好的技术广度,我们可以跟所有岗位流畅沟通,客户端、服务端、前端、测试、数据库、算法工程师……技术上很多东西是相通的,我们也容易理解各种方案,不被忽悠。

一个事实是,对于大多数的技术,了解只需要一天,简单搞起来只需要一周,入门可能只需要一个月。最难的是踏出第一步。广泛看书是必要的。我买了好几个书架的书,各个领域都买。一本书带来的信息量和价值远大于书的价格,各个领域的经典都通读一遍,这个价值绝对超过几万块钱购书成本。

有空的话,看技术文章、微信公众号和博客,时不时看好书排行榜,补充一下自己对于技术实时的了解。我会记录下各种地方看到的新名词,知道这个东西大概是干什么的 —— 不一定马上做很详细的了解 —— 以后如果用到就会想起来。

多学几门语言突破自己的舒适区,没有那么困难。我由 .Net 转 Java 也只是一周多时间,Java 的东西和想法 .Net 也都有,并没有什么太特殊的,只要把基本的 IDE 调试一下,SDK 了解一下就行。

开源项目这么多,对于著名的开源项目,我会花个一两小时写最简单的 demo ,自己调适参数,认识它怎样运作,对这个产品有最基本的了解。

很多人问我 .Net 转 Java 的想法,我觉得如果是规模偏小、偏 toB 的话,.Net 在开发效率和稳定性上面都不错。公司互联网化、规模大了,不管是招人方面还是社区配套,Java 更适合。

技术深度同样重要

技术深度和广度相比也是非常重要的。

具备了技术深度,遇到问题可以快速定位并从根本上解决。如果对技术底层不了解,你可能只能猜。有技术深度之后,学习其他技术可以更快,再深入其他技术就不会怕。

对于技术深度,看书的作用不大,技术深度的探索主要是需要实践,在实践的过程中踩坑填坑得到经验。对于实践最好的方式是自己写代码、做实验,自己证明结论。找自己的兴趣点造轮子,比较一下谁造的轮子更好,甚至开源出来和大家共同切磋。

我自己写过 MVC 、RPC 、IOC 以及底层的网络框架,虽然只是自己写着玩,但是这个过程对我的帮助很大。

阅读源码很重要。那些演化很久的源码肯定有非常多的精妙设计和性能优化技巧,肯定也是踩过各种性能上的坑。

分享和社区贡献也非常重要。只有自己 100% 理解,你才能分享;别人给你反馈,你会学到更多。

分享和帮助他人,树立个人品牌

打造个人品牌很重要。但是,打造个人品牌不等于到处宣扬,重在分享和帮助别人。

我一开始喜欢论坛,从 CSDN 开始,做过 .Net 版块版主;自己写博客,在博客园曾经排名前十;自己写过书,也翻译过大量的书;有机会的话,我会去做线下分享。

把技术整理成细致的技术网络,这对自己在技术上的提炼是非常好的。如果是线下分享,你可以深挖自己的兴趣点,以最简单的语言分享给大家。

我觉得混论坛、写博客、写书给我的个人品牌和技术成长的帮助非常大。当然,写书和翻译书最重要的是把事做好,而不是为了让书上有你的名字。

多管齐下的英语学习方法

英语是非常重要的。用英文关键词在 Google 搜索技术问题,是更容易快速找到真正答案的。国外的英文社区很活跃,一手技术资料也多;等到有中文资料再看,往往已经落后半年甚至一年了。在工作中和老外打交道,口语足够好就会比较方便。另外,英语还可以扩展事业和提高生活质量,比如国外自由行或者看美剧。

我在大学英语很差,毕业以后第一家公司就是外企,之后慢慢对英语感兴趣了。上班的人没有太多的集中时间去学习英语。我总结了对工作的人比较容易实践的英语学习方法,这里分享给大家。

读,从翻译开始

读可以从翻译技术文档和技术书籍开始。积累基础词汇和基本表达,至少看英语数据就不需要翻字典。这个过程非常快,翻译一两本书之后,你就可以彻底抛开词典了。

还要强迫自己优先阅读英文资料。技术资料的阅读是第一层次,生活化阅读更难。找喜欢的小说甚至打英语游戏,这些难度比技术资料高很多。后者是更长的过程。

随着阅读的增多,不再需要查辞典,其实不难。一年以后,看各种资料都不再需要字典 —— 当然你可能写不出来,但你知道这些意思。这是一点问题都没有的。

写,从工作相关的文档博客开始

如果没有外企经历,可以写英文文档、博客或者生活日记,不断锻炼,同时也是在输出和分享。英语和中文一样,普通表达、正确表达、精确表达和优雅表达四个层次有很大区别。只有大量阅读之后,你才能体会到词与词的区别,你的写作才会更优美。

如果更有兴趣,可以阅读专业写作类书籍,比如美国大学英语写作。还可以将中文译文进行反向翻译,对比自己的译文和原文的区别,这样你就能知道 Native Speaker 跟你的表达的区别:哪些是不成熟的?哪些是不正宗的?

听,从技术视频开始

听会更难,需要的时间也更多。

可以看技术视频入门,比如说 YouTube 上有很多国外大学授课视频,不但能够学技术,而且能够提高英语的听的能力。比如斯坦福的 iOS 课程、深度学习课程。在这里,你可以听老外正常语速下的表达,而不是英语学习材料里的很慢速的表达。习惯正常语速对听力非常重要,而看授课视频是对自己比较简单又受益的方式。

对我来说,最重要的是看美剧。工作的人没有太多时间专门学英文,但是你还是需要休息,看美剧确实是比较好的方式。反复的看,带中文字幕看、带英文字幕看、不带字幕看、不看屏幕纯听……我一开始看美剧,只有 30% 可以听懂,一步步走下去,200 小时、300 小时之后甚至六七百小时之后,质变发生了,耳朵一下子变灵敏了,大部分都可以理解、都可以看懂了。

我现在看大部分的美剧不需要字幕也非常适应普通的语速,听力的养成基本全靠看美剧。不管你信不信,在没什么听力基础的情况下,坚持看老友记之类的美剧三部,之后你的听力一定基本过关。

当然也可以听自己感兴趣的播客,也能够进行训练。这跟美剧不一样,这个本来就是没有图像的,你可以在开车的时候听,你可以在地铁上听,这个都是可以的。有条件的可以装卫星电视,直接收看国外的电视节目。

说,从简单的关键词开始

说是最难的。最重要的是认识音标。核心是重音。重音读不对,就完全不是这个词,而变成了另外一个词。

可以购买口语课程,和外教进行口语对话。在开始阶段,你的表达不流畅,可以抓关键字,这样别人一听就知道你想说什么。不要用很复杂的语法和很多修饰词,只要说关键词就可以。随着时间推移,慢慢的你就可以从中文翻译到英文,变成英语思维直接表达。

管理,最重要的是招到优秀的人

多招聘优秀的人,构建梯队

找到优秀的人,招聘到优秀的人,如果可能,让优秀的人尽量多,这对团队是非常关键的。为什么要盯着优秀的人?优秀的人做事效率比一般的会高几倍,而且它们更可能做出正确的决定,决策过程能够比较快速同时不需要你去纠正。

最重要的是,优秀的人是自我驱动的,还可以影响带动周围一批人。还有一点就是,他可能会做出意想不到的创新,这些创新对团队可能是革命性的变化。

接下来在团队构建方面,还有些要注意到。首先是不要怕比自己强的人出现,你作为技术管理者,本身就不应该是技术最强的。有能力的管理者,哪怕是不懂技术,都可以非常好地管理所有技术人员。

而这里面,如何甄别和筛选?试用期很重要的,要敢于及时淘汰不合格的人,让团队里充满正能量。试用期得过且过,往往会给团队带来很大的副作用。

要尽可能让团队技术统一,减少管理成本。之前我带的某个团队,大部分是 Java ,只有一个 php 。从我的角度,这位 php 同学也要培养,也需要上升空间。我花了很大精力了解和培养他,但事后来看这对于整个团队管理是非常不值得的,时间完全浪费掉了。

在团队规模大了以后,要构建有梯度的团队。必须有非常牛的架构师,也要有刚毕业有冲劲的年轻人做梯度。类似的,要需要培养优秀的副手,给自己留时间做更高层的事情。

管理要以身作则,也要真诚相待

我觉得,团队管理重要的是以身作则。在团队氛围上,要构建学习型团队,鼓励开源,甚至可以制定相应规章,增加一些财务上的奖励。

要真心真意对待团队成员和帮助大家。让团队成员明确,工作和个人成长要兼顾。对于太注重工作的人,要告诉他怎么样成长。对于注重个人成长而不把工作放在心上的人,要告诉个人品牌和职业素养非常重要,确保工作的前提下你的个人成长才更有价值。

尽量保持团队的工作量,忙起来以后就不容易多想了。即使我们处于平稳阶段,也要想怎样让产品更好、怎样做创新、怎样更高效,让团队忙碌起来。要让大家知道,做这件事情是为什么,而不仅仅是告诉他完成这件事。共同的目标很重要,大家认可目标,才会做得更好,才会主动从自己的角度考虑如何实现目标。

做事要目标导向,思考要有高度

我坚持做事情目标导向。设定目标之后,要有必胜的信念,这样就能够忽略过程中的一切困难,包括职位的边界、所谓甲方乙方区分之类的。

要多思考多分析。很多时候,你感觉走不下去了,其实就是一个很小的点在阻碍,分析出困难本质就很容易突破,而不是过早下结论说无法完成。之前,有同事问我,我要做这个,你看是不是可行?我评估后觉得不可行。同事告诉我其他公司就是这么做的。后来我仔细想了一下,确实是有办法绕过之前想到的限制。最后同事告诉我,那家公司其实也没有实现。当然了,多分析同行的产品也是很有帮助的。

最后一点,站在更高的位置思考。这样才能理解上级决策,然后从公司角度做出更有利的决定,甚至是从社会价值角度做出更好的决定。只有思考层次更高,你做出的决定才会更有高度。


站心网

技术学习要兼顾深度和广度夯实技术基础这么多年来,我面试了很多人。我越发感到「技术基础」非常重要。很多..

为您推荐

押注配送速度,Temu在韩国卷出新高度

文:习芮编辑:小戎出品:增长工场Temu 在韩国的“加码”还在继续。继年初开放韩国卖家入驻,2 月在韩国布局本地仓后,3 月 21 日,Temu 宣布与韩国乐天集团旗下物流子公司乐天全球物流签署长期租约,租用位于京畿道..

软件产品开发中常见的10个问题及处理方法

常见的10个问题#产品开发中常见的10个问题思维导图需求相关#1. 需求不明确#在日常工作中,需求来源于用户、老板、客户、竞品分析、业务部门、产品经理等,这些人或部门会提出需求,因为他们不是产品经理,提出的需求..

让别人舒服的程度,决定你的人生高度

1.李嘉诚的平易近人有人说,真正的牛人都是非常平易近人的。李嘉诚就是这样一个人。无论面对高官巨贾,还是普通众人,他都表现出平易近人的态度,不端架子,照顾每个人的情绪,让对方感到和风般的舒服。地产行业大佬..

一个提升运营/营销转化率的万能方法!

之前,笔者有分享过说我最喜欢的增长是可复制可持续的增长,它一般都会有三个关键过程:首先是小范围测试,低成本试错,也就是最小可行性验证,让ROI最大化。然后是把测试的最优结果整理为可执行的标准化化流程。前..

Java中String类常见的方法

以下介绍字符串常见的几个方法。介绍String类在 Java 中,String类是一个代表字符串的类,具有以下特性:不可变性:String对象一旦被创建就是不可变的,即它们的值在创建后不能被更改。任何对String对象的修改操作实..

.net 通过 HttpClient 下载文件同时报告进度的方法

通过 HttpClient 的 ContentLength 很多时候都可以拿到下载的内容的长度,通过 ReadAsync 可以返回当前读到的长度,将读取到的长度加起来就是已经下载的长度看起来很简单,于是直接给代码private static async Task ..

javascript 6种连接数组的方法和对比

在 JavaScript 中,有多种方法可以用来连接数组,以下是常见的几种:1. concat() 方法用于连接两个或多个数组,返回一个新的数组,不修改原数组。const arr1 = [1, 2, 3];const arr2 = [4, 5, 6];const result = arr..

.NET开源ORM FreeSql常见问题和解决方法

FreeSql 是一个功能强大的 .NET 开源 ORM(对象关系映射)工具,支持多种数据库类型并提供丰富的功能特性。以下是使用 FreeSql 过程中常见的问题及其解决方法:1. 数据库连接问题问题描述:无法连接数据库,报错提示..

js 数组方法 - 修改篇

js数组方法可分为三类:修改、访问、迭代。修改:改变原有数组访问:不改变原有数组,从原有数组中获取数据迭代:对数组的每一项进行处理,返回数据本文主要介绍数组的修改篇一、增加1、push()含义:在数组末尾添加..

sourcetree安装跳过注册方法

SourceTree下载提取码: ni9m 需翻墙或者破解注册当前只有Win的版本,Mac自行百度很多人用git命令行不熟练,那么可以尝试使用sourcetree进行操作。然鹅~~sourcetree又一个比较严肃的问题就是,很多人不会跳过注册或者..

.NET开发中常见的异常报错原因和解决方法?

在 .NET 开发中,常见的报错通常涉及代码编写、配置和运行时环境。以下是一些常见的报错类型及其解决建议:1. NullReferenceException原因:尝试访问空对象的成员。解决:在访问对象之前检查是否为 null,可以使用 C..

修改VisualSVN Server地址为ip地址,修改svn服务端地址为ip或者域名地址的方法

svn服务端搭建成功之后,地址太长很麻烦,想搞一个服务器专门做svn服务端,修改svn地址为ip地址无奈网上教程不靠谱,于是自己研究了下1.修改VisualSVN 的地址2修改地址并保存很多人不成功就在这里,点击确认之后复制..

Angular Mock 一个类的静态方法

理解 Angular Mock 和 静态方法在 Angular 单元测试中,Angular Mock 是一个强大的工具,它允许我们模拟和替换 Angular 的服务、组件和其他依赖项。而静态方法 是属于类本身,而不是类的实例的方法。它们可以直接通..

解决.NET JAVA PHP中写入及读取memcache中数据不一致的方法

解决.NET JAVA PHP中写入及读取memcache中数据不一致的方法。公司部分接口使用PHP开发,部分接口使用.NET开放,.NET使用redis,PHP使用memcache作为分布式缓存服务器,但是部分业务需要.NET读取memcache里的数据。m..

AutoMapper使用方法

什么是AutoMapper? 一些orm框架,在用到Entity的时候有一些开源代码用到了automapper,将数据对象转成DTO。比如在ORM中,与数据库交互用的Model模型是具有很多属性。而当我们与其它系统(或系统中的其它结构)进行..

.NET调试Windows服务的方法

很多朋友编写Windows服务的时候都会觉得调试很麻烦,甚至不知道怎么调试。有些人可能添加个windows窗体用按键触发相关方法或者靠打印日志调试,那么到底windows服务怎么调试呢? 怎么编写代码就不说了。就说调试吧,..

c# ThreadPool使用方法

ThreadPool类提供一个线程池,该线程池可用于发送工作项、处理异步 I/O、代表其他线程等待以及处理计时器。 线程池通过为应用程序提供一个由系统管理的辅助线程池使您可以更为有效地使用线程。一个线程监视排到线程..

WebClient上传文件方法UploadFile

测试环境 服务器端:Windows Server 2003,IIS6.0. 上传文件的代码: [csharp] view plaincopy在CODE上查看代码片派生到我的代码片 using (WebClient client = new WebClient() { Credentials = CredentialCache.De..

c#.net字符串处理方法

1.字符串比较 字符串.ComparTo(目标字符串) "a".ComparTo("b"); 2.查找子串 字符串.IndexOf(子串,查找其实位置) ; 字符串.LastIndexOf(子串) ;最后一次出现的位置 str.IndexOf("ab",0); 3.插入子串 字符串.Insert(..

C# Word转换成Pdf的方法

ASP.NET将word文档转换成pdf的代码。 一、添加引用 using Microsoft.Office.Interop.Word; 二、转换方法 1、方法 /// <summary> /// 把Word文件转换成pdf文件 /// </summary> /// <param name="sourcePath">需要转..

发表回复

返回顶部