# Technology in college.



## THEFILLTER (Dec 29, 2011)

I went to this section of rootz because I figured I'd get the best response.

I'm almost done with my associates in automotive and I hate it, I've always been interested in computers and flashing roms since the og droid.

Question is, what area should I go into to make a good living at this and be able to come home and develop roms like I know what I'm doing. I was looking at IT major but then I saw computer programming and I figured it would help with the android aspect. Where should I go as far as a major?

(If its been asked before go ahead and flame me for it because I deserve it for not searching, any answers though I'll greatly appreciate)

THEFILLTER

Sent from my Galaxy Nexus using RootzWiki


----------



## imheroldman (Aug 23, 2011)

FLAMETHROWER! ! !

Just kidding. Programming would be a good place to start! Not that I have any knowledge or experience, I wish I did. Android is built in C and C++. Apps are written in Java.

C++, as I know, is a very popular language and applies to other programming as well.

Sent from my PC36100 using RootzWiki


----------



## thesoldier (Jan 25, 2012)

Programming is definitely a great place to start. I'm doing it now! First learned about Java and C# and all that, and I'm currently taking a course in web programming learning about ASP.NET and that good stuff... It's definitely a lot to handle, but I found that once I began to get it down, things started coming much easier.

Oh and I like cars too 

Hopefully you don't truly hate it.

Sent from my Galaxy Nexus using Tapatalk 2


----------



## yarly (Jun 22, 2011)

I majored in CS at a University and working on my Masters in CS now as well as actively working as a professional developer. Here's what I learned from my 5½ years as an undergrad:

I guess you should first ask yourself what you want the end result to be.

People tend to confuse what the terms "programmer" and "developer/engineer" are.

A programmer writes the code to a solution a developer/engineer gives them.

A developer/engineer comes up with a solution to a problem and implements the solution themselves or has a programmer do it for them.

There is nothing wrong with doing either one, but a developer/engineer typically gets paid more and has more freedom. Companies like Google, Facebook, Twitter, Apple, etc. hire developers/engineers, not programmers.

A Computer Science degree or Computer Engineering (or as some universities call it "Computer Science & Engineering") degree will give a better learning experience and look better to the HR lackeys that check off boxes than a degree in IT. From my understanding, an "IT degree" is one part help desk and one part high level programming (high level meaning you don't really learn what makes a computer actually work and rely on a lot of magical assumptions).

I would also make sure the school focuses more on the Linux/Unix side of stuff. Some windows development and such is okay, but it's far easier to figure that stuff out on your own than the Linux equivalents. Mostly make sure the courses on Operating Systems are on Linux/Unix and not Windows. When learning Linux, don't fear the command line and force yourself not to do anything graphically.

Also, you won't know what they are now, but when you find out later, take at least a course or two on functional programming (Lisp, Haskell, F#, etc) languages. They make you a better developer for the skills you learn in them even if they seem painful as they look nothing like Java or any other "C like" language. C like languages borrow some ideas from functional languages, but people tend to shy away from using those concepts (for example, LINQ in C#) until they learn how to use them in a functional language.

If you find programming hard at first, remember that it can take a year or more to learn the basic "programmer's mentality" so you start to automatically think the way you should. Don't get too frustrated if it comes slow as long as you're learning. Save all your work so you can go back and note improvement and learn from mistakes. How do you know you truly mastered a particular topic? I think it happens when you can explain it in terms the average (and willing) person can understand given the time (metaphors also go a long way). If you can't do that, then I do not think you really have mastered it.

Program A LOT. Not just your assignments and program when you're on break in the summer or you'll get a little rusty. If you do this, you'll learn at a much higher rate (just like extra practice and lifing/running makes you a better athlete). After you have the basics down for your first language, start writing something on your own. Find a problem you have with something or something you thought would be fun and figure out how to do it. Start with something small.

Read A LOT (even if it's just browsing daily articles on tech stuff [fluff articles don't count]). Online articles, tutorials, development books you get from the library or Amazon. Go loiter on freenode on IRC in the development channels there and answer questions when you're confident you know the answer. Many that are on those channels are actively involved in the core areas of Computer Science and some happen to be the creators of the technologies. Also recommend reading hacker news at ycombinator (the tech start up company that invested in dropbox and many others). Commenters there are nearly all developers and work for the tech companies of the products/software you use daily.

Don't compare yourself to others in your classes. Some will have obviously been programming for much longer than you. Others will just be starting out like you. While others will just be bullshitting and claiming they know more than they do (happens quite a bit). Just compare yourself to you and forget everyone else.

Learning how to use a single language so you're competent in it can take up to five years and to be an expert in something like c++ (one of the more complex languages out there) could take ten. Compare it to how long it takes to learn an instrument, play a sport, etc. You're basically rewiring your brain to do that stuff and your brain will fight you for a while most likely.

Don't make the mistake of equating Computer Science to programming as many tend to do. Professors will tell you that Computer Science is the study of computers and how they work (and that's true), but it really is tends to be that Computer Science is the art of solving complex problems with a computer. Everything else (learning X,Y,Z programming languages) is just icing on the cake. If you master finding solutions to problems others have troubles with, then success will follow.

