Welcome to the MacNN Forums.

If this is your first visit, be sure to check out the FAQ by clicking the link above. You may have to register before you can post: click the register link above to proceed. To start viewing messages, select the forum that you want to visit from the selection below.

You are here: MacNN Forums > Software - Troubleshooting and Discussion > Developer Center > C / C++ / or Java

C / C++ / or Java
Thread Tools
bnewton
Fresh-Faced Recruit
Join Date: Jul 2004
Status: Offline
Reply With Quote
Oct 30, 2004, 03:49 PM
 
Well I have chosen to go back to school this spring for the Toyota T-TEN Program.Since I have always liked programming as a hobby, I figured that I would take a few programming courses along with my regular classes.

Currently my college offer the following programming languages:
C / C++ / or Java

So out of the options of offered by my college, what would be the best language to start with & which language would make easier to learn Objective-C? Any suggestion would be helpful !

Maybe after all this I can get into some Cocoa programming!

Thanks
bnewton
     
Arkham_c
Mac Elite
Join Date: Dec 2001
Location: Atlanta, GA, USA
Status: Offline
Reply With Quote
Oct 30, 2004, 08:21 PM
 
Originally posted by bnewton:
Well I have chosen to go back to school this spring for the Toyota T-TEN Program.Since I have always liked programming as a hobby, I figured that I would take a few programming courses along with my regular classes.

Currently my college offer the following programming languages:
C / C++ / or Java

So out of the options of offered by my college, what would be the best language to start with & which language would make easier to learn Objective-C? Any suggestion would be helpful !

Maybe after all this I can get into some Cocoa programming!
If your goal is to learn Cocoa, then C or C++ is the way to go. Typically you learn C, then C++ or Objective C. Java is a great language to learn (probably the easiest of the three you suggested), and a good language if you want to find a job, but it's not the ideal language to use as a stepping stone to Cocoa.
Mac Pro 2x 2.66 GHz Dual core, Apple TV 160GB, two Windows XP PCs
     
depolitic
Registered User
Join Date: Feb 2003
Status: Offline
Reply With Quote
Oct 30, 2004, 10:17 PM
 
Yes while objective-C may extend ANSI-C the primary extension are the inclusion of Objected Orientated language concepts, that you will not learn in straight ANSI-C, so while learning ANSI-C is very good, I would also take a class on Object Orientated concepts, so picking up a single class in Java would be good as well, or a class in SmallTalk (<< would be best conseputially speaking because Objective-C takes much from SmallTalk) Python or Ruby would also teach you OOP, which is more universal concept and practices then any language.

This can then help you in your Objective-C
     
Chuckit
Clinically Insane
Join Date: Oct 2001
Location: San Diego, CA, USA
Status: Offline
Reply With Quote
Oct 30, 2004, 10:46 PM
 
To explain more:

Objective-C is just a set of extensions to the C language. Thus, anything you learn in a C class will be applicable to Cocoa.

C++ is a competing language (to Objective-C) with a very different underlying philosophy. It's the most popular of the C family, but its underlying philosophy is so different, you'd have to relearn pretty much everything. Much of what you learned would not be applicable to Cocoa.

Java is not related to C, though it's designed to look kind of similar to C++. Again, most of what you learn will not be applicable to learning Objective-C. The features of Java are very different from C, although Java's design philosophy is a little closer to Objective-C's than C++'s philosophy is. You actually can program Cocoa in Java, but it's not the primary language.

So if you just want to program Cocoa, I'd second the recommendation for C. If you're looking to get into the broader world of programming, Java might be an easier and quicker introduction.

As for taking Java to learn OO: I disagree. Objective-C can teach you OO better (or at least better-suited to itself) than Java can. Java borrows some of C++'s design philosophy, which conflicts with Objective-C's. In particular, Java is statically typed, while one of the central points to Objective-C's OO philosophy is that everything is dynamically typed and thus polymorphic.
( Last edited by Chuckit; Oct 30, 2004 at 11:17 PM. )
Chuck
___
"Instead of either 'multi-talented' or 'multitalented' use 'bisexual'."
     
depolitic
Registered User
Join Date: Feb 2003
Status: Offline
Reply With Quote
Oct 31, 2004, 04:51 AM
 
Originally posted by depolitic:
OR a class in SmallTalk (<< would be best conseputially speaking because Objective-C takes much from SmallTalk) Python or Ruby would also teach you OOP, which is more universal concept and practices then any language.
I know you can take a course in the above languages at most Universities, however most do not and most will never ever teach Objective-C, outside of a jocking footnote, on how it lost to C++.

If you are taking courses at a University that is what the original question was aiming to do, these are your Options.
     
11011001
Mac Elite
Join Date: May 2001
Location: Up north
Status: Offline
Reply With Quote
Nov 1, 2004, 10:09 PM
 
Pick Java.

It's based on C. It's a much better implementation of object oriented programming than C++. You won't have to worry about memory as much since it uses garbage collection.

