You Want to be a Computer Scientist, Now What?

system.out.println("Become a Computer Scientist");

When we were all born none of us knew how to speak. Now we can sit and talk about our ideas without thinking about each word that we are saying and its definition. Speaking to us has become second nature.

Learning to Program

The process of learning to program is similar to speaking. One day you learn how to create a variable, the next day you are learning about loops and how to make your program recrsive.

You learn everything bit by bit — not all at once.

After you learn the different aspect of what to put into a program, and have written a couple dozen yourself, putting all of the pieces together will become second nature. For instance, adding items to a list in java looks like this:

List<String> myList = new LinkedList<String>();
myList.add("Hello");
myList.add("reader");

I naturally put the “.” inbetween myList and add, but I often forget to think about what that “.” is doing. This is because adding to my lists has started to become second nature to me.

This is a reason why part of computer science is self teaching. Think about breathing. We just kind of do it. Okay, now thinking about trying to describe to someone how to breathe. Its rather diffucult to describe to someone how to do something that is second nature to you. Your teachers trying to describe concepts to you can feel like this. That’s why finding online resources and practice is key to learning how to program.

Concepts in Computer Science

Part of becoming a computer scientist is learning the different concepts within the field.

For instance, I currently do not think that in my post grad life I will be using artificial intelligence(AI). That said, I should still be able to discuss those topics. If I was working on a project with someone and they suggested we approach the problem using AI, I should be able to say why or why not I think it’s a good idea.

This concept is similar to being a baker. Say I am a professional baker, but I only ever want to bake brownies. Don’t you think it’s still important that I know how a cupcake is made, especially if I am going to consider myself a professional baker? Maybe I should even know how to make a basic cupcake.

This concept of being versed in multiple areas of the disipline is especially important when you’re dealing with a field like computer science. Computer science is not like engineering where you need to be licensed to practice. In computer science you can be completely self taught and still be successful in the field. Being well versed in your options is necessary when making important decisions that computer scientists have to make.

Sorting Algorithms Conceptually

If you’re interested in computer science, or just different ways to sort a list of numbers, knowing some basic sorting algorithms will be very helpful for you. OR you may be interested in folk dancing… then this is also the post for you, because all of the different types of sorting titles are linked to a video where it is explained through folk dancing!

First you should know what an array is. An array is a data structure that holds a group of elements that are all the same data type (all letters, all numbers, etc.). If this concept throws you off, every time I say array, just replace it in your head with the word list(like a grocery list). I will be sorting number arrays.

WE WILL BE SORTING FROM SMALLEST TO LARGEST IN EVERY EXAMPLE

Selection sort

*for the drawings* The blue arrow is pointing to what we are looking at, and the red arrow is what we are comparing it to. There are brackets around the numbers to show that this is an array.

  1. You point to the first element in the array, and then the second element, and compare the two. Because the blue number is larger than the red number we incrament(increaste by one) and turn the current red number into the new blue number. The old blue number is no longer being pointed to.
  2. We keep comparing 2 elements in the array, and stop pointing to the larger number of the two. We then keep comparing the smaller number to the next elements in the array until we prove that it is the smallest, and then it is put at the front of the array where it will stay.
  3. Keep going through the process for the length of the array, incrementing(increasing by 1)the position that you put the current smallest number in. The last few elements don’t take too long because they have fewer things to be compared with.

Bubble Sort

*for the drawings* The blue arrow is pointing to what we are looking at, and the red arrow is what we are comparing it to. There are brackets around the numbers to show that this is an array.

  1. Point to the first element and compare it to the second element in the array.
  2. If the first is smaller, increment what element in the array your blue number is. If the your blue number is larger than your red number you swap the elements. Then we compare the next two elements(so on and so forth).
  3. The array will not be sorted after this.
  4. Once you have parsed through the end of the array, then go through the array again and do the same thing. At each pass, we aren’t finding the largest element, but putting it one position closer to where its final position is.
  5. If you pass through the array and do not make a swap, that is how you know that you have finished and your array is sorted.

Merge Sort

