请问HN:软件工程师是否应该有研究经历?
我问这个问题是基于我个人的情况,而不是关于软件工程的普遍陈述。
我是一名计算机科学专业的高年级学生,专注于机器学习。我的大学在机器学习方面没有应用研究,因此在学校学习机器学习(课程/研究)几乎是通往理论/算法学术界的单程票。
去年,我突然意识到我擅长(并且喜欢)通过连接系统中的组件来解决问题,而不是将问题调整到可以应用某些数学法则的形式。具体来说,我非常喜欢与艺术家、UI/UX设计师、前端开发者和非技术人员合作,作为他们的后端支持。我为机器学习工程师构建数据管道,为UI/UX/前端设计师提供后端支持,为生物医学工程研究人员构建机器学习管道,并为艺术家开发投影/图像软件。
我算是一个通才,对工具没有特别的偏好,广度大于深度。这让我觉得这就是软件工程的本质。
话虽如此,我确实喜欢了解事物的运作方式,并且对阅读数学有一定的耐受力。这听起来很书呆子,但我喜欢推导诸如梯度下降的收敛性等内容,也很享受实分析课程。我还非常喜欢Nand2Tetris(一个开源课程,教你如何从NAND门构建一个最小计算机,并将面向对象语言编译成二进制)。看到过去人们做出的优秀设计选择,对我来说是极其优雅的。我觉得这些在软件工程中常常被低估。
现在,我有机会与我的强化学习教授合作,他在顶级会议上发表的记录非常出色。我对此感到非常犹豫,因为他的研究方向是强化学习算法,而我在之前的一个算法研究项目中有过非常糟糕的经历(我对我们在做什么只有模糊的了解,远远不足以做出贡献)。我同时在申请工作和硕士项目,我几乎可以肯定如果毕业后进入行业,我将再也不会接触这个主题。
我有两个问题:
1) 我听起来像你们认识的软件工程师吗?你认为我适合什么其他角色?
2) 我是否应该抓住这个机会,单纯为了获得研究经验?你认为这对我作为机器学习的应用从业者跟上趋势是必要的吗?
P.S. 这是我第一次在HN发帖,这似乎比一般的Ask HN帖子要长得多。我不知道这样是否合适。如果我应该去其他子版块,请告诉我。
如果你读完这些内容,非常感谢!
查看原文
I am asking this question for my personal circumstances --- not a general statement about software engineering.<p>I am a CompSci senior focusing on ML. My university does not have applied research in ML, so doing ML in school (classes/research) is pretty much a one-way ticket to the theory/algorithms side of academia.<p>Last year, I had the epiphany that I am good at (and enjoy) solving problems by connecting components in a system instead of finagling a problem into a form where we can apply some mathematical law. Specifically, I have greatly enjoyed working with artists/UI/UX/frontend/non-tech people as their back-end counterpart. I have built data pipelines for MLEs, back-end for UI/UX/frontend designers, machine learning pipeline for BME researchers and projection/imagery software for artists.<p>I am pretty generalist and tool-agnostic, with more breadth than depth. That feels like software engineering.<p>That said, I do like to have an understanding of how things work and I have a decent tolerance for reading math. This is a really nerdy thing to say but I enjoyed deriving stuff like the convergence of gradient descent and I enjoyed real analysis. I also really enjoyed Nand2Tetris (open source course teaching you to build a minimal computer from NAND gates + compiler from OOP language to binary). It's extremely elegant to me, seeing the great design choices people made in the past. I feel like these are underappreciated in software engineering.<p>Right now, I have an opportunity to work with my RL professor, who has an amazing track record publishing at top conferences. I am really on the fence because his research is in RL algorithms and I had a very bad experience in my last algorithm research project somewhere else (I had a vague idea of what we were doing but nowhere near enough to make contributions). I am concurrently applying to jobs and Master's and I am pretty sure I will never touch this topic again if I go into industry after graduation.<p>I have these two questions:
1) Do I sound like the software engineers you know? What other roles do you think I am a good fit for?
2) Should I take this opportunity simply for research exposure? Do you think this is necessary in helping me keep up with trends as an applied practitioner in ML?<p>P.S. This is my first time posting on HN and this seems a lot longer than the average Ask HN post. I don't know if that's appropriate. Please lmk if I should go to a subreddit instead.<p>Thanks in advance if you read all that!