Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

The Cockney Rebel

macrumors 68020
Original poster
Nov 16, 2018
2,412
2,898
Hello all,

As per the title?

I've just started researching this, and it's all a bit daunting.

I'm a bit older, now (49) so my memory isn't as good as it was when I was younger. Hopefully I'll just need to re-read over certain things, when I get stuck.

Thank you in advance, for any advice.

Regards.
 

casperes1996

macrumors 604
Jan 26, 2014
7,434
5,578
Horsens, Denmark
Hello. If you look through the developer forums here, there are many similar posts from the pasts with answers from me and others. A lot of advice in those threads will also be relevant here so I recommend having a look over those for learning resources and tips.

I don't think it's a good idea to have the mentality of "learning Swift" or any other specific language. Rather, have the mentality of "I am learning programming". You may learn programming through the lens of a specific language at first, but you will learn general concepts applicable to any language. Once you become proficient in one, you will see that they are all kind of the same in some way (with significant differences still existing of course) and easily transfer skills between them.

You really don't need to remember all that much. You need to learn concepts, ways of thinking and general ways of deducing and solving problems. Once you know the algorithmic steps involved in solving a problem, you can always look up the particular syntax of how to do it in a given language - that's really not that significant a part.
From an outside perspective it may seem like programmers remember a bunch of magic keywords but, while you will eventually remember the things you use a lot, remembering the magic words isn't what makes a programmer. Knowing the general steps involved in doing a thing is the key. Then you can look up the rest. We all look up things all the time. We sit with reference manuals, API lists and manual pages open constantly. Knowing how to look things up properly and understanding the answers to queries is also one of those things you'll learn as you go.

For more specific resources for learning I refer back to prior threads - Feel free to ask if you'd like more, anything specific, further clarification, etc. :)
 

The Cockney Rebel

macrumors 68020
Original poster
Nov 16, 2018
2,412
2,898
Hello. If you look through the developer forums here, there are many similar posts from the pasts with answers from me and others. A lot of advice in those threads will also be relevant here so I recommend having a look over those for learning resources and tips.

I don't think it's a good idea to have the mentality of "learning Swift" or any other specific language. Rather, have the mentality of "I am learning programming". You may learn programming through the lens of a specific language at first, but you will learn general concepts applicable to any language. Once you become proficient in one, you will see that they are all kind of the same in some way (with significant differences still existing of course) and easily transfer skills between them.

You really don't need to remember all that much. You need to learn concepts, ways of thinking and general ways of deducing and solving problems. Once you know the algorithmic steps involved in solving a problem, you can always look up the particular syntax of how to do it in a given language - that's really not that significant a part.
From an outside perspective it may seem like programmers remember a bunch of magic keywords but, while you will eventually remember the things you use a lot, remembering the magic words isn't what makes a programmer. Knowing the general steps involved in doing a thing is the key. Then you can look up the rest. We all look up things all the time. We sit with reference manuals, API lists and manual pages open constantly. Knowing how to look things up properly and understanding the answers to queries is also one of those things you'll learn as you go.

For more specific resources for learning I refer back to prior threads - Feel free to ask if you'd like more, anything specific, further clarification, etc. :)
Many thanks.
 

KaliYoni

macrumors 68000
Feb 19, 2016
1,727
3,804
I think casperes1996 gave a great summary of what coding entails. As such, I'll just add some general, career-focused thoughts derived from my experiences and my spouse's experiences:
  • Memorizing and learning how to do things by rote is not nearly as important as the ability to assess a task or problem and quickly gain insights into how to create efficient solutions. In other words, a person whose main strength is the ability to memorize a 1,000 item checklist won't be as much in demand as a person who enjoys coming up with ways to solve questions like "how many screws are in a 747?" or "in a 64 team basketball tournament, how many games are required to determine the champion?" on the fly, using a minimum number of steps.
  • There is a lot of ageism in the tech industry. There is a lot of focus on pedigree in the tech industry. There is a lot of sexism in the tech industry. This means, at least in the US, that hiring managers, for both corporate jobs and consulting gigs, heavily favor young men who either have very prestigious university degrees (for entry-level jobs) or experience at massively scaled, hyper successful companies (e.g. Google, Facebook) or massively valued startups (e.g. pre-IPO Uber, Coinbase).
  • A major challenge facing single-person consultancies is having to juggle acquiring clients with getting actual work done. Plus there is all the administrative stuff involved with running a business layered on top of that.
----------
ETA: consultants and contractors have become a global workforce. A lot of outsourced work, unless you have personal contacts or connections inside a hiring company, consequently, goes to people in countries with lower pay expectations than people based in the US and Western Europe. So taking your own personal lifestyle and financial resources are important factors to consider when thinking about striking out on your own.
 
