 |
 |
Help to be a programer
|
 |
|
 |
|
Forum Regular
Join Date: Oct 2000
Location: singapore
Status:
Offline
|
|
Hi, there is this question always in my mind and since I own a Mac, there is no other place where I can post my question which is better then here.
I would like to learn programing and write Mac software, but I have no computer science knowledge. Would anybody recommend a book or something to help me get started? And which program and language should I begin with? Please give me a hand and let me join in the world of developing Mac software.
Freeman
|
|
|
| |
|
|
|
 |
|
 |
|
Mac Enthusiast
Join Date: Sep 2000
Location: Vermont, USA
Status:
Offline
|
|
I was in your shoes a little while ago. I became an online developer for Apple (because it is free) and downloaded their developer tools. I then went through their Cocoa Java tempertature converter tutorial. That got me off to a good start.
Good luck.
|
|
|
| |
|
|
|
 |
|
 |
|
Addicted to MacNN
Join Date: May 2001
Location: Cupertino, CA
Status:
Offline
|
|
This depends on if you want to learn computer science (good habits) or just programming (bad habits).
|
|
|
| |
|
|
|
 |
|
 |
|
Dedicated MacNNer
Join Date: Nov 2000
Status:
Offline
|
|
"This depends on if you want to learn computer science (good habits) or just programming (bad habits)."
Not only is this an oversimplification, it's wrong.
Computer science is applied mathematics and logic. Computer scientists devise new algorithms and prove or disprove the validity and characteristics of these algorithms through rigorous use of formal logic. A computer scientist can perform his job without ever touching a computer. Remember writing geometry proofs in highschool? That's what a computer scientist does.
Computer programmers are more akin to engineers. They utilize algorithms devised by computer scientists to produce a product, software. Good programmers use design patterns to construct software, like architects use design patterns to design buildings. Obviously this is not a "bad habit".
The two fields are not mutually exclusive. Computer scientists sometimes implement their algorithms in software, and programmers sometimes devise completely new algorithms. For example, Donald Knuth, one of the most influential computer scientists, has written several programs including TeX, but his primary occupation is computer science.
Employers are a major contributing factor to this confusion. Nine out of ten employers require programmers to have a degree in computer science, when what they really need is programmers with a background in software engineering. Hopefully more universities will step up to the plate and offer degrees focused on software engineering.
Anyone else got clarifications. corrections, or additions? I'd like to solidify my response to this common misunderstanding.
|
|
|
| |
|
|
|
 |
|
 |
|
Dedicated MacNNer
Join Date: Nov 2000
Status:
Offline
|
|
Freeman,
I would suggest you have a look at Python for Beginners and Thinking in Python. Supposedly, Python is an excellent language for novice programmers.
You might also consider Smalltalk. It's a simple, powerful language comprised of 5 keywords. You can get a non-commercial version of Visualworks by Cincom here, or get a copy of Squeak here. Visualworks ships with some excellent tutorials, but Squeak is probably easier to use.
Cocoa/ObjC have their roots in Smalltalk, so if you decide to go that route, you'll be able to apply your Smalltalk knowledege to developing Cocoa applications; however, you'll be able to find more support for Python in the form of tutorials, mailing lists, forums, etc.
Whatever you do, stay far far away from C or C++. C is good for when you just HAVE to be able to do things at the hardware level. C++ is just an abomination. I'm sure the devil has put aside a few extra hot pokers for Bjarne Stroustrup.
|
|
|
| |
|
|
|
 |
|
 |
|
Fresh-Faced Recruit
Join Date: Nov 2002
Location: Sydney Australia
Status:
Offline
|
|
Languages are just tool kits that allow you to achieve different objectives.
C - Gives machine level control, with more speed and power than most. Great for Operating Systems.
C++ - the language of choice for most large software projects, like Photoshop, and for most games. But I have been told it is a B*i*t*c*h to work with.
Objective-C/Cocoa - Great for Mac OSX, as the power of C++ without the pain. But really only for OSX, but it can be ported. But outside of OSX it is a virtually exiting language, with no major project's written in it outside of OSX, and Apple.
Java - My preferred language and one of the most popular developer language in the world. High level language, so non of the machine level stuff. Easy to learn Syntax, fully Object Orientated, Completely Portable, great support for for Java on OSX. Plus can be used to build virtually anteing from Dynamic database driven web-site, to Games, and assorted Applications. But has some draw backs like any language.
Real-Basic - Then their is Real-Basic, some people like it. Related to MS Visual Basic, but I have only heard bad things about RB on OSX. But easy to learn I have been told.
Programming is about trade offs, gain flexibility lose speed. Gain feature loose portability, etc etc.
A good point is that you will need to learn many languages, each one has something to teach.
|
|
|
| |
|
|
|
 |