If you're school isn't doing <insert_trendy_thing_in_programming> or doing something you feel as being "outdated" with your limited (but probably overly confident [hey, it happens when you learn a little bit, i know  ]) knowledge of Computer Science, don't put up a wall and ignore/rebel against it. Tools might change in Computer Science, but the underlying methods and theory behind them mostly remains the same. Besides, if you can't learn that tool on your own outside of school, then you may be in the wrong field.

Don't go to school expecting to learn everything you need to know about Android. You'll most likely learn a lot of concepts that relate to Android (Java, C++, maybe C, SQL, XML, Linux Filesystem, threading/processes, etc) you can pull together to give yourself a huge start over anyone that didn't learn what you did though and it will all come more naturally as if you knew how to play American Football and then decided to take up Rugby. You'll still end up having to read a lot, search google a lot, spend hours reading through source code, write tons of code and then compile/test/debug it.

Finally, learn to ask "why" for everything, even if it's just asking yourself and not some professor. Wanting to know why something is as it is, is the key to the "scientist" part and knowing how to apply that "why" in the real world is the key to the "engineer" or "developer" parts of Computer Science.


----------



## JBirdVegas (Jun 11, 2011)

Very well written.


----------



## yarly (Jun 22, 2011)

Hopefully the OP revisits this topic. I'd hate for my time spent and anyone else's to be in vain.


----------



## imheroldman (Aug 23, 2011)

yarly said:


> Hopefully the OP revisits this topic. I'd hate for my time spent and anyone else's to be in vain.


I have gained from your post! I won't be attending school for the foreseeable future but I am going to take to heart the ideas you gave thanks!

Sent from my PC36100 using RootzWiki


----------



## THEFILLTER (Dec 29, 2011)

Sorry guys, I was visiting good ol Virginia this past weekend seeing the Avett Brothers in concert so I didn't have a chance to frequent the forums as I would have liked and Yarly, im reading these posts as we speak haha so no, none of these posts were in vain. Thanks again everyone!


----------



## THEFILLTER (Dec 29, 2011)

Thesoldier- I don't hate to work on cars, Im more geared toward the electrical standpoint on the things we can't see flowing through a conductor but we know it makes "x" function. Voltage drops, resistance, amperage all fascinate me but if I were to get a job right now i would start as a lube tech and probably never see a driveability tech position for years to come. I can break down engine's and all but getting that engine to run is fun part (rant off)