Last edited:

Senor Cuete

macrumors 6502
Nov 9, 2011
423
30
The Big Nerd Ranch's books are excellent. I recommend:


and:

 

StellarVixen

macrumors 68040
Mar 1, 2018
3,177
5,637
Somewhere between 0 and 1
If you mean by “learn” to learn syntax and basic things about Swift, you should be able to learn relatively quickly (bonus if you already know some other languages).

If you want to really KNOW Swift, it can take a long time, and you will learn more and more as you make more and more projects in Swift.


I have found that best way to learn programming is to build stuff. Crash course and books can only do so much.
 

Red Menace

macrumors 6502a
May 29, 2011
578
226
Colorado, USA
Be aware that in addition to learning the desired language, you will need to get familiar with the Cocoa/Cocoa Touch frameworks, Xcode or whatever IDE you plan to use, and various tools and resources such as offline documentation.

Also make sure you don't have a fragile ego - some of those developer forums can be brutal.
 

orionquest

Suspended
Mar 16, 2022
871
787
The Great White North
Hello. If you look through the developer forums here, there are many similar posts from the pasts with answers from me and others. A lot of advice in those threads will also be relevant here so I recommend having a look over those for learning resources and tips.

I don't think it's a good idea to have the mentality of "learning Swift" or any other specific language. Rather, have the mentality of "I am learning programming". You may learn programming through the lens of a specific language at first, but you will learn general concepts applicable to any language. Once you become proficient in one, you will see that they are all kind of the same in some way (with significant differences still existing of course) and easily transfer skills between them.

You really don't need to remember all that much. You need to learn concepts, ways of thinking and general ways of deducing and solving problems. Once you know the algorithmic steps involved in solving a problem, you can always look up the particular syntax of how to do it in a given language - that's really not that significant a part.
From an outside perspective it may seem like programmers remember a bunch of magic keywords but, while you will eventually remember the things you use a lot, remembering the magic words isn't what makes a programmer. Knowing the general steps involved in doing a thing is the key. Then you can look up the rest. We all look up things all the time. We sit with reference manuals, API lists and manual pages open constantly. Knowing how to look things up properly and understanding the answers to queries is also one of those things you'll learn as you go.

For more specific resources for learning I refer back to prior threads - Feel free to ask if you'd like more, anything specific, further clarification, etc. :)
Hey your input is appreciated.

I'm in a similar situation like the OP, late to the programming party. I've dabbled a bit trying to get started. Most of the tutorials are good at giving you the basics and then falls apart and forces you to make a project and you are suppose to be done.

I think your advice about learning the concepts is a great idea, and feels like the part that is missing from the stuff I have explored. But do you have any specific courses, tutorials etc.
I did go back into some of the older posts and the advice seems very similar with no references. I took a look at the pinned post about beginning website and dev, but honestly all that stuff looks dated and again only covers the basics not what is mentioned here.

One course I have seen which comes up around other places is the CS50 by Harvard University. It's the only one from what I can tell which focus's on concepts and is highly reguarded. Is this what you are referring to?

Any resources you can share would be valuable! thanks!
 

casperes1996

macrumors 604
Jan 26, 2014
7,434
5,578
Horsens, Denmark
Hey your input is appreciated.

I'm in a similar situation like the OP, late to the programming party. I've dabbled a bit trying to get started. Most of the tutorials are good at giving you the basics and then falls apart and forces you to make a project and you are suppose to be done.

I think your advice about learning the concepts is a great idea, and feels like the part that is missing from the stuff I have explored. But do you have any specific courses, tutorials etc.
I did go back into some of the older posts and the advice seems very similar with no references. I took a look at the pinned post about beginning website and dev, but honestly all that stuff looks dated and again only covers the basics not what is mentioned here.

One course I have seen which comes up around other places is the CS50 by Harvard University. It's the only one from what I can tell which focus's on concepts and is highly reguarded. Is this what you are referring to?

Any resources you can share would be valuable! thanks!
Hi!
Thanks for reaching out. First, some specific prior posts of mine with resources that you may or may not have found as you looked back

#13
#4

I've mostly focused on Swift here since that's what people tend to ask about, but in a more general sense I will also recommend a YouTuber named Jacob Sorber. He's a university professor and makes high quality videos. His focus is generally C. Sometimes things are very C specific, but his general topics are very educational.

I also want to clarify that while I often say to focus on the general concepts, that doesn't mean you shouldn't be making things in a specific language, that you should be jumping between languages or, especially at first, explicitly search out abstract learning material instead of the specific.