|
 |
|
Addicted to MacNN
Join Date: May 2001
Location: Cupertino, CA
Status:
Offline
|
|
Originally posted by int69h:
"This depends on if you want to learn computer science (good habits) or just programming (bad habits)."
Not only is this an oversimplification, it's wrong...
Sorry, but I think you're the one oversimplifying. Design of algorithms is just a part of the entire computer science field, not its entirety. It's the theoretical portion of the discipline, while software engineering is the somewhat more practical application of the theories and other engineering concepts. There should be no distinction, both combine to make up computer science. It IS possible to program without understanding any of the theory, but often those programs will be poor.
(Last edited by itai195; Jan 16, 2003 at 02:30 AM.
)
|
|
|
| |
|
|
|
 |
|
 |
|
Dedicated MacNNer
Join Date: Nov 2000
Status:
Offline
|
|
Physicists and Accounts both utilize the works of Mathematicians daily in their jobs. Would you argue that they are also Mathematicians? I had to (poorly) use the syntax and grammar of the English language to construct this post. Does that make me a professional writer?
Perhaps the Computer Science department at Stanford can explain it better than I.
I'm not advocating that programmers need no knowledge of computer science. Obviously they need to know the fundamentals like basic datastructures, searching and sorting, etc.
|
|
|
| |
|
|
|
 |
|
 |
|
Professional Poster
Join Date: Sep 1999
Location: Ottawa, ON, Canada
Status:
Offline
|
|
Originally posted by int69h:
I'm not advocating that programmers need no knowledge of computer science. Obviously they need to know the fundamentals like basic datastructures, searching and sorting, etc.
Agreed. I would also argue that programmers should have knowledge of interface design too. Having knowledge of software interface design as well as real world object interface design is important. I wish more schools would make it mandatory. Too many programmers believe simply having a GUI makes it easy to use. Gee, I wonder where that theory came from. 
|
|
|
| |
|
|
|
 |
|
 |
|
Addicted to MacNN
Join Date: May 2001
Location: Cupertino, CA
Status:
Offline
|
|
int69h: I think we agree more than we think we do, we're just using different terminology. What I was basically trying to say is that learning computer programming is one thing, but in order to be a truly competent programmer you have to know a sizable amount of the theory. You can be a programmer without knowing any theory, but you'll often learn bad habits that way. You do not have to be an expert in algorithm design to be a competent programmer, but you have to know which algorithms and data structures to use in particular situations, and you should be able to, in general, determine the efficiency of your code.
BTW, I'm a Berkeley grad and you're linking me to a Stanford website? FOR SHAME!
hayesk: I agree that applications programmers should have an education in interface design, but there is a ton of other software out there that requires no interface. Making interface design a requirement for everybody would be overkill, I think.
|
|
|
| |
|
|
|
 |
|
 |
|
Dedicated MacNNer
Join Date: Nov 2000
Status:
Offline
|
|
BTW, I'm a Berkeley grad and you're linking me to a Stanford website? FOR SHAME!
In an ideal world, Soda Hall would be transplanted onto Stanford's campus, or Berkeley would lure Knuth away from Stanford.
I've still got a roll of film to develop from my visit to Soda Hall a few years ago. That "History of Computing" display on the first floor was pretty cool.
edit to make this post semi-ontopic for developer forum:
Woz got his BS EECS from UC Berkeley in 1987.
Edit to correct previous edit.
The former editor has been sacked
(Last edited by int69h; Jan 16, 2003 at 10:25 PM.
)
|
|
|
| |
|
|
|
 |
|
 |
|
Posting Junkie
Join Date: Feb 2000
Location: Washington, DC
Status:
Offline
|
|
I'm considering buying this book to learn Object C...
Anyone read/look at this?
http://www.amazon.com/exec/obidos/AS...988984-1726456
I think I'm going to jump in feet first and then go back and learn how I did everything...
I'm also considerin going to take a few classes in C and C++ (I know this is all object C, but that's what I'm mooking for)
I basically just want to write a few key (small) apps and do the shareware thing...
|
|
|
| |
|
|
|
 |
