不要没完没了地研究
在开始一个项目之前,进行没完没了地“研究”会导致项目容易拖延 - 阅读和探索可用的选项(研究)会很有趣,花一点时间做一点这样的事情会很好,但你也可能永远被困在这样的事情中。当有疑问的时候,只需选择一个已经开始了一段时间并且最受欢迎的项目。使用这个项目,如果它很受欢迎,它可能有一个像样的社区,你可以向它学习,如果它存在一段时间,它可能会更稳定(或者至少它会更充实,不太可能被抛弃)。
计算机科学
我真的很喜欢学习计算机科学,并且认为这可能仍然是获得最大机会的最佳途径(尤其是如果你像我一样住在郊区,周围没有很多软件人员的话)。如果可能的话,我认为尝试学习最好的计算机科学课程是很好的。网上也有很多好的课程,但是如果你的生活和我高中时一样,在家里很难真正利用这些。
编程面试
如果说学习是获得好成绩的天然解决方案,那么做好一个酷项目编程就是在编程面试中表现出色的天然解决方案。要想在竞争激烈的公司的编程面试中处于有利地位,你需要对leetcode网站上和Cracking the Coding Interview这本书中提到的编程问题非常熟悉。编程面试需要大量的实践,并且它是一个可以让自身能力得以发展的独特技能。
你可以获得一个完整的计算机科学学位,但仍然不知道如何编程。你也可以获得一个计算机科学学位,但仍然不能通过编程面试(这两个可能是默认情况)。学会编程,学会在编程面试中做得更好,你需要自己集中精力在这些方面。计算机科学学位可能有助于一些方向和重点项目(Lambda School可能更适合培养编程人员,也许最终会更适合),但你必须自己掌握很多这方面的知识。
角色和职位
除了“软件工程师”之外,还有很多不同的角色。SRE(网站可靠性工程师)关注代码运行的基础设施,并为其编写软件。内部工具和devops开发人员专注于自动化软件构建和测试所需的所有工具(阅读The Phoenix Project,了解一个有趣的故事来说明这一点)。除此之外,有些角色和用户有密集的交互,如开发者支持工程师(developer support engineer)帮助用户处理API、解决bug或配置问题)。还有些角色重点关注游戏引擎,有些角色重点关注虚拟现实或计算机图形。有些角色则关注编写新的计算机语言和新的编译器。
在所有这些角色中,根据使用的产品和使用的为解决新问题而创建的新工具的不同,有更多的专业化。计算机安全也是一个有趣的领域,对此领域我所知不多,并且我认为ESR在他的文章中对此是持轻视态度的,但我认为它也是一个很难开始的地方,因为它需要对事物是如何工作的已知理解的基础上才能知道事物是如何被打破的。我记得我很早就开始读Hacking: The Art of Exploitation这本书,但当时我对这个领域还是一知半解。
当然,你也可以创办自己的公司,建立自己的创始人角色。