To a Prospective IT Student =========================== Have you already played with tech stuff on your own time? Have you assembled your own computer? Learned a programming language? Built electronics projects? Made your own web site? If you've done these or similar things, you'll enjoy a career in IT. There are a lot of different subfields in IT, like system or network administration, programming, information security, and quality assurance. You're likely to work in more than one field during your career. You might work as a generalist, or eventually specialize in something like database administration. Don't worry about deciding on a specialty early in your career. Your career will feel very different if you work for a technology company than if you do IT for a company operating in a different industry. You'll tend to find more interesting work at a technology company on the coasts, but doing IT for a non-tech company in the midwest will be more stable. Both can pay well. You won't get a job at Google or Facebook or Apple if you don't get your degree from Stanford or MIT. That's not the end of the world. There's well paying and interesting work outside Silicon Valley. Don't work as a professional game developer. It's fucking brutal. Brutal. If you're interested in game development, do it as a hobby or part-time indie gig. This also applies to a lot of start-ups, which tend to exploit young workers with unrealistic promises. The IT industry is somewhat cyclical. When you're making good money, remember to save some. This is especially true if you work for a technology company. The IT industry is ageist. Before you hit 40 (and I know it seems an impossibly long way off now) you should seriously consider starting your own consulting firm, because getting hired at someone else's company will be difficult. This is especially true for technology companies, and a hundred times more acute in the Valley. This is less true if you transition to a management track than if you stay in a technical role. If you're serious about your career, cultivate professional contacts. Attend user group meetings, present at conferences, contribute to open source projects, and recommend people for jobs. This isn't unique to the IT industry, but you're unlikely to get a significant pay raise working the same job at the same company. Jumping jobs too often (more than once every year or two) makes you look squirrelly, but you'll probably need to change jobs every three to five years in order to maximize your income. ## Practical Advice ## Keep notes. When you learn a new technology, keep the kind of notes from which someone else could easily learn. Keep your notes in one easy to access and easy to update place, like a web-based wiki. When your understanding of a topic improves, update your notes. Always make good backups. A backup in the absence of periodic test restores is not a good backup. Automation is king. Automate any task you have time to automate. Learn a multi-platform scripting language. Python is a good choice. Always document what you do, even if it seems trivial at the time. Comment your code, keep a trouble ticket system, a bug tracking system, or change control system. Your co-workers and your future self will thank you. When you're trying to learn something, do a small, practical project with it. That will be far more educational than just reading about it. When hiring people, choose the nerds. Having a passion for technology is a better indicator of suitability than any degree or interview coding test. Consult an employment attorney before signing a contract, particularly if the contract includes a non-compete clause or heavily conditional compensation (e.g. stock options). ## Formal Education and What You Should Get from It ## By now, someone has probably told you that the most important thing you learn in school is _how to learn_. This is not a platitude. The technology you learn in school will not be the technology you'll use five years after graduation, and a semester is too short a time to develop a professionally deep understanding of anything. Technology is complex. We only manage to make it work by abstracting it into conceptual layers. When you're learning a particular technology, understand in what layer that technology operates and how it interfaces with the layer above and below it. Don't sweat memorizing things that are trivial to Google. Instead, dedicate your effort to understanding the things that are difficult or impossible to find in a few minutes of web searching. For example, it's unimportant to memorize the arguments and return value from even a relatively frequently used function from the C standard library, but you should understand why arrays in C behave mostly but not entirely like pointers. Learn to read well and write well. Writing is how we communicate ideas, and writing well is a signifier of a well ordered mind. Finish your degree. Even if you lose interest in your major, get a degree in something. This is doubly true if you can get your parents to pay for school. ## Recommended Reading ## The Practice of System and Network Administration (Limoncellie, Jogan, Chalup) This is a comprehensive but approachable introduction to the topic, and a book you may want to keep on your shelf as a reference and refresher. TCP/IP Illustrated, Volume 1 (Fall, Stevens) This is very detailed, but also a very understandable explanation. Dip into it to learn a few things, and keep this on your shelf as a reference. Structure and Interpretation of Computer Programs (Abelson, Sussman) This is a challenging introduction to programming fundamentals that was used as the introductory programming text at MIT for decades. The full text is available for free on the web: https://mitpress.mit.edu/sicp/