|
 |
|
Dedicated MacNNer
Join Date: Nov 2000
Status:
Offline
|
|
|
|
|
|
| |
|
|
|
 |
|
 |
|
Posting Junkie
Join Date: Feb 2000
Location: Washington, DC
Status:
Offline
|
|
If you are young (just out of college) would it be better to learn carbon or cocoa? I would rather be VERY good at one then OK-ish at both...
I'm thinking of Cocoa... but I could be making a big mistake... HELP!?
|
|
|
| |
|
|
|
 |
|
 |
|
Fresh-Faced Recruit
Join Date: Sep 2001
Status:
Offline
|
|
Originally posted by mitchell_pgh:
If you are young (just out of college) would it be better to learn carbon or cocoa? I would rather be VERY good at one then OK-ish at both...
I'm thinking of Cocoa... but I could be making a big mistake... HELP!?
I'm just out of college myself and I chose Cocoa. If you get used to the strange Objective-C syntax, you'll find it's easier and a lot more applicable for future development.
Not only is it a lot simpler than Carbon, the principles you learn from object-oriented programming will also allow you to move on to growing future languages (Java, C#). Also, with the use of Objective-C++ you get a very advanced mixture of languages.
The disadvantage is that there are some things that can only (rarely) be done in Carbon. But you can put these calls in Cocoa often and learn them after you mastered Cocoa.
|
|
|
| |
|
|
|
 |
|
 |
|
Clinically Insane
Join Date: Oct 2001
Location: San Diego, CA, USA
Status:
Offline
|
|
Originally posted by mitchell_pgh:
If you are young (just out of college) would it be better to learn carbon or cocoa? I would rather be VERY good at one then OK-ish at both...
I'm thinking of Cocoa... but I could be making a big mistake... HELP!?
It really depends on what you want to do, I suppose. In general, Cocoa would be the better choice for an API just because it is much easier to learn and work with, and allows for much faster application development. Carbon does have more functionality, but it is large, inelegant (IMO) and not nearly as easy to pick up or work with.
But really, I think you're fooling yourself if you think you'll only ever need one API to get by. You can focus on one, but don't reject others if they're what's needed for the job.
Of course, I don't claim to be an expert of any sort. These are just my general observations.
|
|
Chuck
___
"Instead of either 'multi-talented' or 'multitalented' use 'bisexual'."
|
| |
|
|
|
 |
|
 |
|
Posting Junkie
Join Date: Feb 2000
Location: Washington, DC
Status:
Offline
|
|
Originally posted by Chuckit:
But really, I think you're fooling yourself if you think you'll only ever need one API to get by. You can focus on one, but don't reject others if they're what's needed for the job.
No, I wouldn't only learn one API, but if you are a "guru" at one and understand the other...
Thanks for the input...
|
|
|
| |
|
|
|
 |
|
 |
|
Dedicated MacNNer
Join Date: May 2001
Location: Edinburgh, UK
Status:
Offline
|
|
Originally posted by int69h:
"This depends on if you want to learn computer science (good habits) or just programming (bad habits)."
Not only is this an oversimplification, it's wrong.
Computer science is applied mathematics and logic. Computer scientists devise new algorithms and prove or disprove the validity and characteristics of these algorithms through rigorous use of formal logic. A computer scientist can perform his job without ever touching a computer. Remember writing geometry proofs in highschool? That's what a computer scientist does.
I'm currently in my 3rd year of a computing science course and I sure as hell don't spend my time devising new algorithms. I have however certainly done enough proofs of existing algorithms to make me want to kill some of the people who created them.  Most of the time a formal proof would not be economically viable for a company to allow its employees to perform. The only time where it would be used would be things like nuclear power stations and aircraft flight control systems.
From the view of my CS course, which is one of the most theoretical in the UK, computing science is about the design of highly efficient and highly reusable code. It is more about the application of algorithms than the creation of algorithms.
|
|
|
| |
|
|
|
 |
 |
|
 |
|
|
|
|
|

|
|
 |
Forum Rules
|
 |
 |
|
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
|
HTML code is Off
|
|
|
|
|
|
 |
 |
 |
 |
|
 |
|