*for the drawings* The blue arrow is pointing to what we are looking at, and the red arrow is what we are comparing it to. There are brackets around the numbers to show that this is an array.

  1. You start this sorting process by splitting the array into two arrays. Make them equal sizes if possible.
  2. Once you split the original array, then split the individual sides until they are broken down into arrays with one element in them. An array with one element is technically already sorted. Then you merge it (compare and put in order) with the closest singular array.
  3. Then repeat until we have one of the original sides sorted. We repeat this processes for the other side.
  4. You then merge the two sorted and split arrays by comparing the first elements and putting the smaller of the two into a new ,third, array. You increment(increase by one) through the two sorted arrays as you add elements into the new array. You compare as you go until there are no more elements in either of the two sorted arrays.
  5. *If the two elements are equal to each other you write a special line of code saying which side to take from in this condition.

Quick Sort

*for the drawings* The red arrow is symbolic of your pivot number, and the blue arrow is the number you are currently comparing to the pivot number. There are brackets around the numbers to show that this is an array.

  1. You have your unsorted (shuffled) array, and then randomly select a number in your array to be your “pivot” number.
  2. Now you split the array into three new arrays. The first array is everything that is smaller than the pivot number, the second array is the pivot itself, and the third array is everything larger than the pivot number.
  3. Then you sort the first array by doing quick sort again (randomly picking a pivot number, and then splitting the array into everything larger and smaller than the pivot) and keep going until the smaller than the pivot array and larger than the pivot array only contain one number.
  4. You then make a new array, and stick your original first array, that is now sorted, in front of your original pivot, and sort the third array(the same way as the first) and stick it after the pivot. Since the pivot is only one number is it technically already sorted.
  5. We now have a sorted array.

Let me know in the comments if this helped you better understand sorting algorithms!

👏Claps on this post are very appreciated 👏

My Five Step Plan to Creating an Online Community

Breaking The Code

As a student I find myself going, and going nonstop. During winter break I am supposed to be relaxing and binge-watching Netflix. Don’t get me wrong, I definitely spent a few days in my pajamas watching The Office, but I soon found myself to be feeling bored and unfulfilled by this ritual.

In order to curb my boredom I created a winter break project for myself.

I made breakingthecode.xyz, this is an online community that provides resources for women and minority genders with a background in computer science. You can join this online community and become a code breaker.

I used the Stanford design thinking process guide(DTPG) for my project. Below I will explain how I used the Stanford DTPG.

  1. The first step of the Stanford DTPG is to empathize. I began to think of people that I strongly empathize with and I immediately thought of women in STEM, and even more specifically, women in computer science. Being a female in CS, I was aware of the programs that were available to help get women to study CS. I even participated in Girls Who Code and cite that as the reason why I am now studying CS. Despite all of these resources available to high school women, I noticed that once you in fact do decided to study computer science, the resources just kind of just fall off. I decided that I wanted to create a resource for women currently study CS, as well as women who were trying to start their careers in the field. I then realized that I wanted to be more inclusive and make a resource for women AND minority genders — both underrepresented groups in CS.
  2. The second step is to define. I did this step by defining what resources I could provide for these groups. I decided that at the collegiate level I would provide programming, internship, and professor resources. At the career level I would provide interviewing, and job resources. For both collegiate and career level I provide community resources as well.
  3. The third step is to ideate. I did this step by scouring the internet for available resources and by talking to others to try and make sure I helping solve this problem in the right way. What I mean by helping solve this problem in the right way is that I had to check with my potential users and make sure that this is something that they would like, and not just something that I liked.
  4. Fourth is the prototype step. I used WIX to help create this website. I decided to use something like WIX instead of doing the programming myself because a former boss of mine told me “don’t recreate the wheel”. I also knew that my goal for this project was not to improve my web development skills, but to create the best resource possible. I spent type prototyping and also user testing. For me user testing was me writing down the top 6 things I wanted people to be able to do on my site, and then asking real life people to do these things. I would watch them as they tried to complete these tasks and note where they got stuck or took longer than I had expected. I edited my site accordingly to make it as easy as possible for people to navigate.
  5. The last step is test. In order to do this step I shared my site on as many online sites as possible, and asked(begged) for feedback. Although my site is live and people are using it I feel as though I will always be in the test phase. I constantly am adding new resources that I discover, and always welcome feedback.

Visit breakingthecode.xyz and feel free to give me feedback!

