读程序员的制胜技笔记01_入门

程序员这样优化简历,一投制胜 为什么你投十份简历,只有一两家公司约你?又或者为什么你每投一份简历都能获得面试机会?最根本的原因,就是…… 阅读详情

1. 在实战中,什么最重要

1.1. 工作产出相当重要

1.1.1. 通常没有人会真的关注你的那些优雅设计、精妙算法,或者是高质量代码

1.1.2. 你的同事才不想优化、维护你的代码,只盼着你的代码能够运行,并且容易理解、维护简单

1.1.3. 他们关心的只是你能在规定的时间里出多少活

1.1.4. 团队的总产出要比团队中的任何一个人的产出都重要

1.2. 设计非常重要

1.2.1. 首先要有一个粗略的想法,其次是设计

1.2.2. 好的设计不一定非得摆在台面上,也可以保存在你的脑海里

1.2.3. 好设计模式或好算法能提升你的产出

1.2.3.1. 不能提升产出的东西就是没用的东西
1.2.3.2. 几乎一切都可以被赋予货币价值,所以你的一切行为都能够用产出来衡量其价值

1.2.4. 可以用糟糕代码来获得高产出,但仅限于项目不需要进行产品迭代的情况

1.2.4.1. “屎山”(糟糕的代码)

2. 实战程序员

2.1. 行规,即某个行业里最重要的知识精华

2.2. 微软在招聘时通常招两种人

2.2.1. 计算机科学专业的应届毕业生

2.2.2. 软件开发领域拥有丰富经验的业界专家

2.2.3. 如何处理模糊性,是微软招聘人员时面试的核心问题之一

2.3. 非科班出身的程序员

2.3.1. 缺少理论学习和理论在日常编程工作中的正确运用经验

2.3.2. 经过长时间的积累学会了有用的算法

2.4. 科班大学毕业生

2.4.1. 理论知识丰富,但是缺乏实践

2.4.2. 有时也缺乏对自己所学知识的质疑态度

2.4.3. 在学校里,你不是根据知识的重要性来学习,而是跟着人家设计的路径来学习

2.4.4. 你不会知道,某些知识在竞争激烈的行业中会有多大用处

2.4.5. 时间不等人,按部就班地顺着时间线学习是不现实的

2.4.6. 经过长时间的积累体会到再好的理论在实践中也常常会有不管用的情况

2.5. 实战程序员

2.5.1. 他们所拥有的那些业界经验

2.5.2. 被提出无理要求的老板“折磨”出来的

3. 杰出实战程序员

3.1. 善于沟通,能够提出有建设性的反馈,同时也能虚心接受别人的意见

3.2. 懂得质疑

3.2.1. 常常会自省,并质疑那些被广为接受的观点

3.2.2. 对这些观点的解构能够让你看得更清楚

3.2.3. 批评一门技术并不代表这门技术没有用处

3.2.4. 技术批评能扩大你的眼界,让你能够鉴别出在某些应用场景中更合用的技术

3.3. 结果驱动

3.3.1. 结果导向

3.3.2. 为了得到结果可能意味着牺牲代码的质量、优雅性和技术追求

3.3.3. 你要时刻反思自己在做什么,为了谁在做

3.3.4. 牺牲代码的质量并不意味着牺牲产品的质量

3.3.4.1. 如果你测试得当,并且需求写得非常明确,你甚至可以用PHP去写

3.4. 高产出

3.4.1. 有些技术是可以从别人的经验和“血泪史”当中学到的

3.4.2. 你学到的那些本领能让你写出更简练的代码,更快做出决定,这会尽可能让你少背一些“技术债”,并且会避免你以后花好多天来努力搞明白半年前你写的代码到底是一堆什么东西

3.5. 接受复杂性和模糊性

3.5.1. 复杂性是可怕的,但是模糊性更可怕

3.5.1.1. 因为它甚至会让你不知道该怕到什么程度,于是就更害怕了

3.5.2. 可以将那些看起来复杂到无法入手的问题,分解为一个个更便于管理、复杂度更低、更简单的小问题

3.5.3. 你的思路越清晰,就越能解决未知的问题

4. 现代软件开发存在的问题

4.1. 软件开发世界中充满了你不愿意看到的意外

4.2. 凡事要质疑、反思,这是有价值的

4.3. 技术繁多

4.3.1. “left-pad”的库,其作用仅仅是给字符串末尾添加空白字符

4.3.2. 由于“银弹”谬论,我们总在不断追求最佳技术

4.3.3. 大多数技术都是权衡利弊,找出折中的方案,而不是生产力的助推火箭

4.3.4. 提高效率靠的是你对这项技术的熟悉程度和应用技巧,而不是你使用的技术本身

4.4. 现代软件开发由范式驱动

4.4.1. 导致了软件开发的保守主义

4.4.2. 面向过程编程

4.4.3. 结构化编程

4.4.4. 面向对象编程

4.4.5. 多层架构的应用(n-tier application)