I don't know if you know much about learning music, but I will use it as an analogue.

If you want to learn music, there's a lot of music theory that can help you be a better musician. But to apply any of it you also do need to get some familiarity with playing an instrument. And as you go, getting better with one will improve the other in tandem. You get better at playing your instrument and internalise note positions on the instrument, well your theoretical learning can now use that concrete understanding as an anchor for learning about how those notes go together in harmonic structures. Likewise, learning about that you can explore the instrument more. But once you learn all of this, it also becomes applicable to other instruments that you can then more quickly show some level of competence with.

Programming is fairly similar in that respect. Focus on the general, yes, but don't skip to it. I don't know what level of knowledge you are currently at, but trying to abstractly learn about design patterns, closure capture reference cycles, algorithms, etc. won't help if you're not familiar enough with the basic of a language to where you can formulate simple programs with it and use it as a testing platform for the new things you learn, at least when they are applicable.

Building your own things away from a tutorial guiding step by step is a necessary part of the learning process. Don't be afraid to look up "How to x" for individual steps, but try and do as much as you can away from tutorials. Start simple. Very, very simple. Make a program that takes a list of inputs and sorts them or something. You can test ideas here. Instead of reading the list from args, read it from stdin. Now read it from a file. Now also allow a flag to change the sorting order. Add a flag that sums numerical values instead and remember to handle errors if it's not numbers, and do dispatching. But iterate. Don't do it all at once, but do something then the next. Get into the habit of writing tests at some point so you can ensure nothing new breaks the old stuff quickly.

Programming is both a craft, and art and a mathematical field. Knowledge, skil and creativity all parts of it.

I don't know about the Stanford course, but for design patterns the so-called "Gang of Four" has a book titled "Design Patterns. Elements of Reusable Object Oriented Design" - If you learn by reading well then that's a very referenced book in design patterns. I do not recommend it until you are familiar with object-oriented programming in general however.

Being curious and reading documentation about things as you come across them can help in general, and looking at documentation for various Collection types in different languages will give a good introduction to data structures - but there's probably excellent videos and books on this too, I can't really recommend any specific however.

Apple's books on Swift alongside Swift Playgrounds and Hacking With Swift in my opinion are good about describing things in ways such that they pertain to Swift but can easily be understood through the lenses of other languages if you move on to other things in the future.

Computers today have insanely many layers and while you will probably touch many things over time, you also just can't learn it all at once. It's OK to not know everything and you will learn over time too. All the time, and it never ends. It's turtles all the way down. But having something to make will continuously move you towards the next things to learn if you place the goals right. By which I mean never overshoot too far. If your starting goal is a networking application that uses GPU acceleration and machine learning, you'll never make anything. But if you always try and make the simplest thing you don't yet know how to do entirely, or even just something you feel really confident you know perfectly how to do, just to hone your skills and train your code and code architecture muscles, you will gradually improve.

Feel free to for further details, clarification, elaboration, or to request code-level guidance :)
 
  • Like
Reactions: orionquest

orionquest

Suspended
Mar 16, 2022
871
787
The Great White North
Hi!
Thanks for reaching out. First, some specific prior posts of mine with resources that you may or may not have found as you looked back

#13
#4

I've mostly focused on Swift here since that's what people tend to ask about, but in a more general sense I will also recommend a YouTuber named Jacob Sorber. He's a university professor and makes high quality videos. His focus is generally C. Sometimes things are very C specific, but his general topics are very educational.

I also want to clarify that while I often say to focus on the general concepts, that doesn't mean you shouldn't be making things in a specific language, that you should be jumping between languages or, especially at first, explicitly search out abstract learning material instead of the specific.

I don't know if you know much about learning music, but I will use it as an analogue.

If you want to learn music, there's a lot of music theory that can help you be a better musician. But to apply any of it you also do need to get some familiarity with playing an instrument. And as you go, getting better with one will improve the other in tandem. You get better at playing your instrument and internalise note positions on the instrument, well your theoretical learning can now use that concrete understanding as an anchor for learning about how those notes go together in harmonic structures. Likewise, learning about that you can explore the instrument more. But once you learn all of this, it also becomes applicable to other instruments that you can then more quickly show some level of competence with.

Programming is fairly similar in that respect. Focus on the general, yes, but don't skip to it. I don't know what level of knowledge you are currently at, but trying to abstractly learn about design patterns, closure capture reference cycles, algorithms, etc. won't help if you're not familiar enough with the basic of a language to where you can formulate simple programs with it and use it as a testing platform for the new things you learn, at least when they are applicable.

