# Setting goals for CS jobs The world of computer work is *very* broad, even without including hardware-based work (e.g., break-fix, cable-running, electrical engineering). ## Know What You Want All the rules of [setting goals for job-hunting](jobs-1_why.md) apply: know what you want, have a plan, make long-term goals. However, the tech world cares *much* more than most other industries about long-term awareness of what you want and the [latest industry trends](trends.md). Aiming for front-end [web development](computers-sofware-webdev.md) is a mostly different set of technologies and skills than developing [games](computers-software-gamedev.md) or building [hardware](computers-cpu.md). While you'll pick up many "soft skills" along the way that transfer to *all* tech, most hiring managers are asking for a list of specific technologies. There are [a very large range of roles to choose from](jobs-cs-list.md). You might want to crawl into an unimportant role somewhere to pursue [what you *really* want to do](success-1_why.md). The ideal place for this is with [dysfunctional companies](jobs-suck-cs.md): - Their company website isn't very [well-designed](engineering-design.md). - The company is vague about what they do or the value they add to anyone. - Watch for buzzword-heavy text (use [bullshit.js](https://mourner.github.io/bullshit.js/) to spot it easily). - Avoid the trend-chasing Big Tech corporations (like Google) and lean toward established, boring ones (like Oracle or IBM). The most important thing (tied closely to your [personality](personality.md)) is *enjoying* the work: - Most hardware/software diagnostics require knowing how to [resolve problems](fix-cs.md) with existing solutions. If you like following instructions to make customers happy, it's a great match for you. - For software development, you *must* love doing very hard logic puzzles alone in front of a computer for many hours. Try playing programming-based games (e.g., Spacechem, Factorio) to see if you can do it for fun. - If you don't like programming, the tech industry still has many support roles, but you still should understand the intricacies of [how computers work](computers.md) to function well in the industry. --- ## Get Specific To land a role beyond customer service or [technology] technician, you *must* know a highly specific technology. Contrary to some advice, your skill in that specific software, language, or platform has a *massive* impact on your job security and directions you can move in the future. Not all technologies give equal opportunities: - Using *ancient* languages (like Lisp or COBOL) is highly valuable for specific roles and "[soft understanding](https://trendless.tech/primitives/)", but there aren't many jobs for them. - Try to avoid dying stars (like Perl and Objective-C) unless you have something very specific in mind, since you'll have to learn new "syntax" later as it becomes more niche-focused over time. - Established old giants like Java and C++ won't go anywhere, but they're not as interesting as newer languages. They're best for job security, but they don't receive the [creative](mind-creativity.md) improvements other languages may receive. - Novel languages are *constantly* getting made (and you could even [make your own](computers-languages.md)), but you'll be learning a *lot* of them. Thankfully, there's [overlap](computers-programming.md). - Some roles are *highly* technical, but don't pay as well (e.g., [hardware engineering](computers-cpu.md)). Others aren't *nearly* as technical, but can pay very well for the work you're doing (e.g., [UX](engineering-design.md)). The breadth of what you must know varies on the type of work you're performing: - A vast majority of software roles are 1-skill roles, where you must know how to program in a [specific language](computers-languages.md) mixed with "implementations" of that language. - Hardware roles often require more variety to accommodate the various types of hardware you'll encounter, though hardware engineering can be deeply specific.\ - Most social roles require [social skills](people-3_respect.md) alongside the technical skills. - Senior-level work often requires a more varied set of skills, since it's both social and technical. There's also a trust factor worth considering in hunting for a role. - Generally, you'll want to get an entry-level job in just about any role connected to what you want, then work from there. - Contrary to any online video, you can*not* get into a six-figure job without prior experience, especially in a [trust-based](trust.md) domain such as [cybersecurity](safety-security.md) or [full-stack development](computers-programming.md). ## Start Learning There are *tons* of guides to learn any given technology, and most of them are free. Many of them cost a few thousand dollars. If you're self-starting [personality](personality.md) is self-starting enough, free courses like [freeCodeCamp](http://freecodecamp.org/) will give you the same quality educational experience. Over time, you'll be able to consult a "tech stack" for most issues, which is a story you'll keep adding to. As long as your [coding skills](computers-programming.md) keep expanding, your [success](success-1_why.md) will transition through a general trade-based pattern: ### 1. Coder Hobbyist programmer, probably not getting paid. "I made a few side projects, but I'm not working in the industry yet." ### 2. Junior Developer <1 year as a professional software developer, still learning how to get things done. "I'm still not sure about all the [debugging](computers-software-redesign.md) tools yet." ### 3. Intermediate Developer Starts thinking for themselves, but also believes they understand everything they'll ever need. "JavaScript is the only language anyone really ever needs." ### 4. Senior Developer Very skilled and knowledgeable where others tend to ask them for advice, and is keenly aware there are many things they *don't* understand. "I'm still not sure how NoSQL works and how it's useful, but I do see the limitations of the structure of [SQL](database.md)." ### 5. Lead Developer Has a clear enough understanding of how everything works that they communicate with other business units. "Yes, we can probably build that [API](computers-programming-features.md), but it'll take at least 2-3 months." ### 6. Tech Leader Assuming sufficient [people skills](people-3_respect.md), operates as a decision-maker and [manager](mgmt-1_why.md) for the team. ### Certifications There's no *end* to the certifications you could get, but either study for *exactly* what you want to get into, or certify in a general one until you know what you want to do: - CompTIA's A+, then Network+, then Security+ - (ISC)^2^'s CISSP - EC-Council's Certified Ethical Hacker (CEH) - Agile and Scrum - IT Infrastructure Library (ITIL) - Project Management Professional (PMP) - Specific to Big Tech: - Cisco's CCNA requires more nuts-and-bolts understanding of Cisco routers than CompTIA's Network+, and paves the way for a CCNP. - Microsoft (MCP, MCSE, etc.) - Amazon (AWS Certified Solutions Architect, AWS Certified Developer, etc.) If you're paying full-price, a college degree is prohibitively expensive relative to what you can learn online with free videos and courses, and the [habits](habits.md) from being a self-starter and [problem-solver](computers-software.md) are *far* more important than the [pedigree from a piece of paper](jobs-college.md). It doesn't really matter which courses, certifications, or tutorials you take as much as how well you apply it. Great tech work uses intuition to sift large piles of esoteric information to accomplish a practical purpose. However, your turnaround time until you can start working can be as short as a few *months* if you're dedicated and building passionately. Unfortunately, [tech trends](trends.md) are *constantly* moving, so only learn what you intend to use, as you need it. One important "soft skill" specific to the tech world is detecting when certain technologies are variations of other [established technologies](trends.md) (e.g., machine learning, natural language processing, and deep learning are all types of [AI](computers-ai.md)). This allows you to *rapidly* attach ideas together. Each domain has its own general software and tools. While [tech trends](trends.md) keep moving around and [open-source equivalents](legal-ip-floss.md) slowly take over, the core abstractions stay the same. One looming reality of the tech industry is constantly feeling you're less qualified than everyone thinks you are ([Impostor Syndrome](https://en.wikipedia.org/wiki/Impostor_syndrome)). But, nearly *everyone* is clueless about most tech-related matters except what they work with, which [allows us to work on what we want instead of learning everything just to interface with it](https://trendless.tech/understanding/). Accept that you'll understand 1-5% of anything in that domain and move on. --- ## The First Job As a new initiate to tech, you're a victim of the frustration paradox (you don't have the skills that would give you the skills you need). Breaking into any industry is hard, but the tech industry has a few additional troubles: - Technology is an *absurdly* broad field, with very little legitimate crossover between most skills: [front-end development](engineering-graphics.md) doesn't necessarily mean someone understands how a [database](database.md) works, [machine learning](computers-ai-ml.md) skills usually won't cross over to [game development](computers-software-gamedev.md). For this reason, managers look for a *very* specific set of skills. - Most larger tech companies require 3 [dialogue-based interviews](jobs-5_interview.md) for most software development roles, and *one* interview is already an inherently stressful experience. Further, [technical interviews](jobs-5_interview-technical.md) are a harrowing experience unique to the software industry. - Most managers in most tech companies simply aren't willing to invest the energy and time into a junior developer, so you're *very* low-demand, even if 1-2 years of experience would make them climb over themselves to get you on their team. To compensate for tech's odd standards, adapt from [the standard approach](jobs-2_goals.md): - Make your learning experience [as public as possible](jobs-3_image.md) to get recruiters' attention. - Interview *before* you're ready, since you'll *never* feel prepared enough. Carefully consider where you apply: - Apply to less competitive places like non-tech companies (e.g., a healthcare organization). - Apply to obscure places (e.g., not something big and established like Oracle or HP), especially if they're not offering many benefits (meaning other people in the industry won't be fighting for the role). - Connect with placement agencies, especially high-quality ones. They'll often give you a wide range of experience to help you learn basic skills and what you want. Finally, take *any* offer you get. You can reconsider your career again in 6 months when you're more experienced and know what to watch for. One myth that needs debunking: [AI](computers-ai.md) will *not* replace the software developer. It may make the programmer's life easier, but [the original aspects of human creativity](mind-creativity.md) are impossible to replicate with machine learning. Of course, you can always try what 1/4 of the people who learn to code do and [freelance](entrepreneur-4_freelancing.md) or build a [startup](entrepreneur-2_idea.md) to carve a path into the industry. If you're not sure if that's for you, try *working* at a startup to learn about it. ## Mentoring There's a fine tradeoff between asking questions as a junior developer (which can save you a *ton* of time) and figuring it out yourself. Generally, you have to learn-as-you-go, and this can be terrifying if you're not sufficiently supported by a good-quality senior developer. Get advice from a friend or family member who has tech industry experience. Or, in a pinch, you can still get plenty of wise advice from someone who has experience in *any* technical work industry. --- ## Set Realistic Expectations When you first start out, junior software development is a bit of a demotion, both in pay and status, if you have a few years of experience in something else. It's worth the sacrifice if it's something you want to do, but it might be disorienting if you're older than 25 or [in a management position](mgmt-1_why.md). The culture runoff from [FAANG](faang.md) corporations is *not* healthy. Many of them craft their [image](image.md) and [branding](marketing.md) to foster a cult-like admiration that implies their company (and other massive companies) is the pinnacle of a rewarding career. In reality, it's basically the same thing as working for any other [large organization](groups-large.md). Some places (like Amazon) are hellscapes that bleed you dry, others (like Microsoft) are mindless product mills, and a few (like Google or Facebook) will give mixed experiences depending on who's managing you. No job really has permanent job security, but tech workers have *zero* stability. The constantly changing technologies and industry changes, on *top* of natural changes from the world economy and geopolitical events, mean it's unwise to expect a role (or a [workplace culture](people-culture.md) you may grow to love) will ever last more than 2-5 years. At the same time, understand how valuable you are relative to the job market. In the dot-com era and post-COVID, managers were *desperate* for tech people, and would give any benefits they'd ask for. But, after the dot-com bubble burst or the 2008 market crash, managers could set whatever standards they wanted. The [trends](trends.md) cycle through this constantly. ### Remote Work Many office jobs can be remote work, but unless it's working with hardware on-site, tech jobs can *frequently* be work-from-home. Remote work has some non-negotiable benefits: - You usually get more flexible work schedules, and pretty much any work location you prefer. - The location gives you more autonomy and independence. - You can usually adapt your lifestyle even farther and become a digital nomad (i.e., live in any country that has internet access). - You're able to produce high-quality work, then stop for the day and spend more time with your family and friends. - No more [commute](autos.md). And, naturally, remote work has downsides: - It's harder to maintain a balance between work and personal time. - A spotty [internet connection](computers-sofware-webdev.md) can *destroy* productivity. - It's *much* easier to procrastinate and not get projects done on time. - When you have high-maintenance family and friends (e.g., [babies](parenting-babies.md) or [children](parenting-children.md)), it's harder to stay focused. - You'll have a harder time [making connections](people-4_friends.md) with your coworkers, which may deteriorate your [quality of life](mind-feelings-happiness-focus.md) if you're not proactively finding connections elsewhere. - Communicating with teammates is more about everyone maintaining high-quality [writing](language-writing.md) than [speaking](language-speaking.md), and much harder as a result. In other words, search for remote if you want more freedom, but look for in-person if you prefer a sharp segregation between work and personal life. --- ## Later On If you're experienced in the industry already, you may already have an idea of what you want to do: just don't stop learning, and keep on growing. There's plenty of discussion in the industry about only doing fun work, but the tech industry is *filled* with entitled, smart people who only do work they enjoy or will only do once (i.e., it can be automated). Unfortunately, [success](success-1_why.md) requires many situations where you *can't* optimize the work, and you'll probably only create [meaning](meaning.md) when you're willing to do what everyone else tries to avoid. If you're older than 30, expect [cultural pushback](trends.md) wherever you go. Your boss may be young enough to be your child, and ageism is a *very* real problem in the technology world. Look for little niches that can be *very* lucrative. Instead of competing against 100 other people with that skill set, you'll likely only compete against 10. Of course, most of your software development skills *will* become obsolete, and it becomes tedious having to re-learn [new syntax](computers-languages.md) every year or two. Most software developers (~60%, or ~3x the average for other industries) tend to move into roles like [tech management](mgmt-1_why.md) or something else completely unrelated to software development. Thankfully, your experience isn't useless. One soft skill that only comes through experience is knowing what you really want out of your work, which boils down to how well you prefer to be people-focused and how independent/team-based you want to be: 1. People-focused and independent: Technical support, Founder, Freelancer. 2. People-focused and team-based: Dev Marketing, Sales Engineer, DevRel, Technical Recruiter 3. Non-people-focused and team-based: R&D, Security Analyst, Data Science 4. Non-people-focused and independent: QA Engineer, No-Code Developer, Sysadmin In many ways, *you're* the largest protection against your misuse and abuse. It requires [examining contracts you consent to more carefully](people-contracts.md), [expertly handling conflicts](people-5_conflicts.md), and treating your employers less like overseers and [more like customers](entrepreneur-1_why.md). If you prefer, aim for part-time work [during the negotiation](jobs-6_negotiating.md), which you can usually do if the work is trivial enough for you to do it easily. Very often, you can get paid a bit less, but with more freedom to do what you want (which you're *not* getting paid for). Even if you *leave* the tech industry, don't lose the original [creative spark](mind-creativity.md) that provoked you into the work in the first place. If you want to sidestep the craziness of the theoretical abstraction machines, there's always engineering (especially electrical engineering), or you could try a data-heavy non-tech industry (such as [farming](horticulture.md) or [accounting](money-accounting.md)). --- ## Get Going After you know what you want, build it out and [go after it](jobs-3_image.md). ## Further Reading Stories: - [No CS Degree](https://www.nocsdegree.com/) - thousands of tech stories of people who didn't have a degree who got into tech - [Developer to Manager](https://devtomanager.com/) - stories of people who went from software developer to manager Roadmaps: - [Developer Roadmaps](https://roadmap.sh/)\ - [AI Expert Roadmap](https://i.am.ai/roadmap)\ - [Data Engineer Roadmap 2021](https://github.com/datastacktv/data-engineer-roadmap)