“A ship in port is safe, but that is not what ships are for. Sail out to sea and do new things.”
 — Grace Hopper

The Dating Game

If you’re like me you and you’re an undergraduate student you are trying to get an internship for this summer. Over the past three years of having, and searching for internships, I have noticed something- finding an internship is a lot like dating

· The chase is half the fun

· It’s difficult find something that’s compatible

· There’s heartbreak

· You will grow

I say that the chase is half of the fun because I enjoy learning about, and finding interesting companies that I had previously not known about. I also enjoy getting to learn about all of the different types of positions there are. I originally thought that because I am studying computer science I need a software engineering internship but this is hardly the case; I can do product management, research, and so much more. Plus, like getting ready for a date there can be some fun in getting ready for an interview; looking up the person you will be talking with on LinkedIn, getting the part of your room in the video shot spotless, and then getting yourself and your skills perfectly polished.

Like on a date, you and the company are both trying to feel out if you are compatible together. To get to know your date better you would ask them questions that can give insight into what they value; you should do the same for the company you are interviewing with. When interviewing you shouldn’t just be trying to impress the company, but really trying to understand if the fit is right and if this is a place you would want to work at.

Heartbreak is also a thing in the internship search. The love may be on sided, and they may reject you. I like to think of this situation the same as a date, if they don’t like me then it wasn’t meant to be and I’ll find someone who does, because I rock.

There are also the people you date just for the experience, you don’t love or hate them, but you know you aren’t going to marry them. The same goes for internships. You may not land your dream internship this summer, but you will learn and grow from the position you are in, regardless of if it’s at Google, a small startup or anything in between. If you’re not in your dream position, find out what steps you need to take during the next couple of months to be a better candidate for it next intern season.

Like with love you should always follow your heart but more importantly your gut.

Stacks and Queues Made Simple

I thought that today I would write about 2 types of data structures-stacks and queues. You may want to learn about these if you have ever wondered why medium posts new articles at the top of your page, and old ones at the bottom.

A data structure is a fancy way of saying how we organize and store data

I decided to write about this because I think it is interesting and important to know how you have access to data, and I picked stacks and queues because, well, to put it simply I am the most comfortable with these two. Knowing these will make you a more competent computer user in general.

Stack of pancakes

A Stack is also referred to as FILO; or first in, last out. This is used when you hit the back button on your browser.A non-technical example of this data structure is when you empty the dish washer and put your plates away, you stack them up and then when you need a plate you take from the top of the stack.

Queue of people at coffee shop

A Queue is referred to as FIFO; or first in, first out.This is used when you are sending multiple documents to be printed at one time.A non-technical example is when you are waiting in a line at Starbucks, the first person in line is the first person to be serviced.

Let me know if this post was helpful in the comments, and if you would like to see more technical posts like this from me!

Can you think of different examples of Stacks and Queues that are used on the internet?

Analysis of Blogs I Enjoy

I am currently taking a class in school about technical blogging. One of my first assignments was to look at roughly 6 blogs I enjoy and 3 blogs that I am not a huge fan of. As I looked through reread through these blogs I took notes about techniques they used that drew me in as a reader, and also took notes about what turned me off as a reader.

I turned this assignment about analyzing blog post into this blog post ~blogception~

This will be broken up into GOOD and BAD sections. The good section includes techniques that writers used that I enjoyed. The bad section highlights of few of the things bloggers did that made me less likley to read their post.

GOOD

· Descriptive titles

· Half “self help” half tech startup topics

· 90% of read times under 3 min

· Spacing in sentences(hitting enter) makes it look more broken up

· How to, what, why Titles, Ten things you’ll learn titles

· Mix of photos and no photos for posts

· 1 post every day( some seem like he is posting just to post)

· Taking a stance/opinion

· 1–4 post a week

· under 5 min read time for post

· Personal (movie reviews etc)

· Number points

· Relevant

· Uses headings

· Credible bio

· Photos throughout articles

· Summarizing what others have said (usually tech giants)

· Separation in text chunks and bullet points

BAD

· Not a good bio-doesn’t build ethos

· Posting just to post

· 1 word titles

· Text is in large chunks

· 5 min read time = too long

· not enough tech posts

· Too narrow

