# Computer Science Student needing help



## Scuba Steve (Dec 21, 2011)

Hi, My name is Steven. 

This is an assignment, but in all honesty these questions would actually help me a lot as I am looking to join the professional programming world. I want to be the best I can be and I need your help!

If you are a working or recently working programmer, could you please answer these 9 questions? Think of it as I am interning under you and I asked you these questions at work.

I don't need any personal information, and you can skip any questions you want to.

I have heard that school doesn't teach all the necessary skills needed to make it in the professional programming world. What would you recommend a student does to supplement his learning before starting a first job?

Would you recommend mastering one language, or generalizing with many?

What kind of communication skills are necessary for your position? Do you write memos a lot? Do you do most of your communication face to face or through writing?

Do you find yourself working in teams more than alone? Which do you prefer?

Do you get to choose your own schedule? What hours have you found to be best for you?

What would you recommend to be the best point of entry into the software development world for someone looking for an internship?

Building a reputation is important in this field. Would you recommend building my reputation through work on open source projects?

I know of three major professional organizations: AITP, IEEE, and ACM. Do you have any affiliation with any of these groups? Would you recommend I join one?

How do you feel software pirating effects you as a programmer?

My goal is to someday work on Android or something similar, I've been rooting/flashing/modding for a few years now and I love it.

If someone finds kindness enough in their hearts to help me I might be inclined to paypal you a donation!!!!!

Thanks in advance, Steven


----------



## yarly (Jun 22, 2011)

You go to college to study computer science to learn computer _science_ (emphasis on the science part [i.e. problem solving]). If you're not sure what computer science is or think it's just programming, then i seriously recommend reading more about it and why schools are not just teaching you "programming flavor language of the month". Programming is just one of the tools for computer science. If you want to learn a trade/vocation (programming to the latest languages x company wants people to know), read some books on programming instead and attend a 2 year technical school. That was not to sound harsh, but most people that don't know what Computer Science really is, think it's basically just learning programming so you can get a job programming.


----------



## DizzyThermal (Jun 15, 2011)

I'm going to agree with yarly on this one..

To add my two cents I'll start by saying that there are two _styles_ of programming: *procedural* programming and *object-oriented* programming.. A lot of schools will teach procedural programming first because the scope is a lot smaller and focuses more on step by step execution. Once you get a good grasp of procedural programming you are normally introduced to the object-oriented stuff (classes, objects, etc)..

However, once you learn an object-oriented language well (like C++ or Java for instance) it isn't that hard to go and learn syntax. Yes, there are some things that one language will have that the other might now (such as C++ has the ability to overload operators (=, <, >, etc) with user-defined classes.. In Java, you would have to just make a function.. Ex: add(customClass1, customClass2);

The best thing to grasp from the 2-4 years you spend going through a Computer Science degree is how to take a problem and figure out a solution, not fill a resume up with every computer language in the book..









Either way, good luck!


----------



## Maverick0984 (Oct 14, 2011)

I think people might be being a little too harsh here, sure Computer Science teaches more than just programming, but I am pretty sure he is just creating questions for his assignment. Don't take things too literal.

Some background, I have a Computer Engineering degree from a top 5 program in the USA, am 28 yrs old, and am also currently pursuing an MBA at night while I work full time. If you aren't familiar with Computer Engineering, it is essentially if Electrical Engineering and Computer Science had a baby.

1. School is supposed to expose you to situations that you would see in the real world, while also developing your problem solving skills. I can't stress enough how important it is to be able to "figure something out" if you have no idea what you are doing with something. There just isn't enough time in a program to devote to master a language or about becoming a professional programmer. You can only become with with experience. I'd say one thing my undergrad didn't even touch on was the interworkings of .NET. I'm sure there was a class I could have taken but I didn't know about it and I didn't look for it.

2. Learning and being exposed to as many as you can. The flavor of the month will change and cycle around. Being a master in 1 language is really only good if you plan on becoming a consultant and hoping around companies doing JUST that. Even then, you have to get lucky and pick a language with some staying power.

3. This varies wildly, but I'd say most of my communication is through email.

4. Both. Probably prefer alone.

5. Yeah, it also varies.

6. Just find something that interests you. You'll learn a lot more if you care about what you are doing.

7. Work will take longer because it requires you to be working. Open source stuff can start right now! Anyway, experience is the big key, not necessarily reputation.

8. I'm a member of IEEE and ACM. I'd say IEEE has a higher interest factor for me as they do quite a bit more. But both are okay.

9. Doesn't really matter to me.


----------



## yarly (Jun 22, 2011)

DizzyThermal said:


> I think people might be being a little too harsh here, sure Computer Science teaches more than just programming, but I am pretty sure he is just creating questions for his assignment. Don't take things too literal.


I'm sure that was the case, but his teacher is awfully uninformed and he should bring up some of that to him/her and also see the different between public perception of computer science and those at are in the field. I was also busy at the time and couldn't write something more detailed.



> I have heard that school doesn't teach all the necessary skills needed to make it in the professional programming world. What would you recommend a student does to supplement his learning before starting a first job?