Yarly-....Where do I begin, you seriously explained alot to me in that post, things that right now I frankly don't even understand but can only envision what your saying makes it worth it to go into programming. My problem is that I want to go to a two year school and take as many of these classes I need even if it takes me longer. Would that be a bad route because I just don't have the money for a four year college and with the community college I'm planning to go to has 3 campus's to it, I feel as if it would still teach me some valuable knowledge in this skill. If anything I want to write automotive software because me and my electrical teacher were talking about it the other day and its merely (simply put) a bunch of if then statements if im not way in left field with that statement.


----------



## yarly (Jun 22, 2011)

Glad to see it wasn't . I've had times before I've written replies in advice threads on here or xda and never heard a peep back from the person. Just bums you out when that happens.

A two year school is still going to give you some foundations in computer science. Probably a class or 2 on operating systems, networking, databases. Probably the rest being on some object oriented language like Java or C# or maybe C++. Supplementing that with some programming on your own and you should still learn quite a bit. Try to find out who your teachers are ahead of time and avoid bad ones if possible. I think programming can be taught to a degree to almost anyone, but a horrible teacher can ruin that.

Quite a few people make great livings (there's been a few big comment threads on hacker news that I linked earlier about this lately) with partial or no college education in computer science. It's all about teaching yourself how to learn without the structured education environment. Some can do this naturally and some learn it through college/universities, while others just never seem to learn it at all.

Those individuals tend to be self-taught and have a deep desire to write code on their own for ideas they come up with or projects they contribute to (lots of open source projects out there that need bugs fixed and such). Not having that shiny 4 year degree or 6 year degree can make getting certain jobs harder or getting your foot in the door, but programming and development are one of the few fields out there where it is possible to get by without what people consider a "formal education" if you have the desire to learn on your own.

If you can show them have have the ability and knowledge, a good employer will give you a shot regardless. I've interviewed at places that basically sit you down for the day and have you do a mock project just to see how you would do if they hired you for real. Those sort of places aren't as interested in your degree as they are in what you know. They want the "hacker mentality" -- someone that can solve problems. I've seen plenty that have 4 or 6 year degrees that can't even tell you how something like polymophism should work in object-oriented programming. Just sad.

This is just web stuff here, but it's a good starting point for learning.

If you want real programming (like application development), I recommend getting a head start by reading something like "Learn Python the Hard Way." It's geared towards those that have no experience in programming and python is a gentle (and fun) language to learn how to develop with. You can also program with it on Android using pygame, the android scripting layer or a few other means. The book online is also free. Some good comments about the book are here.

Some other good threads on learning to program or programming advice:

http://news.ycombina...item?id=3518967
http://news.ycombina...item?id=3661947
http://stackoverflow...ogramming-books


----------



## THEFILLTER (Dec 29, 2011)

Yarly, Im doing the web stuff you posted and so far its just a matter of remembering what variables and the values to which change them...for right now atleast haha.


----------



## yarly (Jun 22, 2011)

THEFILLTER said:


> Yarly, Im doing the web stuff you posted and so far its just a matter of remembering what variables and the values to which change them...for right now atleast haha.


It's a start 

CodeAcademy teaches javascript (which does all the fancy stuff you see on the web without refreshing a page). Web programming is a bit different than applications, but the underlying concepts still relate to each other. You can also use javascript to make mobile web based applications so it's not totally removed from something you could use on Android.


----------



## THEFILLTER (Dec 29, 2011)

I got up to the 7th section and went back through twice and I'm getting the variables and values down pat but had to call it quits tonight because to be honest its been a long day. My question is you said this kind of stuff comes in on web pages but I'm just have trouble understanding how one would build a web page without hundreds if not thousands of lines of code. I'm correct in assuming that right? This if and else statements don't seem to apply web based stuff unless your telling me I'm using that everywhere on a web page by clicking certain buttons (I'm trying to fathom these things in which I don't understand haha)

Sent from my Galaxy Nexus using RootzWiki


----------



## yarly (Jun 22, 2011)

if and else are the basis to any programming that's more than just words and images on a page that don't change.

Thousands of lines of code is kind of misleading. It's hard to explain things until you get more of an idea of what goes into a web site. There are ways of managing things so you're not going into content overload though. You're just not to the point of seeing the big picture yet and just kind of have to keep going on and ignoring all that for now.

It's best to write code and keep writing it even if you don't quite understand it yet or how it will work totally just yet. Write code and run it and see what it does. Eventually you'll learn more.


----------



## THEFILLTER (Dec 29, 2011)

Would learning the javascript of web design be a beginners way to start out or is this just something to get familiar with until I go to college for it? Probably a stupid question but I know you said that I will use some of this in the android world.

Also, developing android applications and building different things for different devices would one need a desktop over a laptop? I've installed the androidsdk in the past but I just don't think my dual amd turion hp laptop will handle it, its already slowing up by me running many applications, let alone build an app in that environment.

Again, if these questions are stupid just tell me, im trying to get as much knowledge as I can.


----------



## yarly (Jun 22, 2011)

To make more sense of what I'm saying, think of a programming language as a single tool (similar to a swiss army knife) that can do many jobs. Pretend your current swiss army knife can fix and build anything you need, but there's some things you know a different swiss army knife could do better (like say yours has a fork on it and you want to eat jello, but if you had a spoon, it would be a little easier). You can get by with your current one, but if you swapped it out for another depending on task, you could do the job a little easier (or in some cases much easier). Also note that there is no single swiss army knife that can do everything in the easiest way possible each time so you keep some variations of others at home to do other tasks at times. Programming languages are sort of like this.

Javascript is a particular "swiss army knife" that shares many things in common with other "swiss army knives" (like python, java, php, etc). However, it does some things better than the others, while some other things it does average or not as easy. However, knowing how to use this "swiss army knife" makes using and understanding how to use the other "swiss army knives" easier as they share many of the same tools, but not all of them.

Anyways, Javascript, combined with html and css (which also have tutorials on code academy) can make a web based application (or be converted into one that runs on the phone as an actual app) and run on not only Android, but also iOS and other mobile operating systems. Going back to the "swiss army knife" metaphor...Javascript has some drawbacks as it is made to work with lots of devices (any device with a web browser) instead of just one specific type (Android). However, using it you will still learn quite a bit regardless that you can take with you for doing other things later.

Also, you can try out the python "learn the hard way" book I linked previously as well. It says the hard way, but it's not. He tells you basically to write code and don't worry about not totally understanding it right away. Python as I mentioned is a fun language to learn that keeps things simple and is good for beginners. It's also one of the top 5-10 used programming languages out there along with Java and JavaScript (note that Java and JavaScript have nothing in common with each other than their names).

If you want to try java, this is a very noob friendly book series. Either grab it on Amazon or check your local library for it (note this is the 2nd edition as Java has changed since the first edition of it). It's one of the few series that I have seen that is specifically made for those that are not already programmers and still makes programming interesting and informative. You'll have to learn the java language first before you can actually do android stuff really. Android tutorials and books out there are going to assume you already know java as it's just too hard to teach both java and how to use it on android at the same time.

If you're making android apps, you can get by with a laptop. If you're compiling the android source, you'll need to upgrade for sure to a desktop (I recommend building one from parts). My desktop is an Intel core i7 920 cpu, 24 GB ram, and a Nividia 570gtx video card (you can get by with a cheaper video card in the range of $120-220, I just also play games when I'm spent on coding  ). Desktop PC you build without the monitors would probably be in the $600-1000 range assuming you have no parts you can use with it already.

Also: http://ofps.oreilly.com/titles/9781449383268/ (free book on how to use javascript + html + css to make android apps and submit to the market)


----------



## Dreamboxuser (Mar 30, 2012)

I was also contemplating the same question. Amazing posts thank you.

Sent from my Transformer TF101 using Tapatalk 2


----------