4.4.6. 胖客户端,瘦客户端,泛型,MVC、MWM和MVP

4.4.7. 响应式编程(reactive programming)

4.4.8. 异步编程

4.4.9. LINQ那样拥有模式匹配和不变性概念的函数式编程语言

4.5. 科技黑箱

4.5.1. 就像汽车,之前人们还可以靠自己来修理,如今发动机越来越高级,引擎的金属盖如同盖在法老坟墓之上,谁要打开它,就会被诅咒

4.5.2. 如今的技术比二进制代码的逆向工程还要难懂

4.5.3. 无条件信任某个包及其生态或者各类框架是很容易出现大问题的

4.5.4. 焦虑是因为不了解,而不是不能够

4.5.4.1. 勇于“开盒”,了解其中的细节,对于你怎样使用“盒子”也是一样的
4.5.4.2. 你真的没有必要阅读全部代码,或者浏览厚达千页的理论书,但至少应当明白某部分的功用,以及它如何影响你的项目

4.6. 代码开销

4.6.1. 框架和库是有用的抽象,通常能帮我们减少开销

4.6.2. 不能把所有决策都推给框架来定

4.7. 自扫门前雪

4.7.1. 程序员只关注自己的技术栈,对支撑这些技术栈的知识漠不关心

4.7.1.1. 饭都吃不上,哪有时间去学习呢?
4.7.1.1.1. 开发者的吃饭难题

4.7.2. 了解特定技术、库的工作原理,依赖关系是如何工作和连接的,可以让我们在写代码的时候做出更好的决策

4.8. 憎恶重复

4.8.1. 你的工作时间越少越好,避免重复的、无脑的工作

4.8.1.1. 比如复制、粘贴,或是为了做一些小更改而从头编写只有少部分不同的代码

4.8.2. 不是所有的“打杂”都没用

4.8.2.1. 复制、粘贴有时是有用的,虽然很多人对它有很深的成见,但是在某些方面,将它们运用好了,甚至会比你之前学到的最佳实践更加有用
多视图学习 (Multi-View Learning) 多视角/多视图学习(Multi-view learning)是陶大成提出的一个研究方向。我们都知道,在机器学习中样本可以用不同的特征(如图片可以用LBP、SIFT等特征)来表示,或者从不同的角度进行观察(如从前后左右观察一个对象),甚至是采用不同的传感器来观测(如RGB摄像头,Depth摄像头),这些不同的观测手段、角度或特征在多视角学习中称为“视角”。多视角学习通过对不同的视角进行统一分析和研究,希望能够得到更好的分类或聚类等等的效果。 阅读详情

相关推荐

InsightFace实战:如何在树莓派上部署轻量级人脸识别系统(附完整代码)

本文详细介绍了如何在树莓派上部署基于InsightFace框架的轻量级人脸识别系统。通过硬件选型、环境配置、模型优化(如MobileFaceNet)及完整代码实战,指导开发者构建本地化、低功耗的智能应用,如智能门铃,并提供了性能调优与系统服务化的进阶技巧。

weixin_29043895的博客 350

读程序员的制胜技笔记15_读后总结与感想兼导读

读后总结与感想兼导读

lyingSeven的博客 181

VGA系列之一:VGA显示网络图片

VGA系列之一:VGA显示网络图片VGA系列之一VGA显示网络图片 1 如何用FPGA实现VGA显示 2 网络图片和VGA显示有何区别 3VGA如何显示图片

善良の一休君的博客 1万+

程序员这样优化简历 一投制胜

《花千骨》一剧,白子画为什么收花千骨为徒? 《琅琊榜》中,梅长苏为什么选靖王而弃太子、誉王? 《泰坦尼克号》里,杰克和露丝为什么会一见钟情? 王子基特为什么会选择灰姑娘辛德瑞拉? 这些问题乍一看似乎和程序员找工作没什么关系,但其实,内在的道理都是相通的,搞明白这些问题,就能清楚下面的问题: 为什么你投十份简历,只有一两家公司约你?又或者为什么你每投一份简历都能获得面试机...

dong0079432的博客 240

Simulink+Simscape多体仿真:六自由度Stewart平台动力学建模全流程

本文详细介绍了使用Simulink和Simscape Multibody进行六自由度Stewart平台动力学建模的全流程,涵盖从CAD模型导入、运动学逆解计算到实时控制系统的设计。通过MATLAB/Simulink与Simscape的协同工作,实现高保真度的并联机器人仿真,适用于飞行模拟器、精密加工等高精度领域。

r2s3t4的博客 484

【阿里云大模型高级工程师ACP习题集】2.4 自动化评测答疑机器人的表现(⭐️⭐️⭐️ 重点章节!!!)

【摘要】这是我精心整理出对应的习题集,里面足足有 30 道题目,从基础概念到深度拓展,全方位覆盖章节重点、难点。不管你是想检验自己的学习成果,还是想针对薄弱环节进行强化训练,它都能完美适配!

davidkorhenn的博客 2477

