※ [本文转录自 Tech_Job 看板 #1W2NU1DM ]
作者: wulouise (在线上!=在电脑前) 看板: Tech_Job
标题: [心得] 机械转软件工程师经验分享
时间: Thu Jan 21 20:45:46 2021
# 前言
想分享一下当初从进公司几乎不会写程式
到现在负责做软件的porting to Linux的经历
如果你想转软件工程师,最好先进到愿意让你写程式的公司
但是这不一定办得到,我底下分享一些自己做的功课
不想看心得可以直接跳到 # 自修建议
转这边是希望如果有什么地方写错
或大家觉得有更好方式,可以提出来讨论
# 个人背景
台大机械学士
硕士非CS EE ME
高中只摸过一下用C写的C++
大学只学过很废的VB忘记是不是.net
# 现职
工具机产业,领域特殊,大多使用C#与C++
对网络front end, backend不了解
工作大概就是UI跟算法处理
# 当软件工程师的心理准备
不是学会写程式,找到薪水不错的工作就结束了
学会之后仍然需要补充新的知识
想办法write better code,并理解没有best code
因为要写软件很简单,软件要会动也很简单
难的其实是写出来的东西有人愿意用
软件不是单纯写程式,而是写出客户要的东西
不论code再干净,东西不是客户想要的,就是浪费时间
(如果可以)花上一两天只是写prototype,确认是客户要的东西最好
over design跟premature optimization都要尽量避免
事前的沟通很重要,所以沟通(通灵)其实是很重要的一环
但不是所有公司都有办法让工程师沟通
不过以上都要痛过才知道,没痛过的人请跳过
# 通灵
当客户提出莫名其妙的要求时,猜得到他想要什么比较重要
啊对,通灵不是免费,应该要能反映在你的薪水上
或是找一家愿意付钱通灵的公司
# 自修建议
- Google能力
不知道怎么建议,但是如果你发现自己不太会google,练不起来
那真的不建议转软件工程师
- OS > memory multi-thread
可以参考清大周志远,目的就是还债
作业没做没关系,至少观念要听得懂
- Design Pattern
虽然一开始看不知道在干嘛,但是把前几个先看过
配上实际例子你会比较有感觉
最好是自己的烂code一直refactor,配上下面的TDD
推荐看head first design patterns,他的实例很多
- TDD
很重要,先有unit tests再写程式可以减少很多regression问题
不过没痛过的人不知道,可以先跳过
- Algorithm
这个非CS EE可能都没有从头练过,如果没有强烈要求可以慢慢来
我是工作有遇到的至少会弄熟,或是觉得做法有点烂再去查
当然纯软免不了刷刷leet code, 不过不是很建议从leet code开始
没写过的人挫折感其实很重,不过懂多了也会影响程式架构能力
- System Design
SOFT_JOB版应该很多人推荐过,这边就不多写
以上都念过之后,对软件工作会有新感觉
至少我觉得比之前懵懵懂懂的时候了解更多了,查资料也更准
- 英文 & 通灵
当你有一点程式基础后,下班有空可以逛逛stackoverflow
选一个你熟悉的语言开始回答新手问题,他可以锻炼两件事情
- 你如何理解不懂的人问的奇怪问题
- 有条理的整理你的回答
不过我累积一千多分之后就有点腻了...偶尔自己查到的问题再回而已
另一个方式是订阅一些有兴趣领域的英文digest,不一定要是程式
像是我会去NSwitch的reddit上去逛逛
# 书籍推荐
C++:
懂一点C++后,建议看Scott Meyers的Effective C++, 虽然写的时间很早
而且C++ standard都到20了,还是有很多值得一看的部分
其他书单很多,我贴个SO就好
https://stackoverflow.com/a/388282/4123703
C#: Head first, C#
Code:
Clean Code
Clean Architecture
The clean coder
中文: 无瑕的程式码 番外篇:专业程式设计师的生存之道)
这本书很薄,但是我看了很有感触,有做专案的人建议一看