Programmer – someone who programs. The terms “programming” and “programmer” have fallen out of style. The stereotypical idea of a programmer is that someone tells them what to make, and then they program it. It’s implied that they don’t have to think much, because someone else is figuring out what the program should do. There are negative stereotypes about programmers. However, in more recent years, I think this perception has been changing. That being said, nowadays people call themselves developers instead of programmers.
Intern – someone who is new, possibly still in school, helping a company part-time. If they do well in their internship, they might get hired. Or maybe not. In any case, even if a company doesn’t hire someone after they finish their internship, they will still be able to put the internship experience on a resume. Internships have much lower expectations and requirements compared to actual development jobs, but you still need to know how to develop software.
Here’s the traditional track people should take:
College for CS -> write personal projects (still in college) -> summer internship (still in college) -> graduate -> junior level position
But it’s okay to take a non-traditional path too.
Junior developer – a position that is suitable for people with very little experience, like maybe just a computer science degree and an internship and some personal projects.
Be warned: many positions that are listed as “junior developer” are anything but. They list high requirements and offer low pay. In that case, that’s not a junior developer position. It’s just companies being cheap. A legitimate junior developer position won’t require years and years of experience and knowing tons of different tech stacks. That said, some job listings are written by people who don’t even know how to code, so they write stuff that is wrong. Sometimes, the “requirements” section of a job listing is more like a wish list. So some places will accept you even if you don’t meet the requirements they list.
Senior developer – someone with a lot of experience as a developer. They are more capable and get higher pay than a junior developer, but they might also have additional responsibilities and work requirements. Everyone wants senior-level pay, but not everyone wants senior-level responsibilities.
Team lead – maybe you can do some simple personal projects by yourself. But in professional software development, things happen in teams. Many people will all work together to work on a product, whether it’s a mobile app, website, service, tool, or whatever. A team lead is someone who leads the team. It can require a combination of technical and managerial skills.
Architect – similar to a team lead, an architect designs a product. A developer might be told what to do, but an architect has to come up with ideas for what to do.
Software Engineer (SWE) – kind of like a software developer, but sometimes more in-depth.
Site Reliability Engineer (SRE) – a developer whose job is to make sure things are reliable. While an IT professional might deal with a lot of hardware-related issues, an SRE is focused on the software portion of infrastructure and operations.
Software Engineer, Tools and Infrastructure (SETI) – a testing-oriented software engineering role.
QA testing – a less technical version of SETI.
Sofware Development Engineer (SDE) – some jobs say software developer. Other people have the title of software development engineer. It’s like a combination of both. It’s a position where the majority of your work is writing code.
Freelancer – a terrible kind of job. Freelancing might mean that you have no boss, but it also means you’ll have low pay, high effort (a 9-5 might have downtime, but freelancers only get paid when they’re working), having to deal with customers who might be difficult (payment, changing job requirements, etc), no dental, no vision, no healthcare, no 401k, etc. Freelancing is awful and I can’t recommend it. But if you really do want to be a freelancer, then check out Fiverr or Upwork. One example of freelance development is setting up WordPress sites for people. You won’t make a whole lot of money doing that.
Maintenance – concerned with maintaining things rather than building new things. This can be difficult because maybe an existing codebase isn’t documented very well, or perhaps the documentation is out of date and doesn’t reflect the current code. Maybe the original developers retired or got fired or something, so you have to read the code and figure out what it does. There can be all sorts of weird issues with maintaining existing code. For example, there’s a really weird issue that some people come across – “this code wasn’t being used for anything, so I removed it, and now the program doesn’t work!” That’s a real thing that can happen. In that example, that’s caused by something called race conditions, and the seemingly useless code slowed down the program enough so that the other thing was able to happen first.
Maintenance isn’t really a job title per se, but it’s something that will be in many job descriptions. Even if it’s not in a job listing’s description, it will be an expectation for many developers. Reading old code can be harder than writing new code, especially if it was someone else who wrote it. I sometimes have difficulty understanding my own code if it’s been a few years since I looked at it.
Maintenance involves adding new features, fixing bugs, fixing security issues, and sometimes refactoring things or even migrating an old codebase to some newer technology, like rewriting code that’s in one language in a newer or better language instead.
In-house tech stacks – some companies use in-house tech that isn’t used anywhere else. That’s really bad. It means that, if you spend years and years using in-house tech, that won’t help you one iota if you get laid off or otherwise just want a job elsewhere. If a company uses tons of in-house stuff, it might be a good idea to learn more widely-used stuff in your spare time and look elsewhere, otherwise you could be locked into that job with no ability to transfer to a different company. It’s normal for companies to use a small amount of in-house tech. But when everything is in-house, that’s not good.
Legacy system maintainer – someone whose job is to just work on old stuff. Maybe it’s COBOL, FORTRAN, or some program running on IBM OS/2 Warp. Old stuff still exists. If someone has a really expensive industrial machine, possibly costing millions of dollars, and it only works with a Windows XP computer and some super ancient code that won’t work on newer versions, they’re not going to throw out the entire thing just because it’s got an old codebase. But the original developers might be long gone and the product is no longer supported. So you have to work with old stuff. I recommend trying to avoid legacy stuff. There will be a little legacy stuff in every company, but if the entire company is nothing but really old stuff, then that’s not good. It means that you’ll be gaining experience in things that nobody else cares about, so it’ll be harder to get another job after that.
Database administrator – someone who primarily deals with databases.
Cloud engineer – someone who deals with cloud stuff, such as Docker, Kubernetes, Heroku, and that kind of thing. There’s an alumni at one of the universities I went to who deals with those three things for AT&T.
Data scientist – someone who writes code that analyzes data. They might use R, Hadoop, Apache Spark, Python/Pandas, and things like that.
Machine learning – a job for machine learning might involve TensorFlow and Python.
Systems programmer – a programmer’s programmer. Someone who writes tools that make programming easier. Debuggers, compilers, operating systems, shell utilities, and things like that.
Android developer – someone who specializes in making Android apps.
iOS developer – someone who specializes in making iOS apps.
Mobile developer – someone who develops mobile applications. Maybe they do cross-platform mobile development, or maybe they know multiple tech stacks and do both iOS and Android.
Front-end – someone who codes the graphical front-end stuff that a user sees. For example, a native computer program developer might deal with making GUIs with GTK or Qt, or a web developer might deal with Vue, React, or Angular.
Back-end – someone who writes software that servers run. I think this is one of the more interesting positions. A back-end developer might use stuff like MVC, Laravel, Node.js, Django, Rails, Tomcat, JBoss, Apache, Nginx, ASP, and so on. It helps to know about software development as well as server platforms, MVC architecture, Linux, security, and cloud.
Full stack – someone who does front-end, back-end, and communication between the two (like Ajax, WebRTC, etc).
Helpdesk – an IT position where people submit support tickets, meaning someone calls, emails, sends a message on a company/college site, or comes to the IT helpdesk physical location, and asks for help about tech-related stuff. That could be issues with a password reset, malware, connecting to wifi, and things like that. This is a tech job, but there is no software development involved.
Technician – someone who might do things like fix computers.
Operations – a more technical IT position, but still not software development. Operations people, or ops for short, might deal with infrastructure (but more about hardware and configuration rather than SRE type infrastructure concerns), help desk, and server stuff.
Network engineer – someone who deals with in-depth networking stuff in an organization. It’s an IT job. They might deal with routers, switches, patch panels, server racks, copper cables, fiber, routing protocols, access points, subnetting, firewalls, Cisco IOS command line, routing protocols, traffic, addressing performance bottlenecks, point-to-point protocol, trunk lines, VLANs, and so on. Network engineering involves both the physical infrastructure and also software configurations of networks, as well as problems that can happen in them, such as connection issues, performance problems, security, and so on. They might maintain existing infrastructure or plan for expansions.
Computer engineer – designing hardware. If you want to become a computer engineer, you will need to know HDLs – Hardware Description Languages. Some examples of HDLs include Verilog, VHDL, and SystemVerilog. Logisim is a simple tool you might want to look into for educational purposes. It’s a program that lets you design circuit diagrams. That being said, I don’t recommend computer engineering. Computer science is more about software, and computer engineering is more about hardware.
`
System administrator – the person who’s in charge of IT in a company – maybe not in terms of decision-making (like CTO), but at least in terms of keeping everything running. Someone in IT might start as a technician or a helpdesk role, and then over the years, take night classes to get an advanced degree, get promotions here and there, and then eventually become a system administrator, or sysadmin. It doesn’t really involve coding the same way that software development does, but a sysadmin might utilize shell scripts to automate a lot of tasks.
Embedded systems developer – someone who writes code for embedded devices. Unlike a computer, which has a ton of RAM, storage, and CPU capability, an embedded device is cheap and resource-limited. So an embedded systems developer really has to make efficient code, and often uses more low-level programming languages, like C, and has to deal a lot with memory management because of performance constraints. Some devices that require embedded development include IP phones, GPSes, DVD players, and tons of other things that have embedded cheap computers in them. Not all computers have multi-core CPUs and tons of RAM. Not all computers have USB ports where you can plug in a keyboard/mouse. Not all computers have network capability. Not all computers have monitors where you can see the output. Many embedded systems are computers, but not like a desktop/laptop. Much cheaper, simpler, and intended for a single purpose. In some cases, you will be working with things like FPGAs, ASICs, or microcontrollers rather than CPUs. And even if you do use a CPU, it won’t be something like Intel or AMD.
IoT developer – Internet of Things. A more modern equivalent to embedded systems. Instead of some weird or proprietary stuff like in an embedded system, IoT devices typically run Linux, or maybe some other Unix variant, like VxWorks. My uncle used to work for the company that made VxWorks (a proprietary OS), and they say they support IoT, but I have yet to hear about someone using a proprietary Unix-like OS instead of Linux for this kind of stuff. In any case, a raspberry pi is a super cheap computer that can run linux, and that’s basically what IoT is like. An appliance, like a light or a door lock or something, connected to a cheap computer running Linux, which can run code from all sorts of programming languages. They’re not fast, but also not as limited as old-school embedded systems. one big difference between IoT and embedded sytems is that IoT devices almost always have network connectivity, whereas an embedded system might be offline and unable to communicate with any other device. IoT being able to connect to stuff is good in many ways, but at the same time, it’s also a security nightmare.
An IoT developer is someone who writes code for IoT devices – Amazon Echo, Alexa, Siri, Google Home, Zigbee, Bluetooth Low Energy, smart lightbulbs, smart locks, smart fridges, smart everything. To be an IoT developer, you need to be familiar with Linux and networking. Web development and/or mobile app development might also be useful for IoT developers, because many smart devices have a web-based interface that you can use to change their settings, like going in your browser and going to 192.168.1.65 or something, and then you see a login screen for your smart whatever. Then you log in and you can change its settings. But instead of a web interface, some newer ones have a mobile app.
CTO – chief technology officer. A high-level executive position in a company concerned with the tech the company uses, but often from a more “big picture” level compared to engineering-type positions where you’d focus on smaller details instead.
CSO – chief security officer.
CISO – chief information security officer.
CEO – someone from a tech background isn’t likely to become CEO unless it’s a tech-centric company. Many companies that use technology and hire software developers aren’t primarily tech companies. For example, I remember seeing car rental and insurance companies at a job fair near St. Louis looking for software developers even though they’re not “tech companies” the way that Microsoft or Google are.
Cloud native developer – someone who writes code that is intended to be run in the cloud, as opposed to on-premises or cloud-migrated stuff.
UX/UI – someone who does a combination of front-end development and design. More technical than graphic design, less technical than back-end development.
Consultant – someone who knows a lot about a given topic and charges money for their expertise. A security consultant might charge money for knowledge/advice/answers about information security.
Analyst – someone who analyzes stuff. “Analyst” is a very general term, but someone who is a security analyst would be someone who keeps up with industry trends and can advise people about security-related topics.
Writer/journalist – maybe instead of being a software developer, you want to write about software instead. it’s not as lucrative as software development, but many of these kinds of jobs have more flexible hours and are more likely to offer remote work. When I used to write for my school’s newspaper, it involved going to places and interviewing people in addition to writing.
Security – there are so many different kinds of jobs in security. I think it’s a really fascinating field to get into. Good pay, industry growth, and interesting subject matter. It’s not easy though.
SOC/dashboard stuff – some IT people primarily monitor dashboards. A software developer might write code for a server that makes it generate logs about performance, logins, errors, security events, etc. A Security Operations Center (SOC) team might monitor that information 24/7, with shifts around the clock. They do more than just looking at dashboards, but it’s a big part of that kind of job.
Incident response – people who figure out what to do after a company realizes that they’ve had a security incident.
Compliance auditing – people who audit companies for different compliance standards, like for HIPAA, FISMA, PCI, etc.
Pen testing – people who are paid to do penetration tests on companies. They’ll run tools and find ways to hack stuff, then write up a report afterwards. there was an episode of a security podcast I listen to where someone who did pen tests complained that companies would often do nothing after the pen test. Like he’d find certain security issues in an organization, and then they’d pay him, and then a year or two later they’d pay for another assessment, and the same issues were present. Kind of sad. But then again, some companies don’t really care about the results. Many only get pen tests because they have to, in order to check a box for some security list.
Pen testing can be a cool job because you’re basically getting paid to hack in a non-malicious way. But you need to get written legal agreements ahead of time, and know what you are and aren’t allowed to do. One criticism of pen testing is that some people say it’s just people running a tool like Nessus and giving a cookie cutter report, claiming that they’re not doing much aside from running automated vulnerability scanners. But some pen testers say that’s not true, and that there’s a lot of work and skill that goes into it, involving a combination of manual and automated stuff.
Computer forensics – looking into crimes, maybe even incident response. Data recovery software, logs, and things like that. Forensics software examiners might use software such as AccessData FTK to “build a case” when analyzing a hard drive.
Niche stuff – there might not be many jobs using an obscure tech stack, but the ones that do exist might pay well because it can be hard to find someone with a very specific set of skills. This is riskier but potentially more lucrative than using a widely-known tech stack. If a programming language or MVC framework is widely-used, that means you’ll have no problem finding a job that uses it.
Author – maybe you want to write books instead of software. some people write books about software rather than stories with characters and plots. It can be lower pay than software developer positions, but some people like writing. Sometimes, someone isn’t an author as a day job. It’s a “side gig” that they do either for fun or for extra money. Writing a book can also help you learn more, because you’re forced to explain stuff in-depth. It can also be almost like an extended resume, because if you’re a computer science student and don’t have much prior experience, merely saying “yeah I know javascript” might not be very convincing. But saying “I wrote an entire book on javascript” might make a more compelling case for why a company should hire you, since it shows that you really know what you claim to know. You don’t even need to land a deal with a publisher. You can just self-publish.
Tutor – someone who helps beginner developers with concepts that stump them. Common issues people have include things like pointers, data structures, algorithms, and things like that. Some people even want tutoring with the basics.
Bootcamp instructor – instead of college, many people go to bootcamps these days. Bootcamps are growing, which means there are more jobs for bootcamp teachers. I’d say they’re probably less qualified than computer science professors, and are more focused on real-world stuff rather than theory.
Computer science professor – you need a PhD in computer science to be a computer science professor. However, you can still teach at a university even with just a master’s degree, but then your title will be “instructor” rather than “professor.” For both university and even community college classes, you’ll really need a master’s degree in computer science, or something related to it, such as information systems or software engineering. Teaching involves less real-world stuff and is more about public speaking skills and mastering the basics – instead of being an expert on some front-end javascript framework that came out a month ago, a professor or instructor in college will need to know the ins and outs of fundamental stuff, like data structures, algorithms, etc. It might seem like you only need to know simple material, but students will ask questions about it, and you’ll have to know a lot about it.
Researcher – many professors are researchers first and teachers second. If someone wants to do computer science research in academia, they might be forced by the university to teach classes, even if they don’t want to. People in undergrad classes might be more interested in teaching than theoretical computer science research, but the higher up you go, the more likely you are to meet people who only teach because they have to, and they’re more interested in super advanced and weird computer science topics.
In a freshman CS101 type class, the professor will be someone who is less technical and more passionate about teaching students. But in something like CS572 Extremal Graph Theory, they might not really like teaching at all.
Computer science academia is really an entirely separate world from industry. In software development jobs, you’ll be learning the specifics of some MVC framework or API. Web/mobile/cloud are very popular these days, and offline client-centric programs are often seen as obsolete. But in academia, you might use some obscure functional paradigm language to write a desktop-only program that runs some weird math-related algorithm and uses some advanced data structures.
TA – a computer science student can become a teacher’s assistant, who will do things like grade homework, help hand out tests and watch people to make sure they’re not cheating, and things like that.
Reverse engineer – someone who takes apart and analyzes compiled software. You might use a disassembler or decompiler. It helps to know assembly and C, as well as know how to use tools like IDA Pro, Ghidra, and other related software.
Malware analyst – someone who reverse engineers malware and tries to learn about it, such as what it does, how to get around any sort of anti-analysis features it might have (malware developers don’t want malware analysts looking at their malware), who made it, what servers it’s connecting to, how it messes with a computer, how to detect it, and how to get rid of it. They will need to know all the stuff that a reverse engineer knows, but it will need to be run in a sandboxed environment for safety, so good knowledge of virtual machines, hypervisor safety, and network segmentation are important.
Developer advocate – a role that is less about code and more about people.
Security exploit developer – someone who gets paid to make hacking tools. Not all hacking tools are used maliciously. Some are used for security audits/pen tests.
Narrow focus role – Wordpress developer, PHP developer, Node.js developer, rails developer, C embedded systems developer. A job with very clearly-outlined technologies. If you have a job that uses stack ABC, it might be useful for the longevity of your career to make side projects that use stacks DEF or XYZ in your spare time so that your skills will outlive the one tech stack you currently use at your current job.
More nebulous positions – changing tech stacks, multiple roles/”hats”, flexibility, etc.
Youtuber – someone who makes youtube videos about coding, very unstable and low pay compared to traditional software developer jobs. Not recommended. They make money with ad revenue and sponsorships. Some people make social media content in their spare time rather than as a 9 to 5.
Podcaster – I listen to some tech podcasts where they podcast for a living. They have tech-related advertisers, such as for developer tools, cloud platforms, or job recruitment services. But there are far fewer opportunities in podcasting compared to software development. Again, it could be an interesting side gig, but there are tons of podcasts out there and only a few of them are actually popular enough to make money with ads/sponsorships/referral codes.
Udemy course creator – you can make your own self-paced course on a platform like udemy, teaching people to code with a combination of videos and questions/coding examples. You can make a little money from it, but it would be a terrible idea to try and make a living solely off of udemy and nothing else.
Open source developer – hard to monetize, mainly good for personal projects. Some companies, like Red Hat, hire people to develop software which is open source. But that’s rare. However, GitHub recently added a new feature that lets people financially support developers they like.
Game developer – a terrible field to get into. Oversaturated, competitive, low pay, low job security. Some people naively get into it because “it’s fun,” but there’s nothing fun about being paid less than other similar software development jobs, or having little job stability compared to other kinds of tech companies. Don’t bother.
Developer who relies on Patreon – this seems like a terrible idea, but I’ve seen some people do it. Some people make content for the internet, and charge money, either monthly or per content release, using Patreon, which allows fans to pay artists/content creators small amounts of money, like $2 per month or $1 per video or something. To successfully make money on Patreon, you need to create tiers – you have some free content that anyone can see, then a cheap tier of content (maybe more in-depth coding tutorials or something), and then more expensive tiers (such as if someone pays you more per month, you can do a Skype call with them and answer questions they have about coding or computer science or whatever). All in all, it’s hard to have high or stable income from Patreon. Just because a few people succeed doesn’t mean everyone does.
Kickstarter – maybe you want to make an app or a device, but you want people to crowdfund it. So then you make a video outlining what you want to do, and blast it out on social media. Many kickstarters never make their funding goals, and many of the ones that do make terrible products. Not recommended.
Bug bounty hunter – some people make money by finding and reporting security issues on sites, like an XSS vulnerability, remote code execution, or something like that. Look at HackerOne and BugCrowd if this sounds like something you want to do. I can’t really recommend it, considering that bug bounties vary wildly in payouts, and it’s not as stable as a 9 to 5. But if you think you have a knack for finding XSS or other web vulnerabilities, then maybe it’s for you.
Manager – because companies have a lot of different employees, software developers need managers. Maybe someone will start as a software developer and then become a manager for other developers. Some managers might be non-technical, but others come from engineering backgrounds.
Interdisciplinary roles – maybe you write code for a space telescope, requiring knowledge of coding and science. There are many fields that need software, but in order to write the software for a specific industry, you need to know about that industry. In order to write CAD software that helps architects make designs for buildings, you might need to learn about architecture, and not just coding.
Fintech – finance + technology. A fintech developer might develop software for things like high-frequency trading (HFT).
The “everything person” in bad/small companies – I’ve heard of people applying for a “software developer” position, and then it turns out that it’s a small company that decided that they want someone who will do all the tech stuff in their company – system administration, software development, security, testing… you name it, they want you to do it. That’s a red flag. If a company wants to cut costs by having a single employee do the work of multiple people, that’s no good.
This is a classic problem in tech, whether for IT or software development. Everybody wants better tech, but not everyone wants to pay for it. So people will have unrealistic or sometimes even impossible demands that can’t happen with their low budget.
Criminal – yes, some software developers make money with crime rather than legitimate stuff.
Silly titles – hacker, ninja, DevOps thoughtlord, infosec rockstar, cloud evangelist… you will sometimes see silly buzzword-laden titles.
The
word “engineer”
– some places are very strict about who is and isn’t allowed to
call themselves an engineer. That’s why I like the term “software
developer” because no one is going to get mad at you for saying
you’re a developer. If you say you’re a software engineer, some
people in some places will get upset unless you have very specific
qualifications. This isn’t about software engineering in particular,
but engineering in general – civic engineer, mechanical engineer,
electrical engineer, etc. You can’t call yourself a doctor without a
PhD, and in some places, you need an engineering degree or
certificate in order to call yourself an engineer. The word
“engineer” has really been watered down, as people use it
for all kinds of silly things these days, like “custodial
engineer” instead of “janitor.”
Entrepreneur – maybe you don’t want to work for a company. Maybe you don’t want to be a freelancer developer either, because you’re still writing code for someone else. Maybe you want to make your own software and make money from it that way. It sounds great in theory, but in reality it’s incredibly difficult to succeed this way. Maybe have a “side hustle” app that earns extra income, but a 9 to 5 is more stable.
Some people really do have good ideas for apps, and make money from them. But for every successful entrepreneur, there are countless failed ones. Most people’s app ideas are either terrible, hard to make money from, too expensive (requiring lots of funding before it can ever take off), or have already been done before.
Congratulations on completing section 17!
That’s all the content on the website. You’ve learned everything FreeCodingTutorials.com has to teach you.