So you finished 142 and 143…

and now you’re thinking to yourself, “That was really fun, and now I know how to program!” On the last day of class your professor inspired you to keep going with side projects. So, riding a high from doing well in 143, or with a chip on your should from doing….not so well, you walk over to Starbucks, buy a veinte coffee, and sit down determined to make the next big thing. And then you…

Wait, what exactly was I going to do again? Yeah, we’ve all been there. Coding is hard. Figuring out what to code is even harder — especially in the beginning. If you join CSE you will slowly start to understand ‘exactly what to do’ after a few years and a lot of confusion. Confusion is good, it probably means you’re doing something interesting, and it is always the first step to learning.

So, you want to keep coding and no idea where to start. First, you have to understand that while you have learned how to program, you have learned very little about ‘software development’. To make software you have to…

1) Come up with an idea

2) Figure out how you’re going to do it

3) Just do it.

4) Ship it. …and someday learn how to maintain it

Coming up with an idea is usually pretty straight forward: you usually either want to keep making a simple Java (or other language) program, you’ve heard this ‘mobile’ thing is interesting, and then there’s the World Wide Web. If you want to keep making Java programs, you’re all set — keep coming up with ideas similar to the homework assignments in 142/143. If you are really stuck, dig out one of your old homework specs and use it as a template to write yourself a spec for your new project.

If not, find out what you need to learn, where/what/who you’re going to learn it from, and dive in. When you are first learning something new, like web development, you will probably be Googling 100 things a day. Nice, that’s 100 more things you know about computer science. After two years in CSE and two internships at Amazon I’d guess I’ve learned more than 10,000 “facts” of computer science, and still I know nothing. Your life will get a lot more fun once you accept that you know very little but can still do a lot.

To get started try…

1) Ask someone. “Hey, I hear you’ve done a fair amount of web development and I was wondering if you could tell me what I should look into as I get started?” Odds are you will get a positive response — people in the computer science community are abnormally friendly and willing to help. If you question that just look up the idea of ‘open source’ — I challenge you to find an example in all of human history of people donating their time and effort to the same magnitude as open source software.

2) Ask the internet. Every ‘How do I get started?’ question you’re going to ask has already been asked on sites like Quora, stackoverflow.com, etc. and will have links to all sorts of resources you can read.

There are a few steps you will usually go through when starting something new in software:

1) Learning a bunch of new stuff

2) Downloading new software (code just the same as the stuff you have written) that will give you tons of new powers because other people are awesome and are giving it to you for free

3) Getting frustrated because things aren’t working

4) Realizing the majority of your life is going to be devoted to having the right pixels show up at the right places on a screen

5) Considering switching majors

6) Taking a break

7) Realizing getting the right pixels in the right places makes a lot of amazing things happen

8) Getting things to work

9) Writing some really bad code just to figure out how this new language/technology works

10) Writing some really good code getting famous (I’m still working on this one too)

A lot of times in computer science you can feel like you are the only one having these thoughts go through your head. You aren’t. Go through this process enough times and you will start getting through each one a bit more quickly.

Something you will encounter along that way is that computer science is full of weird acronyms and phrases that you will soon use without thinking. But before that you will have no idea what people are talking about and feel dumb. Don’t feel dumb; at one point in his life Sergey Brin knew less about computer science than you do now. But still, learn these.

· SDK (Software Development Kit) — The program and set of tools you download when you start doing development for a particular purpose — Android, iOS, games, etc..

o Ex: Android SDK, Java Development Kit.

· Library/Package/Package Manager — A bunch of code someone wrote and was so nice they decided to give it to you for free. Often found in things called ‘package managers’ that help you download free code. This is the same idea as importing any Java data structure.

o Ex: Node Package Manager, apt-get, jQuery, language standard libraries

· Source Control — a way to backup and share your files without copying and pasting a folder a hundred times. If you want to let someone know as quickly as possible that you are just starting out in computer science, don’t learn what source control is.

o Ex: github, subversion, bitbucket, etc.

· Binary: a set of software files that are just a bunch of 1’s and 0’s. Yes, literally just 1’s and 0’s. It took me a while to grasp that concept but all those words and curly braces you write end up as just a long string of binary numbers.

· Open Source: the hippest way to get recognized for being smart. And an incredible example of how generous people are when they care about what they are doing. Essentially, this means writing some code and publishing it, most likely on github.com, for other people to use/contribute to.

· IDE: a program that provides you the graphical-user-interface (GUI) and basic tools to develop software in certain languages without being specifically geared to a special type of software like an SDK.

o Ex: Eclipse, jGrasp, Visual Studio

· Terminal/Command Line — a program/tool you might not have ever heard of if you grew up with a Windows computer your entire life. It prompts you for typed commands which are quick ways to do all sorts of powerful things with your computer. This one topic could be the source of an entire article and will encompass a large amount of your career. Google it sometime.

· Local vs Remote — local means your personal laptop/desktop. Remote means some server you are in some way interacting with but probably have no idea of its physical location or anything about it other than the fact that you can interact with it like a normal computer.

· Framework — a layered, structured way of developing the particular kind of software you are working on. This structure has been created by experts in their field and often comes with tools to make life easier.

o Ex: Ruby on Rails is a web application framework

· Algorithm — a repeatable, step-by-step process that accomplishes some task. In computer science we care a lot about all types of algorithms because we can turn those algorithms into code that is repeatable so a computer can do stuff for us without us having to do it.

Thanks for reading and stay confused.