老家变化很大,从县升到市,街道、基建、路面,还有人,似乎都变得和以前不一样了。
Algorithm
本周选择的算法题是:Split a String in Balanced Strings。
use std::collections::HashMap;
impl Solution {
pub fn balanced_string_split(s: String) -> i32 {
let mut count_table: HashMap<char, i32> = HashMap::new();
count_table.insert('L', 0);
count_table.insert('R', 0);
let mut substr_counter = 0;
for c in s.chars() {
count_table.insert(c, count_table[&c] + 1);
if count_table[&'L'] == count_table[&'R'] {
substr_counter += 1;
}
}
substr_counter
}
}
Review
The End of Front-End Development
作者认为开发者不必担心被 AI 取代,举了几个例子,比如:
- GPT-4 演示的 demo 虽然可将手稿转化为 Web 页面,但它产出的 HTML 代码已然和当今前端开发者写的代码完全不同
- 一个完整的工程包含成百上千个文件,也不仅是代码文件,资源之类的文件也有很多,无论是管理还是 debug,复杂性极高
- 每一个 codebase 都是独一无二的
不过作者挺不厚道,前面刚说前端同学不要焦虑,后面又说如果有取代,那也是发生在后端同学身上。。。
- 在过去的 10 多年里,很多复杂性已经从服务器转移到客户端
- 公司通常希望他们的产品是定制的、独特的,是根据他们的品牌精心制作的。 相比之下,后端是不可见的(意思就是可以随便搞?)
- …
我觉得不对,或许是作者自身的技术栈受限,没有意识其中的复杂性。忽略这些观点,其他部分还是有共识的:
- AI 是增强人,而非取代人
- 要利用 LLMs 帮助自己学习
AI 的能力往后将进一步放大,那会不会有潜在的开发者担心这一点而无缘无故地放弃了动力呢?希望不会吧。
Tip
Rye,Flask 框架作者做的新玩具,一站式管理 Python 依赖的包管理工具。
Share
关于技术领导力
何为技术领导力?技术领导力重要吗?为什么需要?
个人和公司在本质上一样,都需要保持长期竞争力,对个人来说,技术领导力是:
- 尊重技术,追求核心基础技术
- 追逐自动化的高效率的工具和技术,同时避免无效率的组织架构和管理
- 解放生产力,追逐人效的提高
- 开发抽象和高质量的可以重用的技术组件
- 坚持高于社会主流的技术标准和要求
对技术领导力的体现为:
- 能够发现问题
- 能够提供解决问题的思路和方案,并能比较这些方案的优缺点
- 能够做出正确的技术决定
- 能够用更优雅,更简单,更容易的方式来解决问题
- 能够提高代码或软件的扩展性、重用性和可维护性
- 能够用正确的方式管理团队
- 创新能力
如何才能拥有技术领导力?大致分为这几方面:
- 吃透基础技术,基础技术是各种上层技术的基石
- 学习底层语言,越接近底层,越有助于更好的理解和思考
- 学习编程范式,有助于培养抽象思维,提高编程、程序运行效率
- 关注算法和数据结构,算法是编程中最重要的东西
- 了解计算机系统原理,推荐书籍《深入理解计算机系统》
- 了解操作系统原理和基础,推荐书籍《UNIX 系统环境编程》、《UNIX 网络编程》和《Windows 核心编程》,了解物理世界的“物理定律”
- 学好网络基础,推荐书籍《TCP/IP详解》
- 学好数据库原理,了解数据库访问性能调优的要点
- 学习基础技术架构
- 提高学习能力
- 好的基础才能提高学习能力
- 信息源要好
- 与高手交流
- 举一反三的思考,如对比不同语言之间的线程模型等
- 克服困难的决心
- 开放的心态,了解方案之间的利弊与优缺点
- 坚持做正确的事
- 提高效率的事
- 自动化的事
- 掌握前沿技术的事
- 知识密集型的事
- 技术驱动的事
- 严格要求自己
- 要有敏锐的技术嗅觉
- 强调实践,学以致用
- Lead by Example,不断实践,保持对技术细节的敏感度
总结为:
- 扎实的基础技术
- 非同一般的学习能力
- 坚持做正确的事
- 不断提高对自己的要求标准