Goal-Setting: What Do You Want In CS?

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 apply: know what you want, have a plan, make long-term goals.

However, long-term awareness of what you want and the latest industry trends are much more important in the tech world than most other domains. Aiming for front-end web development is a mostly different set of technologies and skills than developing games or build hardware. 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.

You might want to crawl into an unimportant role somewhere to pursue what you really want to do. The ideal place for this is with dysfunctional companies:

  • Their company website isn’t very well-designed.
  • The company isn’t very clear about what they do or the value they add to anyone.
  • Watch for buzzword-heavy text (use 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) is enjoying the work:

  • Most hardware/software diagnostics require knowing how to fix problems 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 to function well in the industry.

Job Titles

There are many types of tech industry roles. Most of them pay well, but have completely different scopes of technical expertise. Most of them require programming, but not all of them require coding.

To anyone who notices, these are not mutually exclusive roles, and they bleed into each other quite often.

Completely marketing/design-based (for non-tech people who still like working with tech people):

  • Content Managers write and proof content all day.
    • Social Media Manager monitors and creates social media content all day.
    • SEO obsesses about keyword optimization.
  • Growth Hackers run reports on marketing numbers and find ways to make companies scale.
    • Developer Relations (DevRel) is a more human-relatable growth hacker.
  • Digital Marketing Manager and Content Strategist are some hybrid of all the above.
  • QA (Quality Assurance) Specialist tests to make sure things are high-quality.

Fiddling with the UX (for people who understand how people think):

  • Information Architect manages the UX behavior flow from a psychology angle.
  • UX Designer manages the UX behavior flow from a design angle (wireframing, prototyping, mockups, and tracking user flow).
  • UI Designer focuses strictly on the development side of the design.
  • Interaction Designer prototypes data.
    • Web Analytics Developer tests and optimizes web interfaces.
    • Accessibility Specialist focuses on usability for everyone, especially disabled people.

Front-end development (for those with great visual memory):

Back-end development (for people focused heavily on concrete facts and data):

  • Back-End Developer or Server-Side Developer makes stuff for front-end developers (databases, APIs, core logic).
    • Backend Engineer focuses on all aspects of back-end systems.
  • Software Developer creates software.
    • Frameworks Specialist uses various existing frameworks to create web apps.
    • [Framework/Language] Developer works specifically with that language/framework.
    • Mobile Developer optimizes code for mobile devices, often specializing in Android or Apple.
    • Desktop Application Engineer builds code for PCs and laptops, though there aren’t as many as there were.
  • Search Engineer designs algorithms for searching large amounts of data.
  • Junior Developer is new at making code.

Both-end development (for experienced developers):

  • Full-Stack Developer can do both front-end and back-end development.
    • DevOps Engineer can oversee a software project entirely from front to back.
    • Game Developer designs games.
  • AR/VR Engineer designs VR-based implementations.
  • Web Developer does a bit of everything related to the internet, and their work specializes into either Front-End or Back-End.
  • Technical Writer describes technical information a user or developer would need to know.

System planning (for people who understand distributed systems):

  • Business Systems Analyst figures out what technology works best for specific situations.
    • Technical Account Manager maintains a technology-based relationship with the customer.
  • Data Analyst figures out existing trends in data.
  • Systems Engineer “deploys” database technology.
  • Systems Architect designs systems.

Maintaining things (for those who prefer routine):

  • Systems Administrator runs updates and makes sure everything is running correctly.
  • Database Administrator maintains the computer’s databases.
  • Help Desk Associate tells customers how to do basic computer diagnostics.
  • [Hardware] Technician makes sure all the hardware on [Hardware] is running correctly.

Protecting things (for those who prefer enhancing safety):

  • Cybersecurity Engineer designs ways to protect computers.
  • Security Researcher finds new vulnerabilities before hackers do.
  • Cybersecurity Specialist verifies that computers are safe.
    • Cybersecurity Analyst spends lots of time making really sure that computers are safe.
    • Security Operations Center (SOC) Analyst makes sure computers are safe.
  • Penetration Testeracts like a hacker before the hackers get to a system.
    • Vulnerability Analyst checks for vulnerabilities.
  • DevSecOps does everything to protect computers.
  • Security Architect makes sure organizations‘ computer systems are safe enough.