· Too many acronyms

· Less than once a week posting

What does your good/bad list look like?

Wozniak’s Happiness Algorithm

Today, I skipped all of my classes to see Steve “The Woz” Wozniak speak.

Having seen my share of speakers before, I was expecting him to be very average, but didn’t want to miss out on the oppurtunity of seeing him.

To my surprise, his passion and energy were palpable.

One of the most important things he talked about was how to live a good life. This is a concept that many philosophers have explored. In particular, Aristotle called this concept arete.

According to Wozniak, happiness was the key to a good life. Happiness is better than success and achievement.

Now we are all wondering, how do we achieve happiness? Well, Steve Wozniak gave me an algorithm which I will now share with you.

Remember, that this algorithm was created by one of the most brilliant engineers to ever exist so try and follow along…

Happiness = Smiles — Frowns

*He later mentioned that necessities(housing, water, food), entertainment, and friends are all things that you need as well.

Out of the whole talk that he gave he spat out a lot of insight, but I thought that this was the most important. His emphasis on it led me to believe that he thinks that this is the most important thing as well.

Don’t look back.

Don’t argue.

You never have to convince anyone other than yourself.

  • Steve Wozniak

Do The Next Right Thing.

A path diverging — choose the next right thing

I’m sure most of you are aware that you cannot control the actions of others. I am aware of this yet I am still shocked and even disturbed in some of the actions of my peers and people around me.

Recently I had come up with an independent study project for myself. This idea had me so enthused because it was going to be one of my first ideas that I brought to life. This is my brain child. When talking about this idea I was approached by a peer who asked to help out and be a participant in bringing my child to life. I exposed my ideas to this person who later informed me they were taking them to pass off as their own. Taking my ideas and leaving my behind.

This left me feeling confused, upset, and betrayed.

After roughly 30 minutes of sitting with and understanding my emotions I realized that there was only one thing I could do-the next right thing.

We have control over how we react to misfortune. Being upset for a moment is okay, but you must learn, and move on.

Always do the next right thing.

Twitter Tips #tweeting

This summer at my internship I had the oppurtunity to run the companies’ Twitter page, and as a programmer I was excited for this challenge. Previous to this I had only tweeted from my own Twitter accounts, but knew that I loved twitter and thought I was #blessed when it came to my tweeting skills. I ended up growing our twitter following by over 300% as well as increasing our user interaction with our tweets.

I’m going to share a few of my tips…

1. Follow people who follow accounts similar to yours, or that have a related hashtag to your field in their twitter bio.

a. If they don’t follow back within a month I would unfollow them, because you don’t always want to be following significantly more people than follow you

2. Interact with accounts’ tweets. Someone may not be following you, but interacting with their tweets can help you get that follow.

3. Engage with other brands. Mutual brand boosting is helpful to both companies involved, this also increases who your tweets are being seen by.

4. Tweet about those silly holidays. When it’s national cat day tie that into your company(even a picture of someone at the company with a cat works), but use those trending hashtags in the post.

5. Interesting articles with a brief summary always to well. Those tweets do even when there is a picture and not the link to the article.

6. 80% work, 20% fun. A company’s twitter should be 80% about the company and related topics, and the other 20% should be fun things such as #MondayMotivation

7. Vary the times in the day you tweet. You can even set up systems to send out tweets at certain days and times. Make sure to tweet on the weekend

People Vs. Users: Which Would Should We Use?

http://contemporary-home-computing.org/turing-complete-user/#fn-tron

In the article linked above it discusses the difference between using the word user and using the word people. I had not realized that the difference in these two words is significant.

At first, I was stuck on the idea that using the word user could be dehumanizing/depersonalizing. I also liked the point that experiences were for people and interfaces were for the users. These two ideas had me originally thinking that people was a better word to be using.

After discussing it with others I now think that user is better than people. The word user shows awareness that you are using a technology which is important when technology is being more and more integrated into our everyday lives. Users are there to use the code because they are too busy doing something else to write the hope — BUT they still have their own agency from the computer.

Perhaps the best word to use is not users or people; but an in between word. I am not sure what this word would be. The only industries that call people users are the tech and drug industries. The tech companies don’t want people to stop using what they provide, they want the people to be addicted to it.