PDA

View Full Version : Programing Language?



Starclopsofish
09-24-2008, 03:14 AM
So I'm a sophomore in college now and I still have no idea what I want to do for a living. After a few years of just thinking my profession will fall out of the sky and hit me on the head, I've determined it's time to take action. I'm going to start what I've come to call "Aggressive Sampling", meaning I'm going to figure out what I want to do by really getting into/learning about some of the things I might be interested in before I have to declare a major in two semesters.

One area of interest for me is programming. I've dabbled a bit in C++ in the past, and I've recently picked up a C book. After reading a couple books and trolling on forums, I'm even more confused that when I started about which language I should learn.

I was thinking C at first because it's supposedly fairly easy to become (comparitively) competent in. Also, a lot of open source apps I'm into are written in C. But I get the impression that the (is it functional?) model of programing in C is an outdated paridigm. But then again, from what people have said, C++ is an extremely complex language, maybe not suitable for my first.

Then there's Java. Is that a good choice? Anyway, thanks for any advice in advance!

sphair
09-24-2008, 06:53 AM
If your goal is to learn *programming* the language itself doesn't matter much, the same concept goes into most languages. Once you handle one language well, it is normally quite easy to learn the next.

Perhaps C and C++ aren't the easiest languages to start with, as they got some fundamental concepts that can be hard to grasp and get right - pointers especially.

Java and .NET languages (C# being more like C++ than VB.Net) are maybe an easier place to start, as they try to hide away some of the underlying mechanics like pointers.

If you are thinking commercially / job wise, I think (without having anything to back this up except looking at job ads), that it is easier to find jobs doing Java or .Net than C++ these days.

Starclopsofish
11-06-2008, 10:01 PM
A small update, the class I'm taking next semester (essentially the basic computer science class) apparently teaches basic C and (x86?) assembly. This surprised me, from what I've heard asking around, most beginner classes start with Java.

Can anyone here reccomend some good resources for getting started learning C and assembly? I'm a bit terrified to go into a class like that cold-turkey(?), so to speak. I've dabbled a bit in the past (in C) but never got a good grasp of what the "big picture" was, if you know what I mean. I learned most of the syntax and then was like.... "ok, now what?" and lost interest and forgot what I had learned in just enough time to pick it up again :sweatdrop:

SushiBox
11-30-2008, 03:39 AM
If you are going to learn C, I would suggest learning C++ instead. C and C++ are VERY similar, C++ just has a lot more advanced OOP based topics.

This is my FAVORITE tutorial for learning C++, I HIGHLY recommend it. http://www.cplusplus.com/doc/tutorial/

Learn all the basics and then try messing around with some GDK's or open source applications. Modifying existing source code is a great way to learn.

Good luck!

nihilocrat
12-02-2008, 07:40 PM
Don't worry too much about learning the "right" language first. The smarter employers are not looking for people who know language X, Y, or Z; they are looking for someone with solid programming skills and comprehensive knowledge of a decent language. I have seen programmers who have gotten a job without knowing the primary language at the company, but thanks to their intelligence, drive, and experience in other languages they have surpassed the other programmers in the company after a few months of catching up. Just try to learn one language, and then another, and after that learning new languages (depending on the paradigm) will feel fairly trivial.

Honestly, I would suggest Python because of its combination of ease-of-use and power, but C is also a great start. Java is also a good language to learn, but it is a little overcomplicated compared to the other languages out there, I would even rate it a little more complicated than C++. Giving you easier access to more power is going to allow you to get experience in creating real, fully-fledged applications faster. Many CS courses are comprised of creating a bunch of micro-programs to do specific tasks, with some sort of project at the end that only needs to be half-finished to get a passing grade. You have to learn to walk before you can run, but if you don't know how to run when you get out of college, you are going to be in trouble if you are looking for a job.

CS courses also tend to teach you how to implement systems (sorting algorithms, hashing, etc.) which in the real world have been implemented in a library or as a first-order langauge construct better than 99% of programmers can hope to achieve. It is still useful to really learn the basics, though, if you don't mind taking your time. It will give you a more full perspective that distinguishes an education in CS from training in CS.

C uses the structured programming paradigm. You can actually implement a barebones OO system using C structs and functions, C++ just provides syntatic sugar, compiler checks, templates and such. This is probably why a lot of purists don't like C++; a lot of the features feel tacked-on when you have seen them implemented better in other languages.

The Wizard book (http://mitpress.mit.edu/sicp/) is also a pretty good resource if you really want to go the "old school" route. It teaches Scheme, but it has been "translated" in parts into many languages:

http://www.codepoetics.com/wiki/index.php?title=Topics:SICP_in_other_languages

It might be a little more abstract than hands-on stuff that you might be looking for. If you get bored after reading a few pages and want to get to the part where you move the little guy across the screen, then you would probably be better off looking at game development tutorials and deconstructing how the tutorial programs work.

I am giving a sort of conflicting message, so I guess ultimately what I want to say is: to get a full education, you should learn the basics; you should at least write a few programs where you sort an array, manage some memory, and fiddle around with individual bits. However, this is not enough, you should also create some sort of real-world application or series of applications (yes, games count of course) to get experience in developing large, complete, polished applications. You are also probably going to have more fun initially if you avoid the basics and just get a hold of concepts like 'variables' and 'functions' and 'classes' in a simple language like Python, in the process of implementing a game.

Finally (wow, I'm just rambling now), making games in Novashell is a very sensible way of getting your feet wet! Compared to a lot of other engines, it's very script-heavy, which means that some of the more basic stuff has to be managed in Lua code rather than through some GUI. It is not enough, however, to really learn how to program.

Starclopsofish
08-20-2009, 01:17 AM
Thanks a lot for all your responses, they've been very helpful. I've completed my first semester after changing my major to MIS (Managment Information Systems - business degree with computing focus... was scared off from all the math required for a CS degree).

The problem for me is that for my taste, there isn't nearly computing involved in this degree :D I took one course called "Introduction to Architectures and Programming" ( text was "Introduction to Computer Architecture and Programming" by Zeltman (my professor), Patt, and Patel.

I LOVED this course and the book. It was very well paced and I learned more than my entire last semester of courses combined. Unfortunately, for the foreseeable future, (a year or so) I must take boring courses like accounting, management, etc. I'm really hungry for more knowledge about what goes on inside of the computer, especially the hardware and the operating system.

Can anyone recommend a good (and relatively accessible and digestable) book on either or both of those topics?

Starclopsofish
08-20-2009, 01:41 AM
Sorry, DP......

void
08-22-2009, 08:26 AM
Well, one thing I would note is, you really ought to try to get more comfortable with the math. When you break down a software algorithm far enough, you end up with a lot of math. That's why computer science touches on it so deeply; it's pretty tightly wed to a lot of the theory.

But if you want to go deeper, one option is The Art Of Assembly Language.

http://homepage.mac.com/randyhyde/webster.cs.ucr.edu/index.html

Unlike what you're typically going to find elsewhere, this is actually a treatment of assembly that is easy to understand and informative to a relatively new programmer, and he makes use of his own version of assembly he calls HLA -- high level assembly.

I'm not advocating the use of assembly over C/C++; as with all things, a tool must be used at the right time or it will make your life more difficult (and those of your peers!), but the contents of his book are rather interesting, and may help you with what you want to understand.

(No, seriously, don't use assembly outside of an educational context)