Learn interesting and useful skills on your own time or with like-minded friends. Whether that is online, in person or at some sort of programming social club or "hacker space" (most cities/colleges have them). Learn a functional language (lisp varients [clisp, scheme/racket, clojure], haskell, f#) as they're greatly underrated and can be used in normal programming many times. Also, read hacker news, but don't treat it as reddit, post meme stuff, act immature, etc. People won't put up with it and you'll get banned (they ban in a way you won't know you're banned). Just saying that as a forewarning that it's mostly developers talking about interesting development ideas and development related concepts and not a place to socialize or post useless replies/topics. As long as you treat it like like you were talking to everyone there in person about whatever it is and as you would want to be treated, you'll be fine. I didn't actually start posting or have an account until nearly 18 months after starting to read it. I read it for the comments and what people say more than to comment myself as most are developers in well known companies or experts in their fields.



> Would you recommend mastering one language, or generalizing with many?


Not unless you want to be called a Java Programmer, C# Programmer, etc. Those are less about computer science and more about the CS equivalent to an assembly line worker versus an engineer (not that it's a bad thing, but that's what it is as you do less abstract thinking and more repetitive tasks). Learn to solve problems regardless of language so try many different ones and learn why they are different and which is most useful in different situations. Python, C#, C, C++, Ruby, Java, Perl, Objective-C, F#, Lisp, Haskell, JavaScript, Lua, PHP, Scala, Google Go, D, Bash/shell script are ones that are generally used the most in no particular order. Also how to properly use a database with SQL. I seen too many that can't use/design a database to save their souls outside of using ORM. Languages are tools and like physical tools, sometimes using the wrong screw driver will still work (flat head instead of a phillips). However, it can be much harder than if you used the proper one.

I jump back and forth with many different languages on a daily basis. Yesterday I was using python to build a web parser (something that pulls out relevant information from a webpage for other uses). Today, I'm writing Java for Android and also hacked together a small shell script in Bash. Tomorrow, I could be using PHP or C#, it just varies. Do I confuse them? Not really as I keep each sort of in a separate space in my mind. Sometimes something might bleed over and I habitually type out something like "int" in front of a variable in python to denote the type, forgetting that is only correct in C#/Java/C++ etc and then quickly backspace it. That rarely happens and isn't a problem though. Mostly just silly mistakes you realize right after doing them where your hands are thinking faster than your brain.

Bottom line: you don't want to find yourself laid off in 15 years because the language you pigeon holed yourself into is no longer relevant. Tell people you are a developer, engineer or computer scientist, but don't call yourself a programmer unless you want to be thought of as a "grunt" and expendable.



> What kind of communication skills are necessary for your position? Do you write memos a lot? Do you do most of your communication face to face or through writing?


Key skill: learn how to get along with others and how to relate complex issues (metaphors, stories and analogies do wonders). One way to further that skill is teach someone new to programming after you have some years under your belt. You learn quite a bit about your own skills through teaching someone else and I don't think one really knows a topic if they can't explain it to someone who is genuinely interested in it given the time to do so. Someone saying "It's too complex to explain is generally really saying "I don't have the time to tell you really or I don't really know it as well as I think I do." Also, learn that everything said online can be miscommunicated so choose your words wisely.



> Do you get to choose your own schedule? What hours have you found to be best for you?


Unless I'm working on a project on site for a client, yes (though I still have to communicate regularly online through project software or other communication means). However, I'm an independent software developer/consultant and started doing that when I was a sophomore in college and just stuck with it. Started by doing web development in ASP.net (C#), then moved onto PHP and later Python. Many companies do want you to have set hours if you take full-time jobs with them though and they also have restrictions many times on what work you can do in your own time and if you can profit from it (one reason I have yet to take a job offer despite being offered them frequently). I also like working random hours, so that's the main reason though.

What hours have you found to be best for you

The hours when no one is distracting me, lol. Developers need 3-4 hours of uninterrupted time to think deeply about a difficult problem.



> What would you recommend to be the best point of entry into the software development world for someone looking for an internship?


Learn how to how to think like a computer scientist first (also a book: http://www.openbookp...thon/english2e/). Python is an easy language to learn, try that first. Without some understanding of how to problem solve and using a few languages, your chances of getting your foot in the door are lower. Then start communicating with people or contact businesses that are looking for new talent.



> Building a reputation is important in this field. Would you recommend building my reputation through work on open source projects?


If you can't find some useful library/project that people would want to use that you make yourself, then the next best thing is to find a project you like and use and contribute back to it through fixing bugs, documenting it better, etc. Don't jump in and try adding new features or upset the long time developers already on the project. Have to prove yourself first and get to know those that also work on it first. It's as much about communicating as it is about contributing code and other things.



> I know of three major professional organizations: AITP, IEEE, and ACM. Do you have any affiliation with any of these groups? Would you recommend I join one?


ACM, but I don't really follow it a ton. It's not a big deal to join them or not unless you feel some interest to join.



> How do you feel software pirating effects you as a programmer?


Not worth dealing with or caring about. People will pirate your software regardless of DRM and I really don't think having it helps, but it sure does annoy paying customers (while those that pirate mostly had no intention of ever paying unless they did it to demo the app). Worry about adding features, updating, etc. Only time I care is if an app/service uses external resources (like a server I control), then I would want to ensure pirated copies can't use online features, but that's only because it would actually cost me money. Overall, there's more to worry about shady developers stealing your app, renaming it and selling it as theirs as that is actually costing you business (yes, this happens more often than you think and usually from developers in countries like China where IP laws are weak, but it's not just limited to them [*cough* Zynga]).

edit: clarifications


----------



## shiznu (Jun 14, 2012)

Wow thanks to the original poster for asking the questions and thanks to yarly and dizzy for some well informed answers. This was very helpful and cleared up some questions that I had myself.

Sent from my Galaxy Nexus using RootzWiki


----------



## yarly (Jun 22, 2011)

Also another useful book I stumbled on today that is more about CS than it is programming.

http://programminggroundup.blogspot.com/


----------



## shiznu (Jun 14, 2012)

yarly said:


> Also another useful book I stumbled on today that is more about CS than it is programming.
> 
> http://programminggroundup.blogspot.com/


I've been keeping up with a couple threads on this subject. Yarly would you say your a proponent of going the CS route? In essence I'm just trying to get an idea or direction a beginner should consider. For an example starting at a basic enough level as not to get to frustrated while laying the ground work to have the best all around understanding and a good foundation to build on.
TIA

Sent from my Galaxy Nexus using RootzWiki


----------



## yarly (Jun 22, 2011)

shiznu said:


> I've been keeping up with a couple threads on this subject. Yarly would you say your a proponent of going the CS route? In essence I'm just trying to get an idea or direction a beginner should consider. For an example starting at a basic enough level as not to get to frustrated while laying the ground work to have the best all around understanding and a good foundation to build on.
> TIA
> 
> Sent from my Galaxy Nexus using RootzWiki


I think it's just as important to think like a computer scientist as it is to learn to program.


----------



## shiznu (Jun 14, 2012)

yarly said:


> I think it's just as important to think like a computer scientist as it is to learn to program.


Thanks for the response. Short and to the point but told me what I was looking for. My main point is not really an option for me to go to a four year school. I wanna attend the college in my area to learn as much as I can so maybe it would be easier to learn things on my own in the future.

Sent from my Galaxy Nexus using RootzWiki


----------



## yarly (Jun 22, 2011)

shiznu said:


> Thanks for the response. Short and to the point but told me what I was looking for. My main point is not really an option for me to go to a four year school. I wanna attend the college in my area to learn as much as I can so maybe it would be easier to learn things on my own in the future.
> 
> Sent from my Galaxy Nexus using RootzWiki


Go to a 2 year school first (community college) and get your required stuff out of the way. Most of them are tailored to transfer 100% of your credits to any 4 year public school within your state in your intended Bachelor's Degree. That way you pay way less for your schooling, get an Associate's Degree (general science) and then move onto only needing 2 more years at a University. Financial Aid is out there as well (grants, tax credits, loans with no interest) and is based on income, not grades. Community colleges are like $800-$1300 a quarter for full time (without any sort of financial aid factored in).

You can get all your math (calc 1-4, linear algebra, stats, discrete math), physics, chem, english, history, etc stuff done there and then basically only take computer science courses at the university. You also avoid having 400-600 people in your classes as well and have a teacher that knows your name. Do well enough at the community college, you can most likely get some sort of scholarship at the University.

This is what I did, because I had to pay my way through school on my own.


----------



## shiznu (Jun 14, 2012)

yarly said:


> Go to a 2 year school first (community college) and get your required stuff out of the way. Most of them are tailored to transfer 100% of your credits to any 4 year public school within your state in your intended Bachelor's Degree. That way you pay way less for your schooling, get an Associate's Degree (general science) and then move onto only needing 2 more years at a University. Financial Aid is out there as well (grants, tax credits, loans with no interest) and is based on income, not grades. Community colleges are like $800-$1300 a quarter for full time (without any sort of financial aid factored in).
> 
> You can get all your math (calc 1-4, linear algebra, stats, discrete math), physics, chem, english, history, etc stuff done there and then basically only take computer science courses at the university. You also avoid having 400-600 people in your classes as well and have a teacher that knows your name. Do well enough at the community college, you can most likely get some sort of scholarship at the University.
> 
> This is what I did, because I had to pay my way through school on my own.


Ah thanks that gives me a good game plan to start with. The nearest university is about an hour drive so that actually wouldn't be to bad, especially just for two years. Thanks again, it helps hearing from someone who already has experience in the matter.
Edit for typo.
Sent from my Galaxy Nexus using RootzWiki


----------



## yarly (Jun 22, 2011)

Yeah, just go meet with an advisor there and tell them your intentions of wanting to transfer your credits to whatever degree and they should know right away what you're talking about and probably have material they can show you of what will transfer where. Community colleges are all about being the stepping stone to a 4 year school nowadays as their niche role in education.

They're generally set up so you can get your associates degree and have your credits all be going towards transferring still.


----------

