Thinking about computer science?
My initial career plans were to get degree in Mechanical Engineering. Plans didn’t go as planned, and I wasn’t quite mature enough to handle the level of rigor immediately outside of high school. My plans evolved into an art direction, since I always enjoyed art & I decided to ignore the $$$ (or there lack of) problem with art careers. From art, I realized I needed to make some money so I honed in on Graphic Design, which actually described my art process anyways. I went to community college, and then to Fresno State majored in GD and minored in Philosophy. My first job out of school was doing front-end development. My background in design and small experience with coding HTML/CSS made me a good fit for the position which consisted mostly of PSD to HMTL conversion. There I realized I could make the computer do repetitive tasks for me so that I wouldn’t have to - welcome to programming! From that position I moved on to another marketing agency doing the same thing, but more advanced websites, also while doing design as well. From there I made the jump into full-time development as a Software Engineer.
Before I give any advice suggestions regarding programming I will give you some general advice/questions to help you decide what to pursue. What activity did/do you most enjoy when you were younger? When I was a kid, I always enjoyed building things with Legos. For a long time I knew when I was older I wanted to build stuff. Initially I thought that would be engineering, but I didn’t particularly enjoy the math and science (which changed after I ‘grew’ up) when I was younger. I realized an important part of the building for me was the aesthetic, which led me down the graphic design path. Recognizing what you enjoyed as a kid can help you identify careers that line up with who you are. That being said, be pragmatic at the same time. I enjoyed art, but choose a focus that could pay bills vs eating paint.
What sort of life-style do you want to have?
Initially, before I settled on graphic design & then programming I decided I wanted a career that would give me flexibility and wouldn’t require me to necessarily work every day or even at a specific location. I wanted something that I could easily work from home and/or for myself. I didn’t care as much about money, I just wanted freedom - I just always assumed money was the avenue to freedom. Some people like to travel, some people like to be outdoors, some people like to never see another person during their job, some people like variety and some people don’t. Figuring out what kind of lifestyle you want to live can help you eliminate a number of options and hone in on what make sense.
Where do you want to live?
I want to be where my family lives, which is currently Fresno area. STEM jobs in this area are typically ag-focused but there are places I can work. Now if I wanted to study Marine Biology, I probably couldn’t live in Fresno and do that. You need to consider what how the work you want to do lines up or doesn’t line up with where you you want to live
What is the forecast of career?
Will the field be relevant in 10 years? Does it pay enough to support a family? Will robots take over your job very soon?
http://www.npr.org/sections/money/2015/05/21/408234543/will-your-job-be-done-by-a-machine
Avoid College Debt
College debt carries with you until you pay it off. You can’t declare bankruptcy and rid yourself of it. It really puts you at a disadvantage financially. For this reason I would suggest starting off with community college and then go to a four year school. This is additionally helpful for students that are unsure – it’s not worth wasting money on general-ed classes.
http://www.hamiltonproject.org/charts/undergraduate_student_loan_calculator
Software/Programming
Context
My focus in the world of software is and will always be the web so my suggestions as far as technology goes will be web-slanted. Many of the suggestions transcend the web platform but do keep that in mind.
Computers are constantly evolving machines. They require you to also evolve to maintain relevance in the industry. If you enjoy learning and trying new things you will be fine. If you don’t enjoy constant evolution and change, you probably won’t be happy. Below are some good ingredients to success.
- Adaptiveness
- Not afraid of trial and error
- Humility
- Learning
- Can-do-attitude
- Efficiency
Learn Linux
Linux is on servers, phones, cameras, cars … linux is everywhere! No matter what you decide to focus on software wise you will probably have to work with linux. In fact, good ol’ Microsft released .NET for linux and is transitioning Azure to linux? To learn install Ubuntu (easiest to start with) on a computer and learn the command line. You can also get an Amazon EC2 free instance! Most servers are linux and the number of jobs you can get just from being awesome at linux is quite substantial.
- Virtualbox - Fire up a linux vm!
- http://overthewire.org/wargames/bandit/bandit0.html - use ssh to learn on a vm
- AWS EC2 - free tier!
- CLI Tips & Tricks - lots of cli tips
Learn Languages
You should learn the language that fits into the industry that interests you - if you aren’t sure yet what you interests you, that’s ok. Below are some common language that are good to know and are pretty universal. Keep in mind this advice come from the web platform perspective.
In regards to learning specifically, you can only learn if you do. Come up with a project, and create it in the language you want to learn. A simple project for learning a web stack for example is to make a twitter clone.
Charts on Trends
Python
Python is an easy language to get started with. It is supported on every platform and is easy to read. It does a good job of introducing you to programming concepts and to clean code. Almost every software company has python somewhere in their infrastructure – I can guarantee you, you can use it the rest of your career. There are so many resources
JavaScript
“Always bet on JavaScript” - It is the “Lingua franca” of the web. There are tons of resources everywhere and you don’t need anything other than a browser to get started on it. Personally I have spent the most time on JavaScript and really enjoy it but there are lots of gotchas compared to python that make it less intuitive.
Golang
Golang is a statically typed language that was designed with concurrency from the get-go. It’s a very fast and up and coming platform.
Learn a Database
MySql, SQL Server, Postgres - it doesn’t matter, just know some SQL basics! Relational databases are going to be here forever and so familiarity with creating data structures and querying data is handy-dandy!
Learn Version Control
Version control is a skill every professioanl developer must have! If you work on a team or even by yourself the organization you’ll be working at will have something.
- https://www.codeschool.com/courses/try-git
- https://www.git-tower.com/learn/
- https://www.atlassian.com/git/
- http://learngitbranching.js.org/
Resources for learning
- https://github.com/karlhorky/learn-to-program
- http://exercism.io/
- https://www.codecademy.com/
- http://tutsplus.com/
- https://teamtreehouse.com/
- https://www.codeschool.com/
- https://www.pluralsight.com/
Alternative Degrees
Computer science degrees don’t guarantee success or jobs and are generally at least 5+ years behind current trends. The reality is your best education will be self motivated using many of the online resources available. I think generally getting a degree is a good idea, but it may serve you well to have a degree to complement your self-guided computer education.
Complementary
- Economics, Finance, Business, Statistics, Cognitive Science, Psychology, Linguistics, Mathematics, Graphic Design/Comm
Related
- Engineering, Information System
There are tons of industries that have lots of oppurtunity if you have mixed disciplines. Many industries have barely started leveraging computers so many are ripe the evolution brought on by software. For example if you combo a medical education with a software education you will have unique opportunities that require expertise in both fields that others could never have.