Severe math roles (for geeks who like math):

Managing people (for people who work well with other people):

  • Chief Technical Officer (CTO) makes decisions about all the technology portion of the organization.
  • [Role] Managerdirects a team to get stuff done.
    • Product Manager decides how a product should be designed (product roadmaps, competitive analysis, analyzing product features, etc.).
    • Technical Lead directs a group of developers.
  • [Department] Manager runs a specific department of employees.
    • IT Project Manager guides employees through IT projects.
  • [System] Project Manager uses that system’s methodology.
  • Technical Recruiter tries to get qualified people in front of the [role] managers.
    • Developer Evangelist is a recruiter for a specific company.

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 huge impact on your job security and directions you can move in the future.

Not all technologies give equal opportunities:

  • Using very old languages (like Lisp or COBOL) are highly valuable for specific roles and “soft understanding“, 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 improvements other languages may receive.
  • Novel languages are constantly getting made (and you could even make your own), but you’ll be learning a lot of them. Thankfully, there’s overlap.
  • Some roles are highly technical, but don’t pay as well (e.g., hardware engineering). Others aren’t nearly as technical, but can pay very well for the work you’re doing (e.g., UX).

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 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 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 cannot get into a six-figure job without prior experience, especially in a trust-based domain such as cybersecurity or full-stack development.

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 is self-starting enough, free courses like freeCodeCamp 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 keep expanding, your success will transition through a general trade-based pattern:

  1. Coder
    • Hobbyist programmer, probably not getting paid.
    • “I made a few side projects, but aren’t 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 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.”
  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, but it’ll take at least 2-3 months.”
  6. Tech Leader

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 from being a self-starter and problem-solver are far more important than the pedigree from a piece of paper.

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 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 (e.g., machine learning, natural language processing, and deep learning are all types of AI). This allows you to attach ideas together very quickly.

Each domain has its own general software and tools. While tech trends keep moving around and open-source equivalents keep arising, 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). 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. 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 doesn’t necessarily mean someone understands how a database works, machine learning skills usually won’t cross over to game development. For this reason, managers look for a very specific set of skills.
  • Most larger tech companies require 3 dialogue-based interviews for most software development roles, and one interview is already an inherently stressful experience. Further, technical interviews 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:

  • Make your learning experience as public as possible 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 will not replace the software developer. It may make the programmer’s life easier, but the original aspects of human creativity 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 or build a startup to carve your own 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.

The culture runoff from FAANG corporations is not healthy. Many of them craft their image and branding to foster a cult-like admiration that implies their company (and other huge companies) is the pinnacle of a rewarding career. In reality, it’s basically the same thing as working for any other large organization. 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 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 cycle through this constantly.

Remote Work

Many office jobs can be remote-work, but tech jobs can frequently be work-from-home unless it’s working with hardware on-site.

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.

And, naturally, remote work has downsides:

  • It’s harder to maintain a balance between work and personal time.
  • A spotty internet connection 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 or children), it’s harder to stay focused.
  • You’ll have a harder time making connections with your coworkers, which may deteriorate your quality of life if you’re not proactively finding connections elsewhere.
  • Communicating with teammates is more about everyone maintaining high-quality writing than speaking, 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 prima-donnas who only do work they enjoy or will only do once (i.e., it can be automated). Unfortunately, success requires many situations where you can’t optimize the work, and you’ll probably only create meaning when you’re willing to do what everyone else tries to avoid.

If you’re older than 30, expect cultural pushback 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 skillset, 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 every year or two. Most software developers (~60%, or ~3x the average for other industries) tend to move into roles like tech management 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, expertly handling conflicts, and treating your employers less like overseers and more like customers.

If you want, aim for part-time work during the negotiation, 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 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 or accounting).


Get Going

After you know what you want, build it out and go after it.

Further Reading

Stories:

  • No CS Degree – thousands of tech stories of people who didn’t have a degree who got into tech
  • Developer to Manager – stories of people who went from software developer to manager

Roadmaps: