13 Replies Latest reply: Oct 5, 2009 7:32 AM by GlynC
GlynC Level 1 Level 1 (5 points)
Hi all,

I'm interested in becoming a developer. I trained as a Mechanical Engineer but want to branch out into computing. Don't want to spend thousands on Open University courses etc. so I want to do it all by reading books.

I have a good understanding of computing hardware (due to the nature of my current job), a keen interest in Math and I have done some very simple VB development in the past but my target is to eventually get into Algorithm programming and development (sounds interesting, all-be-it a long way away at the moment).

I would be using a Mac to do any coding since I don't have a Windows PC

I would like some guidance/books/websites that provide:

- a good introduction of programming/software development in general including the software/hardware link
- an indication of the languages and technologies suitable for developing on a Mac.
- Good and current books for the languages and technologies mentioned above
- Any good and current books on Algorithm development.

Many thanks,

Glyn

MacBook Pro 2.4GHz C2D, 4GB DDR3, iPhone 1st Gen, iPod Shuffle x2, Mac OS X (10.5.7), Still waiting for LX3 RAW support (.rw2)
  • 1. Re: Becoming a developer
    reststop Level 1 Level 1 (65 points)
    Hi Glyn,

    The answer to this question depends on whether you have ever done any programming at all.
    Many engineering curricula require some programming courses, and you mention VB. While I'm not familiar with VB, being a Mac and Unix guy, I will say you have a few options open to you.

    Mac programming used to be in Pascal, and then moved over to a combination of C and Objective-C. Other languages such as Python and Perl are also available, as are a couple of forms of Basic. If you just want to dabble, those may be of interest. To do full-blown Mac or iPhone programming, you will want to learn C, and Objective C. You should also look for some conceptual books on Object Oriented Programming, which I think some others here would know better what to recommend.

    Publisher APress has a good series of books aimed at learning to program using a Mac, Learn C on the Mac and Learn Objective-C on the Mac. I would also suggest going to Amazon and searching for both of these and take a look at their feature for what buyers of those books also bought. Check out other offerings by O'Reilly, Addison Wesley, and Wiley.

    These are a good start, and will provide a solid foundation for learning how to program, and they are geared to doing that with a Mac. Once you master these, take a look at some of the other selections. You will also want to familiarize yourself with the UNIX operating system, since the underlying core of Mac OSX is based on an open-source version of Unix called Darwin. This will help you understand your development environment, and also enrich your background with a better understanding of the philosophy of learning how to create reusable modules that can be used in later projects. The power of UNIX (and by extension, Darwin and Linux) is in the ability to tie programs together to make a more synergistic environment. The power of the Mac, is to provide a graphical user environment and easy to use and easy to understand applications.

    There are also online tutorials for C, and Objective-C, and several sites with developer forums, but I suggest you get comfortable with C and Objective C syntax and programming before doing a lot of posting, since many examples you'll find assume you have some background in those two languages.

    If you're primary interest is developing for the iPhone, then the third book you should consider, also from APress, is Mark and LaMarche's Beginning iPhone Development: Exploring the iPhone SDK and/or whatever other books may be available by the time you are ready for that. I would definitely say get some C and Objective-C programming under your belt before trying to work on the iPhone. It will keep you from getting frustrated with syntax errors, the development environment, and learning how to use the frameworks.

    My last two tidbits are to understand that C and Objective C are actually fairly easy to learn, as the languages are well structured. What will take a long while, is becoming proficient with knowing what library functions are available and best for each situation, and learning how to use the Framework API's (or Application Programming Interfaces).

    And the best way to learn something quickly is to pick a project you are really interested in seeing a working result or have a passion for. That will drive you to learn whatever you need to complete it.

    As for books on Algorithms, I don't know what's current. There is a classic set on computing theory and algorithms by Donald Knuth, which by your interest in Math should be both helpful and enlightening.

    For websites, just remember Google & search-engines are your friend. The right quoted words or syntax will find you a wealth of information, including pointers to forums, online tutorials, online journals. I often go looking for things and spend hours reading related material, even though sometimes I don't find the exact answer I'm looking for.

    Hope this answers your questions. As some other posters have said in the past, I derive no compensation, from the recommendation of the above books, or series. I own the iPhone book mentioned, and plan to get copies of the others to keep for my reference library. I have over 30 years of programming experience, dabbling in over two dozen languages. I'd say comfortably that I'm more of a jack-of-all-trades and master-of-none, and there are others on this forum who are most certainly experts on both C and Objective-C who are quite willing to help out if you have specific questions.
  • 2. Re: Becoming a developer
    RayNewbie Level 5 Level 5 (6,810 points)
    Hi Glyn -
    The response you got from Reststop is full of excellent advice, and is about as complete an answer as possible without knowing you personally. I made the transition from EE to CIS at a time when Unix & C were way cool, MS was a magazine and Apple was a fruit. I have lots of opinions on how to and how not to get started.
    including the software/hardware link

    At one time, every software book was written for engineers. In fact very often, how to program the machine was one chapter in a book about how the machine worked. I was lucky enough to stumble across a book which started with hex numbers and ended with the design of a nine bit machine made from I don't remember how many nand gates.

    Books like that are hard to find now. There isn't much of a market for nine-bit machines, and most readers want to know how a newbie programmer can bring up a GUI social networking app in 5 or 6 weeks--and preferably without buying the book. Even the best books don't assume the reader is an engineer, so don't address the questions an engineer will have. Even in colleges, there's now a sharp line drawn between hardware (Computer Technology) and software (Computer Science).

    So prepare to be frustrated as you try to find out how an operating system relates to the machine. The people who work at that interface are often called driver writers. They're as good with a scope as they are with assembly language and they often retire in Hawaii after just a few years with a startup.

    If none of the above is helpful right now, I hope you'll at least remember you aren't alone, ok?
    Good and current books for the languages and technologies mentioned above.

    Start by poking the search engine of any good online book store. Then start spending as much time as you can spare in bookstores. You want the kind of bookstore that has at least a 40 foot wall covered from floor to ceiling with programming books. I can find that in Santa Cruz, Calif. So I'm not prepared to believe that someone who lives where the language was invented can't do better.
    I have done some very simple VB development

    Stay away from that stuff. Don't Brits ever see the ad that shows your brain, and then shows eggs frying in a pan? Remember, no matter how many miles you ride with training wheels, you'll never learn to ride a bicycle that way.
    Don't want to spend thousands on Open University courses etc. so I want to do it all by reading books.

    I know what you mean. Though up till now I've only spent a little time with a flight simulator on my pc (and having bad luck landing manually), I'm interested in becoming a commercial airline pilot without spending thousands of dollars and who knows how many years in a flight school. So I'd very much appreciate any advice on how I can do this. Thanks in advance!! (in advance cuz I don't know how to close a thread, so that's all the thanks you'll get, sucker).

    Sorry, having a little fun at Apple's expense... But I'm trying to ask you not to shoot yourself in the foot. If you really want to be a programmer, the difference between a couple well chosen college courses, and flailing away in isolation is like day and night. If you only take one course, take a course called _Data Structures_. Without that course you may be a developer, but you'll never be a programmer. To see what I'm talking about, get the book Reststop recommended by Knuth. Some might say he invented data structures. The book is a classic, but it's not meant for casual readers.

    That said, there's no such thing as a computer science book that's harder than fluid mechanics. If you got through that course, most programming books will be like a day at the beach. But take Data Structures if you're serious about understanding software, ok? What's one course gonna cost you? You might even enjoy meeting some other new programmers in your neighborhood.

    Wishing you every success in your new pursuit!
    \- Ray
  • 3. Re: Becoming a developer
    Tron55555 Level 2 Level 2 (180 points)
    ...I have done some very simple VB development in the past...


    Stay away from that stuff. Don't Brits ever see the ad that shows your brain, and then shows eggs frying in a pan? Remember, no matter how many miles you ride with training wheels, you'll never learn to ride a bicycle that way.


    hehe... "This is your brain on Visual Basic"

    In all seriousness, though, I think Visual Basic is good for just that -- the basics. It certainly helped me get some of the most basic concepts of programming down, but RayNewb's training wheel/bicycle analogy is right on -- you don't want to stick around with VB too long, if at all. There's absolutely nothing wrong or unreasonably difficult about starting off right into C, like some people think, and if you're going to be programming on the Mac, then that's definitely the way to go, as RS mentioned above. And by learning with other languages like VB you miss out on important concepts that have been covered up for the sake of simplicity of programming, such as pointers (a mistake that this forum is still in the process of helping me to correct).

    So, sounds like you're all set up to get to work with the advice above, but I'll add my little bit in, being a not-so-experienced programmer myself. First off, like RS mentioned, C and Objective-C are what you want to be working with on the Mac for programming. There are other applications for programming out there like RealBasic and X-Develop that will allow you to develop on the Mac, but if you are looking to become a serious developer, I'd stay away from them. C and Objective-C are how you are intended to develop on the Mac.

    To clarify, Objective-C is a superset of C -- this means that it has everything C has and more (the "more" in this case would be support for OOP -- object-oriented programming). So, if you're just starting, there's no need to worry about Objective-C right now (in my opinion, of course -- if someone else here tells you differently, then listen to them, not me). There's always time to learn Objective-C once you have a solid understanding of C. The Apress "Learn" series that RS mentioned in his post is a great recommendation. I own two of the three of these starter books and they are wonderful. There are three of them to start with -- Learn C on the Mac, Learn Objective-C on the Mac, and Learn Cocoa on the Mac, and they recommend that you read them in that order -- so even they suggest that you start with C. The first two books (C and Objective-C) are on languages, where as Cocoa is a framework -- something I wouldn't worry about at the moment.

    There's not much else out there in terms of Objective-C -- there's one other book out there called Programming in Objective-C 2.0 that I don't know anything about, but I think that's about it. However, if you are starting with C, there are plenty other books out there. As mentioned, the Learn C on the Mac book is great, but in case you are looking for other options, I would look into the Sams books -- Teach Yourself C in 24 Hours, Teach Yourself C in 21 Days (bigger than the 24 hour one), and Absolute Beginner's Guide to C (although all of them are for people with no experience in programming, this last one is best if you want an especially beginner-oriented guide). These books aren't aimed at the Mac like the Apress ones are, but that doesn't really matter as long as you know how to use Xcode, which comes real easy.

    Xcode and Interface Builder are the two main applications (there are others) that Mac makes available to you (for free) to develop with. Interface Builder is where you create your GUI (graphical user interfaces), and if you're starting with C, you won't need to worry about that either for now -- Xcode will take care of everything you need for C. You can download the full set of developer tools (Xcode, Interface Builder, and so forth) by going to this site https://connect.apple.com/cgi-bin/WebObjects/MemberSite.woa/106/wo/Wg58krIdpzvM2 d3Sk6Pf40EeDkx/0.0 (this is the ADC (Apple Developer Connection) Member Site -- Google it if the link doesn't work). Once you get to that site, sign up for ADC if you are not already a member (easy enough to do), then log in on the right hand side of that site. Once you log in, click on the Downloads link on that page and the Developer Tools v3.1.4 will be the third listing down -- you can download the disk image from there. If you have Snow Leopard, then you will want to find version 3.2, which you can Google for easy enough.

    Once you have Xcode (all this will be explained in the Apress book if you get that one), open a new project and go to the Command Line Utility section and select Standard Tool project (this is the type of project that is written in C). Like I said, doing it this way will require no use of Objective-C or Interface Builder or anything besides Xcode and the C language itself. That's the beauty of Command Line applications -- they are perfect for learning, since everything is done from the Console window. You will be all set up to practice everything C.

    Here are two other links that were recently started by beginners with questions like yours -- hopefully you can find something helpful in them as well:

    http://discussions.apple.com/thread.jspa?threadID=2149079&tstart=0

    http://discussions.apple.com/message.jspa?messageID=10145003#10145003

    Anyways, hope you found something helpful amongst all this. Programming is a wonderful thing -- hope you enjoy it.
  • 4. Re: Becoming a developer
    K T Level 7 Level 7 (23,700 points)
    Stay away from that stuff. Don't Brits ever see the ad that shows your brain, and then shows eggs frying in a pan? Remember, no matter how many miles you ride with training wheels, you'll never learn to ride a bicycle that way.


    Here, here... Ray couldn't have illustrated that point any clearer. If you take any hints at all, be sure this one is on the list.

    To quote off the 'net:

    Source: Jargon File (4.3.1, 29 Jun 2001)

    BASIC /bay'-sic/ n. A programming language, originally designed for
    Dartmouth's experimental timesharing system in the early 1960s, which
    for many years was the leading cause of brain damage in proto-hackers.
    Edsger W. Dijkstra observed in "Selected Writings on Computing: A
    Personal Perspective" that "It is practically impossible to teach good
    programming style to students that have had prior exposure to BASIC: as
    potential programmers they are mentally mutilated beyond hope of
    regeneration." This is another case (like Pascal) of the cascading
    lossage that happens when a language deliberately designed as an
    educational toy gets taken too seriously. A novice can write short BASIC
    programs (on the order of 10-20 lines) very easily; writing anything
    longer (a) is very painful, and (b) encourages bad habits that will make
    it harder to use more powerful languages well. This wouldn't be so bad
    if historical accidents hadn't made BASIC so common on low-end micros in
    the 1980s. As it is, it probably ruined tens of thousands of potential
    wizards.
  • 5. Re: Becoming a developer
    K T Level 7 Level 7 (23,700 points)
    GlynC : Hey! I see you found your way in from the other forum.

    As promised, the devs here are a mouthy, er...helpful bunch, eh?

    I can add little if any to what's already been broached, however, I would like to encourage you to investigate online learning and some of the podcasts/videos that are available on iTunes as an example. Check out iTune U for an ever expanding resource collection, etc.

    Even if you don't take up software development as a career, you can look forward to a lifetime of the resulting related discipline and logical thinking it brings to the table...practices and habits that can be applied over and over, in both your job and your private life.
  • 6. Re: Becoming a developer
    Tron55555 Level 2 Level 2 (180 points)
    Even if you don't take up software development as a career, you can look forward to a lifetime of the resulting related discipline and logical thinking it brings to the table...practices and habits that can be applied over and over, in both your job and your private life.


    So true. I started programming about three years back (off and on) and it has definitely changed to way I think, for the better. It encourages logical, rational thought processes that, as K T mentioned, can be beneficial far beyond the realm of computer programming. I have found that programming, besides being unmeasurably enjoyable and rewarding in itself, has had a positive effect on many other aspects of my life as well. It's an absolutely wonderful hobby, even if you don't decide to take it any further than that.

    Funny -- although I've heard VB get bashed on many times, that's the first time I've ever read something that actually claimed it to be detrimental to programming habits. I don't doubt it, though. The first year of my programming was spent with mostly C#, and some VB, on Windows. Then I moved to C++ for the year or so after that, and now I'm here, finally learning to program C/Objective-C on the Mac like I've wanted to for so long. Anyways, hopefully I didn't dabble in the evils of VB long enough to get the programming "brain damage" you referred to, K T. I guess time will tell...
  • 7. Re: Becoming a developer
    J. Michael Dean Level 2 Level 2 (150 points)
    The discussion has ignored the question of whether you want your programming efforts to be portable beyond OSX; for this platform, the Cocoa environment is elegant, tools are relatively free, and the Apple site has a ton of useful documentation.

    If portability is an issue, however, you might stumble into the Java jungle with Eclipse, which is also free, and obviously for Java, there is a huge amount of information about programming, etc.

    In my own circumstance, I would rather be programming in Cocoa continually, but I am faced with constraints of having to deliver on multiple platforms, which forced me to include Java in the mix. I hope this is helpful.
  • 8. Re: Becoming a developer
    GlynC Level 1 Level 1 (5 points)
    Crikey!!! So many responses! Thank you so much... now to read them all...
  • 9. Re: Becoming a developer
    GlynC Level 1 Level 1 (5 points)
    "That said, there's no such thing as a computer science book that's harder than fluid mechanics."

    Ha ha... this made me laugh, ironically I chose to go the 'solid' mechanics route in my final and masters, still tricky stuff though! I found I enjoyed the maths and logic more than the application to the physical problems I was trying to solve.

    Just as some background, I now work for an Electronics Sub-Systems company as a programme manager so I'm heavily involved with both hardware and software architecture without actually doing the coding/schematics.

    The VB stuff I've done in the past has been simply 'productivity' stuff, repetitive tasks etc.

    I had already clocked the 'Learn C/Objective-C for the Mac' book, and I will start by looking into some data structures courses.

    Many thanks for your help
  • 10. Re: Becoming a developer
    johncmurphy Level 2 Level 2 (255 points)
    As an EE, these are some of the books I have found helpful (in addition to the K&R, of course):
    Tanenbaum - http://www.amazon.com/Structured-Computer-Organization-Andrew-Tanenbaum/dp/01314 85210/ref=nttat_ep_dpi4
    This explains the machine-software connections well.

    Holub - http://www.amazon.com/C-Companion-Allen-I-Holub/dp/0131097865/ref=sr11?ie=UTF8&s=books&qid=1253936691&sr=1-1
    This books attempts to fill in the gaps (from the K&R) for engineers, particularly on the subject of how source code is translated from text in a text editor to binary in the RAM memory.

    Knuth - http://www.amazon.com/Art-Computer-Programming-Volumes-Boxed/dp/0201485419/ref=s r11?ie=UTF8&s=books&qid=1253936720&sr=1-1
    Vol. 1 is good on thinking like a programmer.
  • 11. Re: Becoming a developer
    GlynC Level 1 Level 1 (5 points)
    Hi again,

    So I've started off with C and reading a book on data structures for the time being with the intention of moving to C++, Obj-C and Java.

    Just following on from my previous, very general question, can anyone advise me as to some good 'microcontroller' starter kits/projects available in the UK that I can design some small apps for on the Mac, compile and load onto the uC and try some stuff out with?

    If I'm teaching myself using small/basic app tutorials then I want to make sure they work on very basic/limited hardware in the hope that it'll force me to understand resource limitations that I wouldn't normally experience when running on a fully-blown Mac. As my tutorials get more complex I have to optimise and innovate.

    Thanks,

    Glyn
  • 12. Re: Becoming a developer
    GlynC Level 1 Level 1 (5 points)
    Just found out about Arduino, any experiences?
  • 13. Re: Becoming a developer
    GlynC Level 1 Level 1 (5 points)
    Well... just ordered a Arduino development kit plus LCD. It has an OS X IDE, but I've found a few XCode templates from the community that should allow me to write in C/C++ within XCode. I have a USB to serial port adapter just in case.