B站黑马程序员pink老师前端课程学习笔记_01 HTML5

本篇博客为B站对应课程的学习笔记,跟实际视频ppt内容有一定差异,欢迎一起交流学习。 课程地址:https://www.bilibili.com/video/BV14J4114768

PancrasG的博客 4048

别再死记公式了!用HFSS/CST手把手教你仿真一个2.4GHz WiFi的PIFA天线(附参数调试技巧)

本文详细介绍了使用HFSS和CST仿真软件设计2.4GHz WiFi PIFA天线的全流程,包括建模准备、分步操作指南和参数调试技巧。通过可视化结果和实战案例,帮助工程师快速掌握天线设计的关键参数优化方法,提升辐射性能和工作效率。

weixin_31682031的博客 331

程序员这样优化简历,已投制胜

特别说明: 本文写于2015年11月,当时我在找工作,据此优化简历,每投必中。当时我还写了求职相关的其它文章,发布在微信订阅号“程序视界”,比如大龄程序员的未来在何方、35岁程序员的独家面试经历等。 文章特长,特考验耐性,特冲击三观,特消耗时间和精力,特容易造成心理压力,请先深呼吸三次再往下看。 求职季到了,我后续会在订阅号“程序视界”发布一系列求职相关的文章

qq_38695918的博客 1031

微信小程序使用TCP通信

最终目的:在微信小程序内实现对局域网发起TCP通信实现步骤:建立TCP服务 + 小程序发起通信。

Big_YiFeng的博客 5611

UE实现贴地线(SurfaceLine)效果

UnrealEngine实现贴地线效果

专注GIS开发 4572

鹅厂写码13年,我总结的程序员高效阅读方法论

????目录1 审视读书行为本身2 技术书籍3 审视我们自己4 智慧上一篇文章《10本拍手叫绝的编程好书》中,我们为大家推荐了 10本适合国庆长假阅读的经典好书。有读者朋友表示书都很好,但自己读书的时候总感觉效率不高,输入不多。为此,我们特别向腾讯内部的知识分享达人做了本期约稿,为大家分享一些他总结的程序员高效阅读经验,帮助大家提升获取知识的能力。//////////偶然看到一个问题:“坚持读书挺...

QcloudCommunity的博客 1208

【YOLOv8科研级优化】集成YOLOv10的SCDown采样模块,让你的模型下采样更高效更精准

打开确保模型解析器能识别SCDown模块。通过将YOLOv10的SCDown模块集成到YOLOv8中,我们实现了一个“细节保留+高效下采样”的目标检测模型。这个改进不仅在工程上能提升小目标、细粒度场景的检测效果,更在科研上提供了“分阶段下采样”的创新思路——这种思路可以延伸到其他卷积网络(如ResNet、MobileNet)的下采样层改进中,帮你在论文中打造独特的研究点。

m0_71589036的博客 136

代码炼金术 -01 最牛逼程序员的逻辑是什么?

   最牛逼程序员的逻辑是什么? 牛逼高人讲过的,人和人不能比较是真的。 不能跟哪些位置太高的人比较,确实他们都太远了。可以跟对面的隔壁老王进行比较。 他代码写的好,为什么? 你why 代码write的不如他的好。他能胜任的工作,为什么你胜任不了? 一方面可能是你觉得,他入行时间比你早。但是入行早,不一定成为绝对优势, 也可以因为其他因素改变,犹如国学风水之师傅。不就是典型例子吗? 代码行业为啥不一样?完全一样。  入行时间早,只能说占据了基础知识点的优势。就是基础知识点覆盖的相对多...

chenggong9527的博客 607

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

程序员必备能力——晋升之道

程序员必备能力——晋升之道 从我认识的程序员中,包括我的团队中,有不少很久都没有晋升过。他们维护着已经再熟悉不过的模块,能迅速定位bug所在代码行数,在他们当中有部分人热爱coding,享受debug带来的成就感,但是绝大部分的程序员并不是他们热爱,而更多的是被迫。 你们有认识这样的人吗?我想你肯定已经在点头了,这种情况竟然出乎意料的常见。如果你不想在这条死胡同里终老,你就应该主动点。 标题01提升自我价值,提高自身核心竞争力 在2017年发布的《中美毕业生就业对比研究》报告中,我们可以发现就业总量和就业

qq_45131570的博客 226

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

程序员如何避免加班

工作和生活,就像输入和输出,只有输入没有输出,能量就不会守恒,生活得好也能助益于工作。说到底,工作是为了生活,享受生活的同时也会发现生活的问题,工作的方向也会逐渐明朗。它又像《学记》里的“教学相长”,也像“读书和写作”的关系,两者之间是互为补充的关系,而你要做的就是“两条腿”走路,平衡好两者。

惜福的专栏 845

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

上一篇: 2023年10月随笔之婚宴趣事多
下一篇: 读程序员的制胜技笔记02_算法与数据结构
躺柒
博客等级 码龄4年 7004粉丝 1317原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值