Ask HN: Automation is going to affect our jobs soon, right?
So what strategies do you think are going to keep you relevant in the future?
Things like "no-code development platform" or NCDP will perhaps lessen the demand of web developers. Unreal Engine and Unity have maybe lessened the demand for game engine and graphics programmers. It might be wrong to extrapolate out of these 2 trends, but it looks like more and more software developer positions will become less demanded/requested as we're heading towards full automation. And the resulting jobs are going to be more and more boring. So you are going to configure something rather than code something up from scratch.
My strategy, albeit likely flawed, is:
- focus on fundamentals: so instead of learning a graphics API like OpenGL 2.1 or OpenGL 4.x, study the fundamental algorithms underlying hardware and software. IOW: write a rasterizer, a ray tracer from scratch with only the standard libraries of a given programming language. (E.g. write a pure C++ software rasterizer or ray tracer by only using the C++ STL. Then output the result into a simple image format like PPM.) I mostly ignore the naysayers here telling me that I am wasting my time reinventing the wheel and what not, but I actually really enjoy that process of learning why and how something works in the deepest levels.
- focus on the core subjects that will give you the most bang for your buck: linear algebra has haunted me throughout my studies, so instead of resisting it, embrace it. You can't escape linear algebra really, if you are doing computer graphics, neural networks (back-propagation), Fourier transforms, image processing, probability theory. It's everywhere, and it is the most useful subject for computer science majors IMHO. Then maybe algorithms and formal and non-formal languages like (C, Japanese etc.). Everybody speaks English nowadays, so why not pick-up a new (human) language?
What are your personal strategies? You're completely off the mark. First of all your fears are completely unfounded. Statistics are still predicting growth in IT and software development. And looking at how tooling has evolved, yes in some ways it is now a little easier to create a 1995 style website, BUT websites have become super complicated and now it is the full time job of somebody to work on just the front-end. A 2020 website still takes a lot of effort to produce, in fact definitely much more effort than a 1995 website. Secondly you mention a bunch of fields, some of which I have experience with. These more fundamental fields have little demand, and because of that the pay is relatively bad. If you go work at Intel writing NLA libraries using Fourier Transforms, you would be lucky to get paid market average salaries and certainly much worse salaries than doing generic SWE stuff at FAANG. And thirdly, honestly you won't be able to transition into these more technical fields because it is just too much of a steep learning curve. And nobody would hire you anyway. There's no shortage of graduates fresh out of uni with multiple semesters of theory, practical projects and internships. The actual way to prepare would be as always: maximize your salary and save as much as possible. Thank you a thousand times for your valuable input. :)
This shows me, that my "intuition" or rather "internal operating system" is flawed and needs to be recalibrated.
Yeah, then maybe the naysayers were kind of right telling me that I am wasting my time doing fundamentals.
However, I really actually enjoy it learning what is going on behind the scenes. Even if it doesn't make me "valuable" in the job market. I should perhaps do what everyone else does: investing, learning front end and APIs (or whatever is required in the market RN).
But your last sentence also resonated with me: "The actual way to prepare would be as always: maximize your salary and save as much as possible." That's for having a "psychological leverage/advantage" I guess. If you are not having money issues you will likely get rid of the "draining background processes" in your head and focus on more productive things.
So in other words FU money is always good. :) It's going to affect our jobs, but not like many people think. I imagine that it's not that crazy to think that some future software will auomate the design and implementation of, let's say, CRUD web apps... but by then the requirements of web apps would have changed: they would be more complex to the point that this automation software won't be able to deal with them, hence the need for human software developers. Rinse and repeat: automation comes but by the time it arrives, more complex requirements appear and the automation can't yet cope with it. > My strategy, albeit likely flawed, is: - focus on fundamentals: so instead of learning a
graphics API like OpenGL 2.1 or OpenGL 4.x [...] I agree on that we should learn and focus on fundamentals, but we also need to learn the specifics. So, from my poiint of view there's no shortcut. Example: let's say you want to design the infrastructure of some online services: you need to know the fundamentals of networking (NAT, subnets, firewalls, VPNs, etc.) but you also need to be proficient when it comes to use the tools you have available at the moment to implement your infrastructure (e.g., terraform, k8s, ansible, bash, etc.). These tools change from time to time (hence we need to keep learning all the time). One needs to have solid fundamentals and one needs to be proficient in ephemeral tools. It's tedious. "One needs to have solid fundamentals and one needs to be proficient in ephemeral tools. It's tedious." Thank you too for your insightful answer! Yep, OpenGL is quite a good example for an "ephermal" API. Now, I saw people either switch to DirectX 11 or they go the Vulkan/DirectX 12 route where it takes ages to render a simple triangle...
However, I would still argue that knowing how to implement fundamental rendering algorithms yourself (rasterization or ray tracing) gives you deep insight and hence more power to manipulate things (since you know how it all works under the hood). But to be "production ready"/"job market relevant" you need to learn these "ephermal" tools (APIs, frameworks etc.).
At this point I wonder who could render a simple triangle faster. Someone who knows only Vulkan/DirectX 12 or someone who knows the necessary algorithms and the math? What if someone knows both? I don't know, but at the end of the day a little insight on how stuff works under the hood won't hurt you at all. BTW: The things that prompted me to think this way (i.e. "automation will cause less and less demand for programmers") were HN posts like these: https://news.ycombinator.com/item?id=25540583
https://news.ycombinator.com/item?id=25540059 "https://www.appgyver.com/ - The world's first professional no-code platform, enabling you to build apps for all form factors, including mobile, desktop, browser, TV and others." I don't get this question. Automation is the job. We (mostly) don't code in assembly anymore because there are compilers. Your can say that writing high level code (merely "configuring things" in your parlance) is more "boring" than say, register hacks, but that's a bit shallow. (Also, something something leaky abstractions making the whole "it'll only be configuring things!" kind of a moot point.) Consider programmers from the 80s/90s or early 00s. The ones that still have jobs today are the ones that have kept up with trends and adapted, or otherwise had the luck of being at a place that hasn't. It's the same for the future. Stagnate on old tech, have your career die on the old tech. Good point! So my strategy with the fundamentals are a dead end in other words.
I would therefore rephrase your last sentence to: "Stagnate on old methods, die on old methods." My focus on fundamentals was really not productive. The people that I referred to as "naysayers" were right. I was wasting my time learning about fundamentals and stuff aka reinventing the wheel to understand why something works. Hmmm... I need to reflect on my old perceptions and views now and error correct or rather "bugfix" my brain. Thank you too! :) Edit: to clarify what my goal was in all this:
Basically, if you understand or rather know something deeply you have "power" (as knowledge will give you power). But again this way of thinking seems to be deeply flawed and employers don't appreciate it apparently. Since you're already technical, I'd focus on gaining domain knowledge. What business problems are you trying to solve and what technologies are required solve them? Let that be the driver for the technologies you need to learn.