The basic syntax of Obj-C and Java is identical. The object oriented concepts are similar, and both use garbage collection, although with Obj-C it's more complicated and not entirely automatic.

So, yes, certainly Java, since memory management is something that is a picky detail and not so much a conceptual thing.

In my opinion C++ is a much more difficult language to learn than Java because of all the little details you have to learn.
     
depolitic
Registered User
Join Date: Feb 2003
Status: Offline
Reply With Quote
Nov 2, 2004, 08:31 AM
 
if this is for pleasure and you are aiming to develop for Mac OS X then forget Java, Java is an interesting language with huge commercial support but no one would ever call Java fun, while it may be easer the C++, neither C++ or Java will help you much Syntax wise with Objective-C.

Since OS X is your target Java has limited appeal.

just do the C course and pick up a good book on Objective-C and Cocoa in your own time and it will be easy.

If this is fun, why make your life hard, learning stuff in Java or C++ that will have no use to you..

Stick to K.I.S.S.
     
hayesk
Guest
Status:
Reply With Quote
Nov 2, 2004, 10:59 AM
 
Choose C. But also look for courses on programming concepts, data structures, algorithm analysis, discrete math, etc.. C/Obj-C is just a tool like any other language. If you learn how to program (which most commercial-type colleges don't teach) properly, then you'll be able to pick up any language in a few days. But I would stay start with C because it requires you learn things like memory management and data structures.
     
PBG4 User
Senior User
Join Date: Feb 2001
Location: Deer Crossing, CT
Status: Offline
Reply With Quote
Nov 2, 2004, 02:55 PM
 
Originally posted by hayesk:
Choose C. But also look for courses on programming concepts, data structures, algorithm analysis, discrete math, etc.. C/Obj-C is just a tool like any other language. If you learn how to program (which most commercial-type colleges don't teach) properly, then you'll be able to pick up any language in a few days. But I would stay start with C because it requires you learn things like memory management and data structures.
You know, I can't see anyone voluntarily putting themselves through discrete math. I mean, I'm sure people are out there that wouldn't mind torturing themselves with discrete math, but I think you can learn most useful real world data structures without needing discrete math. Sure, you might not be able to determine Big-O or Big-Theta for searching a binary search tree, but I don't think this is quite necessary for the hobbyist.

I guess I was lucky at my school while 99.9% of everything was done in Java, all the conceptual bases were covered quite well (concepts, linked lists, trees, graphs, algorithms & algorithm analysis, etc.).

Now if I could only find a job in the CS field.
20" iMac G5! :D AND MacBook 1.83GHz!
Canon Digital Rebel Kit + 75 - 300mm lens. Yum Yum! :D
Check out my OS X Musical Scales program
     
hayesk
Guest
Status:
Reply With Quote
Nov 2, 2004, 05:26 PM
 
Originally posted by PBG4 User:
but I think you can learn most useful real world data structures without needing discrete math. Sure, you might not be able to determine Big-O or Big-Theta for searching a binary search tree, but I don't think this is quite necessary for the hobbyist.
True, I agree with you there. But if you can get through that, everything else seems easy.

But I stand by learning algorithm analysis and data structures. Even though array handling, sorting, trees, etc. is done for you in most frameworks, if you learn how they are done, it can help you tackle issues with your own code. Think of it as brain exercise.
     
PBG4 User
Senior User
Join Date: Feb 2001
Location: Deer Crossing, CT
Status: Offline
Reply With Quote
Nov 3, 2004, 08:01 AM
 
Originally posted by hayesk:
True, I agree with you there. But if you can get through that, everything else seems easy.

But I stand by learning algorithm analysis and data structures. Even though array handling, sorting, trees, etc. is done for you in most frameworks, if you learn how they are done, it can help you tackle issues with your own code. Think of it as brain exercise.
Yea I can see your point. If Obj-C didn't have NSMutableArray I'd have to build linked lists or some sort of tree to get the dynamic expandability that NSMA provides.
20" iMac G5! :D AND MacBook 1.83GHz!
Canon Digital Rebel Kit + 75 - 300mm lens. Yum Yum! :D
Check out my OS X Musical Scales program
     
bnewton  (op)
Fresh-Faced Recruit
Join Date: Jul 2004
Status: Offline
Reply With Quote
Nov 4, 2004, 11:31 AM
 
Thanks, guys for all the suggestion on this topic! Based on the suggestions provided, I have selected the following courses.

Introduction to Computer Programming

Introduction to C Programming

Introduction to Object Oriented Programming

Advanced Object Oriented Programming

They don't offer an Advanced C Programming course for some reason. However with the listed courses, I think this well be a good start in programming on my mac! Thanks again ....

bnewton
     
larkost
Mac Elite
Join Date: Oct 1999
Location: San Jose, Ca
Status: Offline
Reply With Quote
Nov 4, 2004, 01:57 PM
 
Originally posted by depolitic:
if this is for pleasure and you are aiming to develop for Mac OS X then forget Java, Java is an interesting language with huge commercial support but no one would ever call Java fun, while it may be easer the C++, neither C++ or Java will help you much Syntax wise with Objective-C.

Since OS X is your target Java has limited appeal.
Umm... Have you completely forgotten about Cocoa-Java? I will agree that pure Java (ie Swing or AWT) is not a good way of programming GUI applications for MacOS X, but dismissing Java as a language on MacOS X is silly.

Minor note: using Cocoa-Java means that you cannot easily port your applications to other OS's.
     
hayesk
Guest
Status:
Reply With Quote
Nov 5, 2004, 10:51 AM
 
Originally posted by larkost:
Umm... Have you completely forgotten about Cocoa-Java? I will agree that pure Java (ie Swing or AWT) is not a good way of programming GUI applications for MacOS X, but dismissing Java as a language on MacOS X is silly.
In my opinion, Cocoa-Java is useless - it provides no benefits. If you have to tie into Java classes (for example, JDBC) you can do that in Objective-C anyway using the bridge.

Languages take no time to learn
Frameworks take the most time. If you are going to take the time to learn Cocoa, then use the better language/compiler to do it - Objective C.


Minor note: using Cocoa-Java means that you cannot easily port your applications to other OS's.
That's exactly why it is useless. Even if you already know the Java language but don't know Obc-C - you can learn Obj-C in less than a day. The Cocoa frameworks are what will take the most time, no matter which language you use.
     
PBG4 User
Senior User
Join Date: Feb 2001
Location: Deer Crossing, CT
Status: Offline
Reply With Quote
Nov 5, 2004, 11:07 AM
 
Originally posted by hayesk:

That's exactly why it is useless. Even if you already know the Java language but don't know Obc-C - you can learn Obj-C in less than a day. The Cocoa frameworks are what will take the most time, no matter which language you use.
Well, you may be oversimplifying this. Some things, like pointers and memory management are done behind the scenes in Java. Learning these two topics would probably take more than a day to get solidly into your head if you had no C knowledge whatsoever.

Other than this little nit, I agree with what you said. I'd do Java programming on the Mac if a GUI built in Interface Builder could be migrated to Java Swing without me doing any coding.
20" iMac G5! :D AND MacBook 1.83GHz!
Canon Digital Rebel Kit + 75 - 300mm lens. Yum Yum! :D
Check out my OS X Musical Scales program
     
itai195
Addicted to MacNN
Join Date: May 2001
Location: Cupertino, CA
Status: Offline
Reply With Quote
Nov 10, 2004, 08:26 PM
 
Originally posted by depolitic:
if this is for pleasure and you are aiming to develop for Mac OS X then forget Java, Java is an interesting language with huge commercial support but no one would ever call Java fun
I'm late to the party here, but... BUT! I think Java is fun

That said, bnewton chose a good list of classes, that's exactly what I'd recommend. I don't think you need Advanced C Programming, taking an adavanced OOP class will probably be more useful to you. Personally I am of the camp that if someone is going to be a professional, they should start with some total off-the-wall language so they're motivated more by learning concepts than learning the language itself. For a hobbyist though, the path of least resistance is the best way to go!
     
zanyterp
Mac Enthusiast
Join Date: Apr 2003
Location: manticore or people's republic of haven
Status: Offline
Reply With Quote
Nov 10, 2004, 10:55 PM
 
Originally posted by itai195:
I'm late to the party here, but... BUT! I think Java is fun

That said, bnewton chose a good list of classes, that's exactly what I'd recommend. I don't think you need Advanced C Programming, taking an adavanced OOP class will probably be more useful to you. Personally I am of the camp that if someone is going to be a professional, they should start with some total off-the-wall language so they're motivated more by learning concepts than learning the language itself. For a hobbyist though, the path of least resistance is the best way to go!
in what way, and why? also, someone else had mentioned, previously, that they thought most commercial-type colleges do not teach how to program-any ideas on what was meant by that? is it meaning that there is more emphasis on pushing buttons and not caring what the code looks like? (ie making sure to avoid spaghetti in your code?) or . . .
thanks!
some people are like slinkys: they don't do much, but are fun to push down stairs.
     
larkost
Mac Elite
Join Date: Oct 1999
Location: San Jose, Ca
Status: Offline
Reply With Quote
Nov 11, 2004, 12:53 AM
 
hayesk: It seems to me that your arguments are more that Java is not a better language to program in rather than Obj-C is better. I would say that for the majority of programming tasks the two setups are evenly matched Obj-C Cocoa and Cocoa-Java. There are some things that tend to push me towards Java: slightly better Object orientation (altho it does go nuts when it comes to many of the Web app builders...), true garbage collection rather than manual reference counts (finding memory leaks in Obj-C can be painful), and the lack of header files (it annoys me to type the same information in twice...).

There are a few places where Obj-C has a lead: if you are going to build high performance Apps it is easier to blend your tight loops in C with Obj-C. It can be done with Java, and in these sort of situations JIT compilers for Java can be faster than static compiler code... sometimes, but usually someone who knows what they are doing can squeeze more out of C (not Obj-C).



zanyterp: I think what people are referring to is that most universities teach a very academic Computer Science code: data structures like red-black trees, OS design, big "O" notation, and the like. When you get out to the real world you learn that most programmers use a database rather than rolling their own data structures (why re-invent the wheel... there is little chance you can write a more optimal structure anyways... get on to solving the problem at hand), and a lot of time is spent getting up to speed with the APIs for existing Operating Systems. And big "O" notation runs straight into a brick wall when you try and apply it to real code that spends most of its time shuffling data back and forth to memory and disk (which is very costly... but ignored in most big "O" discussions).

This leads to a lot of frustration... some of it legitimate... that the stuff that they need to do the work is not covered in college courses... and the stuff that was covered is deep background stuff that not many people will actually ever use... hmmm... sounds like most college majors...
     
itai195
Addicted to MacNN
Join Date: May 2001
Location: Cupertino, CA
Status: Offline
Reply With Quote
Nov 11, 2004, 03:31 AM
 
Originally posted by zanyterp:
in what way, and why? also, someone else had mentioned, previously, that they thought most commercial-type colleges do not teach how to program-any ideas on what was meant by that? is it meaning that there is more emphasis on pushing buttons and not caring what the code looks like? (ie making sure to avoid spaghetti in your code?) or . . .
thanks!
I'll take a shot at what I think you're asking about, though my college followed a different CS curriculum than many other colleges. What follows is all 100% my opinion and I don't mean to offend anyone. These discussions always seem to turn into a big battle.

There are basically two approaches that I've seen to teaching CS -- career vs theory oriented. These are absolutes but you can find curriculums that fit somewhere in between. Anyway, the downside of a theory oriented curriculum is that a student doesn't necessarily learn the nuts and bolts of programming in the real world. For example, I spent a lot of time in college learning about data structures, AI, discrete mathematics, object oriented programming, compilers, and programming language theory. In contrast, a student from a more career-oriented program might graduate with a very in depth knowledge of C++, Visual Studio, and other various tools that are widely used out 'in the real world.' A college professor of mine summed up the difference pretty well when he said that 'students in other programs spend most of their time worrying about where to put semi-colons.' That's an exaggeration, but it's illustrative. Some schools spend a lot of time teaching students how to program in widely used languages using popular tools and popular platforms, while other schools spend more time teaching the abstract theories that comprise computer science. I wouldn't say theory-based curriculums don't teach students how to program, but they teach students to understand programming from a more abstract perspective. On the other hand, I think it is legitimate to question spending so much time learning about things like algorithmic complexity, which have only limited utility outside academia.

Each approach has pros and cons and both can produce excellent programmers. I feel the theory-oriented approach is preferable because an understanding of theory is a better foundation upon which to build a career in the IT industry. A hallmark of this approach is the lack of focus on learning specific languages and platforms. Graduates are more prepared to cope with a changing landscape, whereas a career-oriented program can produce folks who only feel comfortable using their tried and true tools. This isn't an iron-clad rule though, school is just one factor amongst many.
( Last edited by itai195; Nov 11, 2004 at 03:40 AM. )
     
hayesk
Guest
Status:
Reply With Quote
Nov 11, 2004, 01:54 PM
 
Originally posted by larkost:
hayesk: It seems to me that your arguments are more that Java is not a better language to program in rather than Obj-C is better. I would say that for the majority of programming tasks the two setups are evenly matched Obj-C Cocoa and Cocoa-Java. There are some things that tend to push me towards Java: slightly better Object orientation (altho it does go nuts when it comes to many of the Web app builders...), true garbage collection rather than manual reference counts (finding memory leaks in Obj-C can be painful), and the lack of header files (it annoys me to type the same information in twice...).
The problem is Java's garbage collection is not all that predictable. It can lead to bloated and slower code because of this. Reference counting in Obj-C is controllable and is becomes much easier with practice. I agree it is difficult at first, but it get's easier and there are decent tools to help debug it.
     
PBG4 User
Senior User
Join Date: Feb 2001
Location: Deer Crossing, CT
Status: Offline
Reply With Quote
Nov 11, 2004, 02:51 PM
 
Originally posted by hayesk:
The problem is Java's garbage collection is not all that predictable. It can lead to bloated and slower code because of this. Reference counting in Obj-C is controllable and is becomes much easier with practice. I agree it is difficult at first, but it get's easier and there are decent tools to help debug it.
There are functions available to the Java coder if you want to 'help' Java's garbage collector along. While the garbage collector still takes care of object de-allocation, you can request garbage collection & object checks in code. I haven't done any of this, but I did discover this in one of my many trips through the Java APIs.

I have yet to see these being used, but they must be there for a reason.
20" iMac G5! :D AND MacBook 1.83GHz!
Canon Digital Rebel Kit + 75 - 300mm lens. Yum Yum! :D
Check out my OS X Musical Scales program
     
zanyterp
Mac Enthusiast
Join Date: Apr 2003
Location: manticore or people's republic of haven
Status: Offline
Reply With Quote
Nov 11, 2004, 09:37 PM
 
Originally posted by itai195:
I'll take a shot at what I think you're asking about, though my college followed a different CS curriculum than many other colleges. What follows is all 100% my opinion and I don't mean to offend anyone. These discussions always seem to turn into a big battle.

There are basically two approaches that I've seen to teaching CS -- career vs theory oriented. These are absolutes but you can find curriculums that fit somewhere in between. Anyway, the downside of a theory oriented curriculum is that a student doesn't necessarily learn the nuts and bolts of programming in the real world. For example, I spent a lot of time in college learning about data structures, AI, discrete mathematics, object oriented programming, compilers, and programming language theory. In contrast, a student from a more career-oriented program might graduate with a very in depth knowledge of C++, Visual Studio, and other various tools that are widely used out 'in the real world.' A college professor of mine summed up the difference pretty well when he said that 'students in other programs spend most of their time worrying about where to put semi-colons.' That's an exaggeration, but it's illustrative. Some schools spend a lot of time teaching students how to program in widely used languages using popular tools and popular platforms, while other schools spend more time teaching the abstract theories that comprise computer science. I wouldn't say theory-based curriculums don't teach students how to program, but they teach students to understand programming from a more abstract perspective. On the other hand, I think it is legitimate to question spending so much time learning about things like algorithmic complexity, which have only limited utility outside academia.

Each approach has pros and cons and both can produce excellent programmers. I feel the theory-oriented approach is preferable because an understanding of theory is a better foundation upon which to build a career in the IT industry. A hallmark of this approach is the lack of focus on learning specific languages and platforms. Graduates are more prepared to cope with a changing landscape, whereas a career-oriented program can produce folks who only feel comfortable using their tried and true tools. This isn't an iron-clad rule though, school is just one factor amongst many.
thanks to you and larkost. but it is possible to find some sort of happy medium that teaches both the theory of good coding AND also teaches the more real-world-like stuff that is used? thanks!

nick
some people are like slinkys: they don't do much, but are fun to push down stairs.
     
itai195
Addicted to MacNN
Join Date: May 2001
Location: Cupertino, CA
Status: Offline
Reply With Quote
Nov 12, 2004, 03:51 AM
 
Originally posted by zanyterp:
thanks to you and larkost. but it is possible to find some sort of happy medium that teaches both the theory of good coding AND also teaches the more real-world-like stuff that is used? thanks!

nick
Probably. But I'd suggest just having a healthy sense of self-motivation -- teach yourself and work on your own projects in your spare time. It's not that hard to learn good programming skills and how to use various tools without instruction.
     
hayesk
Guest
Status:
Reply With Quote
Nov 12, 2004, 11:01 AM
 
Originally posted by PBG4 User:
There are functions available to the Java coder if you want to 'help' Java's garbage collector along. While the garbage collector still takes care of object de-allocation, you can request garbage collection & object checks in code. I haven't done any of this, but I did discover this in one of my many trips through the Java APIs.
Yes I realize that. But once you resort to that you are in essence, beginning to do your own memory management. At that point, just go the extra step and learn reference counting and use Obj-C.
     
depolitic
Registered User
Join Date: Feb 2003
Status: Offline
Reply With Quote
Nov 13, 2004, 09:09 PM
 
Calling the JVM to do garbage collection WILL NOT cause automatic garbage collection it is only a request. Read the fine print. Sun added it as a convenience method but calling it does not assure Garage collection.
     
Chuckit
Clinically Insane
Join Date: Oct 2001
Location: San Diego, CA, USA
Status: Offline
Reply With Quote
Nov 14, 2004, 03:07 AM
 
Originally posted by zanyterp:
thanks to you and larkost. but it is possible to find some sort of happy medium that teaches both the theory of good coding AND also teaches the more real-world-like stuff that is used? thanks!
Yes. Learn theory in school and practice in the real world.

Seriously, theory is generally applicable in almost any situation. On the other hand, "real world training" is actually just training for a very limited field. Not every project is going to be written in C++ or C# using Visual Studio, no matter how much Microsoft wishes that were true. When you know what sort of thing you would like to do, you can (hopefully) figure it out on your own once you have a good foundation. That's the thinking behind traditional computer science curricula. And to be fair, it does seem to have worked so far.
Chuck
___
"Instead of either 'multi-talented' or 'multitalented' use 'bisexual'."
     
ginoledesma
Mac Elite
Join Date: Apr 2000
Location: Los Angeles, CA
Status: Offline
Reply With Quote
Nov 14, 2004, 08:12 AM
 
Regarding the theory-oriented program vs career-oriented program, a middle-way solution is to offer electives. The core classes would focus on theory and the fundamental, whereas the electives should allow one to put into use the theory. Some cases of "real world" programming will benefit academic topics. For example, game programming alone requires a LOT of Math (even when using convenience frameworks). So does programming involving multimedia (audio/video). Granted, these are rather esoteric venues, but then again, writing these programs are some people's cup of tea.
     
Ghoser777
Professional Poster
Join Date: Dec 2000
Location: Chicago, Illinois
Status: Offline
Reply With Quote
Nov 14, 2004, 11:20 AM
 
Originally posted by PBG4 User:
You know, I can't see anyone voluntarily putting themselves through discrete math. I mean, I'm sure people are out there that wouldn't mind torturing themselves with discrete math, but I think you can learn most useful real world data structures without needing discrete math. Sure, you might not be able to determine Big-O or Big-Theta for searching a binary search tree, but I don't think this is quite necessary for the hobbyist.

I guess I was lucky at my school while 99.9% of everything was done in Java, all the conceptual bases were covered quite well (concepts, linked lists, trees, graphs, algorithms & algorithm analysis, etc.).

Now if I could only find a job in the CS field.
I LOVED DISCRETE MATH!

Okay... I'm a math major...
     
itai195
Addicted to MacNN
Join Date: May 2001
Location: Cupertino, CA
Status: Offline
Reply With Quote
Nov 15, 2004, 11:58 AM
 
Originally posted by Ghoser777:
I LOVED DISCRETE MATH!

Okay... I'm a math major...


Actually, I liked it too. A lot more than all the Calculus courses I had to take.
     
PBG4 User
Senior User
Join Date: Feb 2001
Location: Deer Crossing, CT
Status: Offline
Reply With Quote
Nov 15, 2004, 03:04 PM
 
Originally posted by Ghoser777:
I LOVED DISCRETE MATH!

Okay... I'm a math major...
My problem with discrete math is probably more with the teacher then anything else. We'd come into class and someone would have a question and our teacher would be like, "Oh, that is easy". Then he'd spend about 20 minutes doing it out on the board, then come up with the wrong answer and would have to start again. By the time this one example was actually done correctly, the 55 minute class would be over and we'd quickly be given the next chapter's homework assignment.

So most of us were left scratching our heads and trying to figure out chapter A, then chapter B before the next class. Of course that never happened. I think by the end of the course we had only made it to chapter 5 (combinations & permutations) in our book.

Of course, my traumatized mind buried all the pain of this class for two years. Then I took my algorithms course which of course relies heavily on discrete math. I probably spent more time in the teacher's office than I did in the actual class trying to relearn discrete math while learning to hack apart algorithms and discern their runtimes and fitness for a particular purpose.

So yes, I think with the proper teacher I could get into discrete a bit more than I did the last time around. It's just that I probably won't do it voluntarily (now that I'm finally done with school!) unless someone offers to pay me some decent cash.

Do I need to have discrete math down solid if I want to teach myself linear or boolean algebra? Not that I'm seriously considering this at the moment but it would be good to know ...

[edit]
I only learned the area portion of Calculus, I didn't go on to the volume portion of Calculus so I didn't mind it so much. Of course I never got to integration by parts so maybe that's why it didn't seem to hurt too much.
20" iMac G5! :D AND MacBook 1.83GHz!
Canon Digital Rebel Kit + 75 - 300mm lens. Yum Yum! :D
Check out my OS X Musical Scales program
     
itai195
Addicted to MacNN
Join Date: May 2001
Location: Cupertino, CA
Status: Offline
Reply With Quote
Nov 15, 2004, 03:29 PM
 
Integration by parts isn't so bad. Calculus was just very difficult at my school, and I had already taken two years of it in high school. But I will always hate vector calculus with a passion

I don't think you'll need to relearn discrete math if you want to teach yourself linear algebra. I took lin alg before discrete math in college (in fact, it was a prerequisite if I recall correctly).

My own school has launched a new discrete math course geared more toward CS students, and it's taught by CS faculty. It was something of a new, experimental course while I was there so I didn't take it, but I think it might be a better approach for CS students -- less mathematical rigor and more practical application to CS/programming. Maybe more schools will start offering this kind of course, if they don't already.
     
CincyGamer
Junior Member
Join Date: Oct 2004
Location: Cincinnati
Status: Offline
Reply With Quote
Nov 22, 2004, 02:56 PM
 
I ported a good Java micro benchmark to Objective C. Compiled using XCode 1.5 for Panther etc.. 1 GHZ TiBook. The results are the ObjC is about twice as fast as Apple Java 1.4.2_05. The benchmark does integer, trig math, double, long arthemetic billions of times.

The G4 is an amazing cpu and looking forward to getting Tiger and a G5.

Email me and I'll send you the code.
[email protected]
     
CincyGamer
Junior Member
Join Date: Oct 2004
Location: Cincinnati
Status: Offline
Reply With Quote
Nov 29, 2004, 11:36 PM
 
On the theory vs career approach..

My boss has a MBA and is a self taught programmer started with VB and now does VB/SQL server and is my boss because of experience and age and repuation etc. I have my Masters in CS (2000). At Lexis Nexis, my boss had a masters in History , undergrad in English. My other boss there didnt program anymore.. Java shop. The History guy taught himself programming too.

At my other companies Ive worked, my bosses werent programmers either. I havent had a real hardcore programming boss. But I work at insurance companies and larger companies.

The guy that posted that most programmers use a DB hit the nail on the head. All those months in CS classes implementing a B-Tree or a hashtable in C++ are wasted because all the programming languages have frameworks that have built in collection classes. Even C++ has libraries for this in Visual Studio and in std template libraries.

The professors just wanted us to do it from scratch. So, my masters has been wasted. I have not used very much of it because I process business records where even a MBA can do it.

So... I have a free Ph.D in CS offer sitting there at my college. But its not worth it for me to get it. I am afraid I wont be able to find a job after getting it (overqualified) or fail halfway thru. I make $60K a year now, its not worth the risk of failure plus going back to $15K a year for a couple years studying things I'll never use. I am not even using my masters now.

After working in IT, a couple years I feel like I want to work at a real CS job but live in Cincinnati and thats hard to find. So, I am working on getting my technical skills back and going to apply for some jobs ..

Getting A's in those 700-level classes in grad school, you would think that people would listen to you but there is SO many other factors in the real world. Appearance, popularity, age, office politics, other competition from other programmers (jr vs Sr), getting people to understand your ideas, fighting against other peoples agendas, getting people to get off their lazy asses.

Best advice I can give, is to enjoy waht you do and have fun studying the academic stuff. You miss it after awhile. I wish I had more CS people at work to talk about these things, but my boss literally flips out if we talk too much about true CS stuff. It really imitidates him. My boss also gives me massive **** about using Java and advanced programming stuff he doent understand because hes self -taught and not very technical. That is what I am talking about.. Also a big challenge you face is you cant implement something too advanced because management likes you to be expendable and if you leave they need warm and fuzzys that they can support it. So there goes J2EE, Jini, Mac.. etc. They dont tell you all this in school.

Later. Good luck.
     
zanyterp
Mac Enthusiast
Join Date: Apr 2003
Location: manticore or people's republic of haven
Status: Offline
Reply With Quote
Nov 30, 2004, 12:17 AM
 
Originally posted by CincyGamer:
On the theory vs career approach..

<snip>
Best advice I can give, is to enjoy waht you do and have fun studying the academic stuff. You miss it after awhile. I wish I had more CS people at work to talk about these things, but my boss literally flips out if we talk too much about true CS stuff. It really imitidates him. My boss also gives me massive **** about using Java and advanced programming stuff he doent understand because hes self -taught and not very technical. That is what I am talking about.. Also a big challenge you face is you cant implement something too advanced because management likes you to be expendable and if you leave they need warm and fuzzys that they can support it. So there goes J2EE, Jini, Mac.. etc. They dont tell you all this in school.

Later. Good luck. </snip>
cool. thanks for the advice . . . any idea why they don't like the advanced stuff, even though they don't understand it, if it makes things better? or is it just the wonderful world of corporate America?
some people are like slinkys: they don't do much, but are fun to push down stairs.
     
CincyGamer
Junior Member
Join Date: Oct 2004
Location: Cincinnati
Status: Offline
Reply With Quote
Nov 30, 2004, 11:36 AM
 
Dont want to come across as a know-it-all or anything just want to relay some of my experiences (good and bad).. To elaborate about the complexity issue..

I work in an insurance office IT dept as a Sr. Programmer Analyst. We have alot of data and files and applications that are running. Things like COBRA, eligibility, claims systems etc. The problem here is *cough* lack of young talent. There is one other programmer less than 30 in the 50 person IT dept. Im 29. The problem is see are two fold:

1. older programmers do not care about learning new technologies such as XSLT or Java or .Net (this is just here at my company)
The reasoning being that VB + SQL server + Stored Procedures or use Access works so well.

2. Applications are moving in a more "table-driven" standardized design. (This is very common problem Ive seen multiple places Ive worked).


How this relates to you, the CS student:
(please fell free to disagree, its encouraged)
-- For point 1: The problem is they being older have families and other things they do vs what a younger person does. They dont want to stay and work on learning something new with you. They would rather spend time at home getting dinner feed to them by their wife or relaxing. They are already high paid and stable job, so why change? A CS trained developer cares about other sets of technology than a IT programmer.


-- For point 1: Because all the data is stored in a table, the application becomes just a front end to the database. THis is how non-technical people can become programmers they just learn how to use ODBC and write some simple business rules and maybe a VB or ASP form.

-- for point 2: In school, every thing is done in code and compiled, unless you are in a very career oriented program, but you are probably not learning very much than how to use tools at this level. So, if something needs to be added to the program like a new customer you have to add it in code, retest everything, reploy the compiled code to servers. Based on the languages/technology used this can be hard to do such with J2EE. Or possibly if you use DLL's have to re-register everything.. Then you have issues where the source code is not the right version (not check in) or is lost etc.

So, in reality everytime you have static data like plancodes or customer ids etc. it cannot be hardcoded or you might have to recompile/test/deploy your code very often. It works better *gasp*
to just store all the data in a table (not RAM , there goes your data structures) and the business rule written as a SQL statment (stored procedure, so you dont have to recompile).

Another problem is you cant write customer specific one -off programs that is a massive trap. You will not be able to support it.
The pattern is to just have one program that runs for all customers. Some customers will have different options and business logic. This has to be abstracted away from the compiled code. Or you wont be able to keep up as the business changes. Think large scale here.

Also, if data needs to be locallly handled its done via a recordset (resultset in Java, rowset etc..) sorta like a table.

So thats business programming in a nutshell for you. So even if we had more CS geeks, we wouldnt change the model to be less db centric. J2EE is a different animal because the db is not used as much and the app server gets more work, but not as easy to program or easily modifiable/maintainable/priductive as what Ive mentioned above.
     
hayesk
Guest
Status:
Reply With Quote
Nov 30, 2004, 12:03 PM
 
Originally posted by CincyGamer:
The guy that posted that most programmers use a DB hit the nail on the head. All those months in CS classes implementing a B-Tree or a hashtable in C++ are wasted because all the programming languages have frameworks that have built in collection classes. Even C++ has libraries for this in Visual Studio and in std template libraries.

The professors just wanted us to do it from scratch. So, my masters has been wasted. I have not used very much of it because I process business records where even a MBA can do it.
No offence, but if you feel it has been a waste, it was only wasted on you. Insurance company IT departments aren't the pinnacle of computing jobs, so I agree with your assessment that it's not necessary there.

In school, you learn how B* trees, etc. works because knowing the theory gives you a broader understanding of how software works and helps you understand how to build new methods and algorithms. Sure there are prepackaged classes in C++, VB, etc. but where do you think they come from? From someone who understands the inner workings of it, not someone who builds in-house DB clients in an office. An academic degree is not job training, it is an education - it is important to understand the difference.

What you said is analogous to saying that a chef need not to go to cooking school because they can find all the dishes they need in the frozen food section in the supermarket. You may not want a chef working behind the counter at Wendy's, but if you go to a fancy restaurant then you want something better. Corporate IT depts are the fast food of programming - you won't get the most efficient, best designed software there. Software development companies are the fancy restaurants - you expect something better. That's where the intricate knowledge of CS comes into play.

If you really want to program and work for a company that develops new software, then the theory is very important. If you want to develop in-house db clients in a nameless corporation, then it's not as important.
     
CincyGamer
Junior Member
Join Date: Oct 2004
Location: Cincinnati
Status: Offline
Reply With Quote
Nov 30, 2004, 05:42 PM
 
Today I coughed up the dough for the Tiger developer kit (painful cough)and going start doing some interesting programming again.

Yes, IT programming sucks, but is likely your first job as there are alot more IT jobs than non IT jobs (say compilers or games etc..)

my posts were just random bitchings about life as a IT programming drone at a masses-of-asses insurance company, not a typical day in the life of a C/OpenGL programmer at Apple or Microsoft.

The threat is real.. the choices you make now affect you down the road. I still would recommend taking a higher level view of technology and study things you think are important. I would say dont sign up for an IT job, but thats just nnot realistic. It is interesting to work with large data sets, you just dont write algs to do this is my point unless you are in a non-IT shop like bioinformatics.

-- Another example --
There is very much to be said for someone who can program. When I interviewed at Microsoft (Redmond), I sucked at the programming questions they asked. I just graduated theory-based grad school and sucked at coding traversal of doubly-linked lists and such because I didnt do very much C programming at all in grad school. So, too much theory can hurt you in the interview. They did not ask me one question about any real deep CS stuff or stuff I learned in grad school. As soon as they could see that I was not the best C programmer they had in there that day (many young candidates they bring in), they labeled me "no hire".

The one guy in the group (Digitial Media Group - Microsoft HQ) was a laywer who taught himself CS and got a job at Microsoft and was younger than me ( I was 24!!) So all the theory in the world couldnt help me defeat my lack of programming skill in a high pressure interview situation. Plus they didnt ask me theory questions. They asked abstract questions "How do you test a life raft" or specific questions like program a heap in C, or write a function to reverse a string (got that one).. but even something as simple as that has to be 100% correct to an expert programmer like at Microsoft.

Well enough ramblings.. sorry for the lecture.
     
   
 
Forum Links
Forum Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Top
Privacy Policy
All times are GMT -4. The time now is 02:55 PM.
All contents of these forums © 1995-2017 MacNN. All rights reserved.
Branding + Design: www.gesamtbild.com
vBulletin v.3.8.8 © 2000-2017, Jelsoft Enterprises Ltd.,