Building your own things away from a tutorial guiding step by step is a necessary part of the learning process. Don't be afraid to look up "How to x" for individual steps, but try and do as much as you can away from tutorials. Start simple. Very, very simple. Make a program that takes a list of inputs and sorts them or something. You can test ideas here. Instead of reading the list from args, read it from stdin. Now read it from a file. Now also allow a flag to change the sorting order. Add a flag that sums numerical values instead and remember to handle errors if it's not numbers, and do dispatching. But iterate. Don't do it all at once, but do something then the next. Get into the habit of writing tests at some point so you can ensure nothing new breaks the old stuff quickly.

Programming is both a craft, and art and a mathematical field. Knowledge, skil and creativity all parts of it.

I don't know about the Stanford course, but for design patterns the so-called "Gang of Four" has a book titled "Design Patterns. Elements of Reusable Object Oriented Design" - If you learn by reading well then that's a very referenced book in design patterns. I do not recommend it until you are familiar with object-oriented programming in general however.

Being curious and reading documentation about things as you come across them can help in general, and looking at documentation for various Collection types in different languages will give a good introduction to data structures - but there's probably excellent videos and books on this too, I can't really recommend any specific however.

Apple's books on Swift alongside Swift Playgrounds and Hacking With Swift in my opinion are good about describing things in ways such that they pertain to Swift but can easily be understood through the lenses of other languages if you move on to other things in the future.

Computers today have insanely many layers and while you will probably touch many things over time, you also just can't learn it all at once. It's OK to not know everything and you will learn over time too. All the time, and it never ends. It's turtles all the way down. But having something to make will continuously move you towards the next things to learn if you place the goals right. By which I mean never overshoot too far. If your starting goal is a networking application that uses GPU acceleration and machine learning, you'll never make anything. But if you always try and make the simplest thing you don't yet know how to do entirely, or even just something you feel really confident you know perfectly how to do, just to hone your skills and train your code and code architecture muscles, you will gradually improve.

Feel free to for further details, clarification, elaboration, or to request code-level guidance :)
Thanks for your quick and throughout reply, very helpful.

The music analogy was perfect, and made sense to me.

I'll check out your suggested materials, and thanks for the offer to connect further if needed.
 
  • Like
Reactions: casperes1996

Silentwave

macrumors 68000
May 26, 2006
1,615
50
I have found that best way to learn programming is to build stuff. Crash course and books can only do so much.

This is some of the best advice you can get.

I'm going through the process of learning to code myself. I've done some Swift, right now focusing on Dart / Flutter because I want to make some things cross-platform. Despite being a tech-savvy / power user type, and despite working in IT (Product Management), I had a lot of problems over the years trying to pick this up.

Two things that really changed the game for me -
1. Focusing in on concepts, although for me this was in the form of picking more modern languages with less boilerplate code, more safeguards, etc., to help me spend more time on what matters.
2. Building a LOT of things. I did a few online courses where you build multiple apps, and that was good. What's kept me fresh is I build anything that comes to mind. It forces me to think about how I would solve whatever problem/problems that spurred the thought, then practice making it come to life. Favorite Chinese restaurant doesn't have a website and I keep losing my menus? Code a menu app. Don't like the way a particular app I use does something, and I think I know a better way? Build a demo app to play with that feature. I don't have to maintain these things if I don't want to, but it's the act of practice, repetition, and variety in thinking that has done more to make things stick than anything.
 

jdb8167

macrumors 601
Nov 17, 2008
4,730
4,424
Hello all,

As per the title?

I've just started researching this, and it's all a bit daunting.

I'm a bit older, now (49) so my memory isn't as good as it was when I was younger. Hopefully I'll just need to re-read over certain things, when I get stuck.

Thank you in advance, for any advice.

Regards.
Two weeks. Hello world is pretty easy.

Becoming a good programmer takes a lifetime. I’m 60 and I’m learning something new almost every day.

The point is that you can start quickly but don’t expect to design the next great app in a month. It takes time. Just have fun if possible.
 
  • Love
Reactions: The Cockney Rebel

The Cockney Rebel

macrumors 68020
Original poster
Nov 16, 2018
2,412
2,898
Two weeks. Hello world is pretty easy.

Becoming a good programmer takes a lifetime. I’m 60 and I’m learning something new almost every day.

The point is that you can start quickly but don’t expect to design the next great app in a month. It takes time. Just have fun if possible.
Thank you.
 

comeback

macrumors newbie
Feb 9, 2023
12
3
Opensource community is my daily drive.
I was primarily able to do C++/Windows code, now through GitHub, stackexchange, .. I am almost capable of code any task on any OS
lol
P/s I am 50 now and not know when it will stop lol
 
Last edited:
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.