Hi there! I have some free time on my days, maybe like 2 hours daily and I would like to give a shot to learn to program software for MacOS. So far: I have gathered the following resources:
In 2007 or 2008 I decided to do the same thing. I got that second book on your list, woke up an hour earlier every morning, and spent an hour going through each and every exercise in the book till I finished it. Then I started building my own apps. Eventually I put one in the Mac App Store, then another one.
My approach worked. It took time and dedication. Be prepared for your mind to always be working on programming problems, even when not in front of a computer. The best advice I got from that book is this: “You’re not dumb, programming is hard.”
I believe @ibuys approach is the best. Programming is best learned by doing, in a progressive step-by-step manner. @Jvet mentions several sources, which might at some point form the basis for a good library, but I would avoid jumping around too many sources when first starting out. Hillegass & Preble (the Cocoa Programming book) is a solid starting point.
I’m considering the same, but I’m in doubt if I shouldn’t go for Electron (I know some don’t like it, but it’s much easier for me).I always like the content from FreeCodeCamp. Here are some resources on Swift:
Isn’t this book a bit outdated? It’s from 2011 (before Swift) and I guess you will be more future proof with Swift. Have you looked at Apple’s documentation?
Thanks for sharing the resources from FreeCodeCamp. I linked by accident the 2011 versiob, this one is from 2015 (still outdated). I added another resource at the last bullet point , same publisher and not outdated.
Have you looked at Apple’s documentation?
I looked a it briefly but got lost because I felt everything was geared towards iOS. However, those links you wrote seem to be better.
What problem do you want to solve?
Learning to code is always easier if you have something you need to do that your app will help with. Yes, I have a Computer Science degree but it was a lot easier to do a quick investigation into what choices there were and then pick a language based on the needs of the problem I wanted to solve. Then start learning that language. If you are just learning to code then pick something that is general purpose and learn that but I really think you need a problem to solve first. It’s VERY hard to learn programming without a use case and IMO the demo cases are all to simple and boring. I have tohave something I care about or I won’t pay attention and learn it.
Will it ever need to run on anything other than Mac OS? (iOS, Android, Windows, Linux?)
Seriously, think about it up front. If you do decide on a MacOS only realize that if your project is actually useful for you it might be useful for others and they may need something else.
Personally, if the problem you want to solve can be done with something like Electron while I know lots of folks hate it, you’ll get a much better grasp of overall programming issues and end up with a cross platform version.
If not I’d look at the languages that applications similar to your problem are written in and learn that one(s).
In my case, a lot of the scientific and genetic analysis stuff that I knew I was going to want eventually was written with Python and Numpy so that is what I had to learn. I also knew that with Apple’s restrictions on bluetooth and the hardware I have to interface with that I could not target iOS or iPadOS. Maybe someday but for now the mobile app is Android only and all in Java.
Second, get a good IDE and learn how to use its debugging tools. I’m partial to JetBrains stuff, Android Studio is free and I bought PyCharm because the stuff I learned in AS carried over.
This. Whether macOS purists will buy your app is probably a lower consideration at this point than whether or not your programming knowledge is generally useful to do something you want to accomplish in the real world.
Also noting that if you’re thinking of “what ONE language/environment/etc. should I learn?”, that’s a trap. If you learn programming, the odds are good that - even as a hobbyist - you’ll probably wind up working in at least a handful of languages. The only question is which language/environment/etc. you learn first.
Kind of like cleaning a house. You need to pick a place to start, but it’s not like you’re going to stop after you finish the living room.
Absolutely! This sis so important. And also be prepared to learn ancillary stuff (SQL queries because I need to store and manipulate data) and so on. Think if it as a way to keep your brain young, always having to learn something new.
I have a handful of problems that I really want to tackle, or that I have seen someone else implement a solution which I think could be a little better and also other apps that I think were great but now have become abandonware .
I wanted to pick up swift because I think it will be fun trying to learn it and I really love apple products, with no interest at the moment in making something for windows, electron or android. It may be a little niche, but because I see it as a hobby rather than a full time job at the moment I’m not having trouble with it. Also, I do plan on taking what I develop to iOS and WatchOS . Although, I agree that something like elctectron will be more universal.
Also noting that if you’re thinking of “what ONE language/environment/etc. should I learn?”, that’s a trap
Good advice, I’ll keep an open mind! I want to start with swift just because I like my apple products and something inside me tells me “with swift it will be fun!”. Later surely as you point, I might try something like python, which in terms of interest is the second one in my list.
While the Electron recommendation is absolutely sound, if this is more a personal side quest for fun the allure of enjoyment is key. I have had my share of learning new stuff and I kind of miss the excitement of shaping your ideas in a new programming territory.
I wanted to say I checked out your blog and saw you work on Opus One for their UI. What a great work! Good motivational stuff there, I subscribed through RSS.